Approach
However our in-house framework is constantly thriving and its architecture goes through permanent refactoring, the key goals never change: to keep the different components as loosely coupled as possible and to avoid the vendor lock-in.
Our "unorthodox" methodology is based rather on agile approaches than rigid hyper-formalized ones. We divide and organize the work to incremetal steps and strive to deliver the highest value possible in each iteration.
They say, "use the right tool for the job". Mix and match them to get the job done.
Our lightweight J2EE open source stack is built on the top of the following technologies: Struts as MVC framework, JSP with various standard and home-grown taglibs plus Sitemesh decorators in the view-tier, and Hibernate or iBATIS Data Mapper for database persistence.
On the client-side, we primarily use thin-client architectures (e.g. pure web-based presentation enhanced with AJAX and additional JasperReports reports). If a complex design requires a more interactive and richer user interface, we implement Swing-based applets or applications, integrating advanced visualization packages like JFreeChart or JGraph.
The various components assembling the system are wired together through the Spring Framework inversion of control container.
Our projects and builds are managed by a powerful combination of Maven, Ant and XDoclet.
To ensure quality, we run automated unit-, regression and integration tests based on JUnit and related extensions like jWebUnit or StrutsTestCase, plus load tests based on JMeter.
Our number one goal when evaluating technologies is to find the right balance between maturity and features, in order to mitigate the technical risk, to maximize productivity and to avoid over-engineering.
However our in-house framework is constantly thriving and its architecture goes through permanent refactoring, the key goals never change: to keep the different components as loosely coupled as possible and to avoid the vendor lock-in.
Our "unorthodox" methodology is based rather on agile approaches than rigid hyper-formalized ones. We divide and organize the work to incremetal steps and strive to deliver the highest value possible in each iteration.