The many flavors of Java
A while ago, I was asked to evaluate another Java application that was being used at my company.
It was a point-of-sale app, developed entirely "in-house" by one of our overseas affiliates.
I wondered what their MVC model would look like.
How different would their Java app be from the ones I have worked on?
I started my evaluation by learning all I could about the architecture and design of this application.
We were given a copy of the application's Java source code.
I spent a great deal of time examining every line of code within the app.
By the time I had finished my examination, I felt I had pretty good feel for
the application's project structure, deployment strategy, and development practices.
So how different was this application from the ones I have worked on?
Very, very different.
It made heavy use of dependency injection from the spring framework (using both xml and annotation based approaches).
There was very little use of ejb's and sql. Instead there was extensive use of JPA from the hibernate framework.
Instead of using a servlet/jsp approach for the user interface portion of their application,
Java server faces (jsf) and a widget-based approach was used.
The application required very few custom configurations on the application server.
The database data source configurations were performed entirely within the application.
Throughout the app, I saw constant use of traditional object-oriented features : polymorphism and inheritance.
The application itself was deployed as a single install.
The individual packages with the app were divided by technical function instead of business function.
The application was developed in such a consistent manner, it was either developed by a single individual or
a highly disciplined team.
The application is enjoying great success at our company.
Particularly in the overseas affiliate where it was developed.
In Java software development, there is no single "right way" to do things.
This application is certainly demonstrating that.
The key lesson for me, from this experience, is "Diversity".
We can be different about how we do things and we can be all successful at the same time.
Score another victory for Java.