Monday, January 21, 2013

(Java) Development Stack 2013

Working in the new company focusing in the Java and Open Source framework made me to redefined my development stack. Here is the stack that I use per January 2013. It's not static (fixed), it may change in the future depending on the advancing technology.

Presentation Layer
Depending on the nature of the project (urgency). My default stack is to use JSF 2.1 with Primefaces components for rapid development. I also make use of Primefaces Extensions, especially for InputNumber. Yes, kinda shocking that Primefaces don't have InputNumber control. For templating, for sure Facelets is chosen. Don't mess anymore with JSP!
Sometimes I want something simple and flexible. For that purpose, I use Spring MVC with Angular.JS and Twitter Bootstrap.
Those two are mainstream frameworks, and represent component-based frameworks (JSF), and request-based frameworks (Spring MVC)
I also evaluating ZK. It has very interesting presentation, windows-like UI. It's the web UI frameworks used in Adempiere web UI. But for this moment, mastering JSF and Spring MVC has more value (for me) than adding extra effort to learning another (3rd) framework. Especially if my hand already full.

Business Layer
Mainly, I'm using Spring Framework to orchestrate transaction and integration with various data access layer, integration with presentation layer, messaging systems, even for security (Spring Security).
But, It's good to understand the standard, which is the 'pure' Java EE. I'm using Java EE 6 (with EJB 3.1) in several fun projects. The good thing is, JSF is the standard Java EE presentation layer. For security in Java EE, I'm evaluating Apache Shiro.

Data Access Layer
Hibernate is my choice (maybe I too attached with Hibernate's Criteria). I also use standard JPA (Eclipselink), but feel that JPA is too limited.
Although using iBatis.NET in my .NET projects, I never use iBatis (or MyBatis now) in Java. If there is a need for low level SQL, I'll use Spring JDBC.

Build
Currently using Maven 2.2.1, not Maven 3.x.x

Testing
Currently using TestNG for testing Spring application, and Arquillian for testing Java EE application (normally in embedded glassfish)
Currently evaluating and learning about Jacoco for code coverage, and Sonar(qube) for code quality. Both will be used as maven-plugin.

Application Server
I use Tomcat 7.0.26 for development and production. Yes, if you notice, it's specific version, it's the Tomcat versions bundled in Ubuntu 12.04 LTS. I also use Glassfish, especially for Java EE projects.

Database Server
For development and production, I use MySQL. Sometimes I use PostgreSQL (hey, we are mainly using Hibernate, changing database is not a problem), but the tools available for MySQL buy me over.
I'm using SQLyog Community Edition and Toad For MySQL (freeware) for development. If you are want it on Linux, simple; use wine

Source Control
Pretty much I'm using almost everything from SVN, Mercurial, and Git. It's also related to project hosting service we're used, either Github (Git), or Bitbucket (Git, Mercurial). Although Github more famous, Bitbucket allowed users to create unlimited private repository (it's pay service in Github).

Linux?
Yes, I'm using Linux. Currently using Ubuntu 12.04 LTS (Precise Pangolin).

What do you think compared to this?