| Title: EJB + JPA + JSF + JAX-RS |
| <a name="EJB+JPA+JSF+JAX-RS-BusinessCase"></a> |
| # 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/] |
| . |
| |
| <a name="EJB+JPA+JSF+JAX-RS-ArchitectureandDesign"></a> |
| # 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. |
| |
| <a name="EJB+JPA+JSF+JAX-RS-BuildAutomationandTests"></a> |
| # 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..._ |
| |
| <a name="EJB+JPA+JSF+JAX-RS-ConfigurationandPlumbing"></a> |
| # Configuration and Plumbing |
| |
| TBD... |
| |
| <a name="EJB+JPA+JSF+JAX-RS-Implementation"></a> |
| # Implementation |
| |
| TBD... |