Java Review of the Year 2005

I just had a read of this article over at OnJava.com, rounding up the most popular articles of 2005 published on that site. In a nutshell, the popular subject areas seem to be mainly Hibernate/EJB 3.0, Spring, Ajax, Eclipse, and Ruby-On-Rails/Python/whatever. After reading the article, I decided to round up my personal technological high points of 2005:

  • Finally getting to use Java 5. For the last year or so, I’ve been working on real-life projects based on a Java 5 platform inside two large banks. The general technology stack has been Spring, Hibernate 3.0 (plus Hibernate annotations), Java 5, and Tomcat 5.5. The experience has been positive and enjoyable. For starters, you get a performance boost “for free” by switching to JDK 5.0 and Tomcat 5.5. Once you get used to them, annotations feel like a natural way to define Hibernate persistence mappings. And the various bits and pieces of syntactic sugar in JDK 5.0 (such as the enhanced for loop and generics) are a definite plus.
  • Hibernate 3.0. I’ve always liked Hibernate, but one aspect of Hibernate that I have never taken to is that it has always been a framework that enforced an “ivory tower” view of how things should be done, and made it difficult for anyone to make it work any other way. One example is how Hibernate traditionally did not support mapping a single persistent entity to multiple tables, because the prevailing view was that this was a bad example of data modelling. In Hibernate 3.0, this has been rectified (although Gavin King says he put this feature in merely to keep the JDO camp quiet), and it’s a great, pragmatic addition to Hibernate’s functionality. There are many reasons why you may want to do something like this, particularly when mapping to legacy data. There are other features, such as better support for native SQL in Hibernate 3.0, that take Hibernate down from the ivory tower and firmly into the pragmatic real-world category. Hibernate is now not just for greenfield projects, but is flexible enough to be slotted in to almost any legacy environment.
  • Acegi Security. Writing a comprehensive security framework is difficult. Particularly if you want features like declarative security on the view tier, and comprehensive ACL-based access control functionality. It takes a lot of time and testing, and the consequences of getting it wrong can be serious. That’s why Acegi Security is a godsend. It is a comprehensive, well-tested framework, that provides granular ACL support at one end, and a host of features specifically for Web-based applications at the other. The reference documentation is of high quality, although what it lacks are a decent set of introductory follow-the-numbers type tutorials. If they can get NTLM support in for 1.0, it will be perfect.
  • Eclipse 3.1 was released earlier this year, with full JDK 5.0 support. It is an awesome development environment. But it is big. And can get very, very, slow. However, the Eclipse “family” of plugins is developing nicely, particularly the Web Tools project.
  • JSTL.
  • I know it’s not new, but it is excellent. Velocity is fantastic, but why do we need it for Web-based apps any more?

    I have to admit feeling a little left out of the whole Ruby-On-Rails/Python vs. Java debate. I downloaded Ruby and wandered through some of the language feature tutorials, but due to time constraints, I didn’t get as far as U would have liked. I am a huge Perl fan, so parts of Ruby appeal to me immensely. The Ruby-based development environment that comes with the default install is still too flakey to be reliable, but I would like to revisit it again when I get the chance. I did also get the chance to play with Jython and found it to be interesting as well – it seems like it could have a lot of potential for test scripting, for instance. To me, however, a lot of the hype surrounding “Framework X vs. Java” is because Java just isn’t new and shiny enough any more – it’s too safe and “corporate”, and hence attracts criticism because it is seen to be stagnant and not evolving.