Title: EJB + JPA + JSF + JAX-RS # Business Case The example explains how a real-life business problem is solved using OpenEJB in a combination with other open-source frameworks and tools. The example covers the entire technical solution, including architecture, design, build automation, unit testing, implementation, and deployment. The product is hosted at [http://oss.rempl.com](http://oss.rempl.com) with its source code available at [http://svn.rempl.com/trunk/rempl/rempl-oss] . The purpose of the system is to collect UML meta information from open source products and make it visible for end-users in form of diagrams and texts. More information about the product and its documentation you can get at [http://www.rempl.com/rempl-oss/] . # Architecture and Design The following Java-stack technologies are used in the system: * OpenEJB as an implementation of EJB * OpenJPA, an implementation of JPA * Jersey, implementation of JAX-RS * Mojarra, implementation of Java Server Faces (JSF) There are three layers in the system (Presentation, Business, and Persistence) and a number of components in each of them: !http://www.rempl.com/rempl-oss/tikz/architecture-components.png! Presentation Layer includes JSF (Mojarra), JAX-RS (Jersey), and Java EE container (Tomcat). In other words, everything on top of "[Delegates](http://www.rempl.com/rempl-oss/apidocs/com/rempl/oss/delegates/package-summary.html) " in the diagram. Package [com.rempl.oss.delegates|http://www.rempl.com/rempl-oss/apidocs/com/rempl/oss/delegates/package-summary.html] with its classes realize [Business Delegate|http://java.sun.com/blueprints/corej2eepatterns/Patterns/BusinessDelegate.html] and [Service Locator|http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html] Java EE design patterns. _More about it later..._ Business Layer includes EJB (OpenEJB), [Brokers](http://www.rempl.com/rempl-oss/apidocs/com/rempl/oss/brokers/package-summary.html) (Stateless Session Beans), and JPA entities. Persistence Layer includes JPA (OpenJPA), JDBC (MySQL JDBC Driver) and the MySQL server. # Build Automation and Tests Build automation is managed by [Maven 3](http://maven.apache.org/ref/3.0/) , see our [pom.xml|http://trac.fazend.com/rempl/browser/rempl/trunk/rempl/rempl-oss/pom.xml] . There are four levels of testing in the product: 1. Static analysis 1. Out-of-container unit testing 1. In-container functional testing 1. On-location testing During static analysis we are using [Checkstyle](http://maven.apache.org/plugins/maven-checkstyle-plugin/) , [PMD|http://maven.apache.org/plugins/maven-pmd-plugin/] , [FindBugs|http://mojo.codehaus.org/findbugs-maven-plugin/] , [Cobertura|http://mojo.codehaus.org/cobertura-maven-plugin/] , [maven-dependency-plugin|http://maven.apache.org/plugins/maven-dependency-plugin/analyze-only-mojo.html] , [xml-maven-plugin|http://mojo.codehaus.org/xml-maven-plugin/] . Important to note that all these tools are used as gate condition checkers, not as post-factum analyzers.  Out-of-container tests are automated with JUnit. Good example of a Stateless Session Bean out-of-container testing: [UserMgrBeanTest.java](http://trac.fazend.com/rempl/browser/rempl/trunk/rempl/rempl-oss/src/test/java/com/rempl/oss/brokers/UserMgrBeanTest.java) . In-containter functional testing is automated with JSFUnit and embedded Tomcat container. _more later..._ _On-location testing is not yet automated... working on it..._ # Configuration and Plumbing TBD... # Implementation TBD...