Preferred Software tools

XSD Compiler

I am a big fan of XSD compilers. XSD is the design language (for data models) that I prefer to use and an XSD compiler gets you off to a flying start when writing an application.

Persistence layer

Java has had a bumpy ride when it comes to persistence layers. JDBC works fine but involves a great deal of coding. I am not a fan of EJB1/2; I was astonished by the lack of a query language in EJB1 and the cost of implementing all the EJB interfaces was too high.

I was impressed by JDO and it is a pity that this never moved forward. However I like Hibernate; it makes persistence easy and has also influenced EJB significantly; EJB3 is very close to Hibernate in its approach.

Application layer

I have always been cautious about use of application servers. I am impressed by the Spring framework; it was the catalyst that made people look closely at the over complexity of java application servers.

Another way to glue together components which I have found very successful is to use a messaging environment; it has the huge bonus that you can eavesdrop on everything that a system is doing at runtime without affecting performance. These days you do not have spend lots of money on messaging systems; the Apache ActiveMQ messaging is a superb piece of software.

Presentation layer

For developing Web Ajax style "applications", I prefer to use GWT. I am not so keen on server side MVC frameworks but Spring MVC or JSF Facelets would get my vote.

For desktop GUI development, I like SWT. It is such a pity that Sun and IBM do not collaborate to unify AWT/Swing with SWT/JFace; I guess the underlying approaches are so different that this is not possible.

Though I am a java enthusiast, I think that Microsoft have stolen a march on Java with the introduction of XAML, Silverlight and Windows Presentation Framework.