blob: e119c340ed12fae1a635c05deb64bb251799f653 [file] [log] [blame]
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.&nbsp;
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...