www.flickr.com
|
Monday, April 03, 2006
TSSJS 2006
Well my plan of live coverage at TSSS didn't work out so well for a few reasons, flaky wireless not being the least of those reasons. Anyhow, I'll give a brief overview of each of the speakers I checked out. I'll probably go into more detail in the future as I investigate various technologies that appeared to be interesting to me.
First talk was Cedric's talk on TestNG. It gave a good overview of what is offered and why it's better than JUnit. In a nutshell you are able to exert more control over how your tests are setup and executed. I haven't delved into the details of using TestNG yet but as I look into JBoss seam a bit I'll no doubt be posting more opinions and thoughts about it as well as seam. The best feature to me so far appears to be the failed test script generation. When your tests fail a script file is created that will enable you to just run the failed tests, very handy.
The next talk was a split for me between Heinz Kabutz's talk on what amounted to java proxies and Chris Nelson's talk on his trails project. Heinz is a good speaker and his talk was sort of a Josh Bloch type of talk where he discussed some advanced topics and patterns and best practices. Most of his talk was useful for infrastructure code writing, like WebLogic and other plumbing frameworks, not so much for writing apps. Seeing as I'm not super interested in that topic I decided to checkout the Trails talk and see how it matches up with RoR. I walked into the talk and I guess I'd not missed much as he was trying to get a demo working for what must've been a half hour or so because he hadn't covered much ground. He gave the slide talk and gave a demo where he did a bunch of CRUD operations which we've all seen by now but trails is missing what I was really hoping for and what most of the java community seems to be missing and that is something that goes end to end in terms of tooling and deployment. I asked many questions at the end and there is not much thought or effort being placed into things like unit and functional testing, or database migrations, or ajax integration. Overall I didn't get the larger philosophy or vision about what it is that the trails team is setting out to accomplish besides trying to mimick a small portion of what rails offers. To be fair I've not really taken a look at trails and hopefully I just missed a bunch of things that are either in the project or on the roadmap.
Next I went to see the first of two talks by Geert Bevin. This talk was on java continuations. Simply put continuations are a way of executing some code, persisting the state of your execution at that point, and then resuming from there when you come back to continue. The assertion Geert makes is that it makes it nice and easy to program webapps because of the very nature of request/response and the build up of state over multiple request/response cycles. Geert is a really great speaker and knows his topic very well and is well prepared and it shows, he's very polished. I plan on looking into continuations and the rife framework a bit so I'll post more on that in the future. There is still one question that Sam asked that I've still not heard a good answer to and that is, "What if I'm using a resource or am in a transaction and I pause my execution? What happens to those resources in the context of a continuation?". If anyone has a good answer to that question I'd love to hear it.
Next up was Justin Gehtland & Dion Almaer talking about AJAX. They had some great tips and tool recommendations for AJAX development such as a plugin for firefox called firebug that allows you to see dynamic changes to your DOM tree. The tools for AJAX style development are all still in their infancy but it looks like things are coming along nicely. Oh and I won't mention that the example app they were using for their AJAX demo was a rails app (unless they decided to change their tomcat port to 3000 for some uknown reason ;-)
The last talk of the day was Kito Mann's talk about portlet development with JSF. The takeaway here is that he likes liferay the best out of all the java open source portals and also recommends not using the JSPTL at all to one audience user who asked about it. It also appears that facelets are the templating mechanism of choice for JSF development right now.
I also briefly checked out Gavin's talk about seam but was too interested in hearing about rife so I bailed after a few minutes and went down the hall to check that talk out. In short it seems that rife is about the closest thing to a rails like framework that java has to date. Thought I've not checked out grails yet so maybe those guys have done a good job as well. I wish there were more hours in the day to dive into more of these frameworks but with the day job keeping me busy on Java EE 5.0 and my spare time filled with ruby and rails it'll be hard to squeeze in much time to get familiar with these frameworks that no doubt have great features and innovation. I think when it's all said and done that rife will be the most innovative web framework out of the newest crop but that's just a hunch :-)
The last talk of note was Bruce Tate's talk about ruby, rails, seaside, and all things beyond java. I mostly enjoyed the talk but unfortunately I think that Bruce isn't as forthcoming about some of the problems that you can have when making one of these other languages/frameworks your platform of choice. He talked about ruby quite a bit but didn't talk about some of the potential dangers of having something as powerful as mixins can be. Don't get me wrong, I'm a fan of ruby and rails but it's not perfect and I think it's best to call out some of the things that could be seen as a detriment and a reason you wouldn't choose ruby on rails.
First talk was Cedric's talk on TestNG. It gave a good overview of what is offered and why it's better than JUnit. In a nutshell you are able to exert more control over how your tests are setup and executed. I haven't delved into the details of using TestNG yet but as I look into JBoss seam a bit I'll no doubt be posting more opinions and thoughts about it as well as seam. The best feature to me so far appears to be the failed test script generation. When your tests fail a script file is created that will enable you to just run the failed tests, very handy.
The next talk was a split for me between Heinz Kabutz's talk on what amounted to java proxies and Chris Nelson's talk on his trails project. Heinz is a good speaker and his talk was sort of a Josh Bloch type of talk where he discussed some advanced topics and patterns and best practices. Most of his talk was useful for infrastructure code writing, like WebLogic and other plumbing frameworks, not so much for writing apps. Seeing as I'm not super interested in that topic I decided to checkout the Trails talk and see how it matches up with RoR. I walked into the talk and I guess I'd not missed much as he was trying to get a demo working for what must've been a half hour or so because he hadn't covered much ground. He gave the slide talk and gave a demo where he did a bunch of CRUD operations which we've all seen by now but trails is missing what I was really hoping for and what most of the java community seems to be missing and that is something that goes end to end in terms of tooling and deployment. I asked many questions at the end and there is not much thought or effort being placed into things like unit and functional testing, or database migrations, or ajax integration. Overall I didn't get the larger philosophy or vision about what it is that the trails team is setting out to accomplish besides trying to mimick a small portion of what rails offers. To be fair I've not really taken a look at trails and hopefully I just missed a bunch of things that are either in the project or on the roadmap.
Next I went to see the first of two talks by Geert Bevin. This talk was on java continuations. Simply put continuations are a way of executing some code, persisting the state of your execution at that point, and then resuming from there when you come back to continue. The assertion Geert makes is that it makes it nice and easy to program webapps because of the very nature of request/response and the build up of state over multiple request/response cycles. Geert is a really great speaker and knows his topic very well and is well prepared and it shows, he's very polished. I plan on looking into continuations and the rife framework a bit so I'll post more on that in the future. There is still one question that Sam asked that I've still not heard a good answer to and that is, "What if I'm using a resource or am in a transaction and I pause my execution? What happens to those resources in the context of a continuation?". If anyone has a good answer to that question I'd love to hear it.
Next up was Justin Gehtland & Dion Almaer talking about AJAX. They had some great tips and tool recommendations for AJAX development such as a plugin for firefox called firebug that allows you to see dynamic changes to your DOM tree. The tools for AJAX style development are all still in their infancy but it looks like things are coming along nicely. Oh and I won't mention that the example app they were using for their AJAX demo was a rails app (unless they decided to change their tomcat port to 3000 for some uknown reason ;-)
The last talk of the day was Kito Mann's talk about portlet development with JSF. The takeaway here is that he likes liferay the best out of all the java open source portals and also recommends not using the JSPTL at all to one audience user who asked about it. It also appears that facelets are the templating mechanism of choice for JSF development right now.
I also briefly checked out Gavin's talk about seam but was too interested in hearing about rife so I bailed after a few minutes and went down the hall to check that talk out. In short it seems that rife is about the closest thing to a rails like framework that java has to date. Thought I've not checked out grails yet so maybe those guys have done a good job as well. I wish there were more hours in the day to dive into more of these frameworks but with the day job keeping me busy on Java EE 5.0 and my spare time filled with ruby and rails it'll be hard to squeeze in much time to get familiar with these frameworks that no doubt have great features and innovation. I think when it's all said and done that rife will be the most innovative web framework out of the newest crop but that's just a hunch :-)
The last talk of note was Bruce Tate's talk about ruby, rails, seaside, and all things beyond java. I mostly enjoyed the talk but unfortunately I think that Bruce isn't as forthcoming about some of the problems that you can have when making one of these other languages/frameworks your platform of choice. He talked about ruby quite a bit but didn't talk about some of the potential dangers of having something as powerful as mixins can be. Don't get me wrong, I'm a fan of ruby and rails but it's not perfect and I think it's best to call out some of the things that could be seen as a detriment and a reason you wouldn't choose ruby on rails.
Comments:
<< Home
Hi Michael,
thanks a lot for your compliments. IIRC, Sam asked this question during Bruce's talk and I did go to the microphone at the end to briefly answer it. Maybe you already left in the meantime.
Basically, the same rules apply as for any web application: you have to be very careful when you lock a resource and let the response go to the user. Since, as in any non-continuations web app, you're never sure that the user will send a next request, it's generally a bad idea to structure your application like this and rely on a next request to unlock the resource.
However, if you need cross-request synchronization or transaction handling, you're still able to add a filter to web.xml that executes before the RIFE filter and that handles all this for you. This is possible thanks to partial continuations, where only the state is captured and resumed from the moment the RIFE filter executes.
Also, regarding synchronization inside the continuation logic. This is a non-issue since each request gets a dedicated instance of the class that is executed. It's not possible that another request executes through the same instance.
I hope this answers your questions. If not, please feel free to sign up to the mailing list, we can continue the discussion there.
Best regards,
Geert
thanks a lot for your compliments. IIRC, Sam asked this question during Bruce's talk and I did go to the microphone at the end to briefly answer it. Maybe you already left in the meantime.
Basically, the same rules apply as for any web application: you have to be very careful when you lock a resource and let the response go to the user. Since, as in any non-continuations web app, you're never sure that the user will send a next request, it's generally a bad idea to structure your application like this and rely on a next request to unlock the resource.
However, if you need cross-request synchronization or transaction handling, you're still able to add a filter to web.xml that executes before the RIFE filter and that handles all this for you. This is possible thanks to partial continuations, where only the state is captured and resumed from the moment the RIFE filter executes.
Also, regarding synchronization inside the continuation logic. This is a non-issue since each request gets a dedicated instance of the class that is executed. It's not possible that another request executes through the same instance.
I hope this answers your questions. If not, please feel free to sign up to the mailing list, we can continue the discussion there.
Best regards,
Geert
<< Home
Post a Comment