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?