Every now and again I review my practice of developing web based software. Here is a summary of how I write my applications in the context of a multi-tier architecture.
The presentation layer
In essence I'm a big fan of RIA (Rich Internet Application) for situations where I'm interested in developing a web based application as distinct from a web site full of HTML pages. I feel that this is a distinction lost on many people and I also think that those same people struggle with combining HTML/CSS/JS to make a web application.
I'm quite keen on developing something with Sproutcore as in a way, it blows away HTML and CSS and gives you the widgets to build a fully fledged MVC style app that works within the browser; its very similar to developing a native desktop application. The same can be said for Google Web Toolkit (GWT) however I slightly favour Sproutcore as it embraces JavaScript (JS) as a language whereas GWT embraces Java that produces JS i.e. Sproutcore "feels" lighter. Perhaps I should get over that... what Google have developed in the form of Google Wave is impressive.
There are other JS MVC frameworks out there (JavascriptMVC and PureMVC for starters), but I'm not sure that they drop HTML/CSS as a dependency for the developer to consider. I suppose what I'm feeling is that HTML and CSS do not belong in a web based application. Given HTML's start in life as a mark up language for documents I'm comfortable in acknowledging that it does not have a place in my web application.
The biggest thing for me right now with regards to JS RIA is the lack of development tooling. I've been using the Jetbrains WebStorm IDE for a couple months and while I'm impressed on its Window's implementation, it doesn't feel like a native Mac OS X application. Given that Mac OS X is where I like to spend a lot of my time this unfortunately creates a problem for me.
In my ideal world I'd be using Apache Maven for building and deploying my JS RIA's. I've really come to appreciate Maven in the Java space and it is just waiting for someone (may be even me!) to extend it for JS development (I'm familiar with JS Maven Tools but I understand that this project hasn't had activity for a long time). The pressures of family life and my daily job curtails the development of developer tools.
I shall pursue the use of SproutCore for my next RIA. So far I've just used HTML/CSS/JS and jQuery having implemented MVC in the raw. However when it comes to developing a website with perhaps a few dynamic requirements, may be I'll stay with trusty old JSP/Struts that communicates with my logic layer. When it comes to mobile and desktop, I will continue to do as the Romans do and develop native applications that communicate with my logic layer.
The logic layer
I've used Apache Camel on several projects now and just love it. What I end up with is a Java based application that can be managed as a service typically deployed to some brand of Unix. I've been using VMware's Hyperic to monitor the applications and given JMX I get some very deep monitoring capabilities.
I just love the Spring IoC framework and associated toolkits; particularly Spring JPA DAOs and Spring Test.
My applications tend to consist to lots of components that can exist independently of each other, and each with minimal dependencies on other frameworks and toolkits. For example, my application services containing the important business logic tend to be written as Java beans and have no or very little dependence on external libraries.
I lean towards creating RESTful services and look to leverage Apache CXF in this regard. I'm not yet using a toolkit to scaffold some of my RESTful DAO functionality but will at some point. I'm also a big fan of JSON as a payload format but XML's schema definitions have an important place in my heart. JSON with schemas would be a killer and I've just got to get into this.
Messaging is key and Active/MQ has been a great performer. I'm really looking forward to v.5.4 and its support of HTML 5 web sockets. This will allow messaging to be utilised by the JS RIA and I find that prospect quite exciting.
Apache Maven plays a huge role in developing and deploying my logic layer applications.
The data layer
I've been very happy with Postgres as a database and look forward to its forthcoming redundancy features. I'm also curious about Big table style approaches and Document Oriented Databases. I'm not quite sure why SQL should continue to play an application development standpoint (reporting, data mining etc. yes, but perhaps not within the application itself). ORMs have pushed me to the "NoSQL" conclusion and I like not having to deal with queries as much.
Summary
Multi-tier works for me. RIA appears to be the way of the future for web applications as distinct from web documents/pages. If you've not seen Apache Camel check it out. Postgres is great but I'm curious about Document Oriented Databases.
Please share your thoughts.