You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Overview

Testing an EntityManager that uses the default PersistenceContextType.TRANSACTION can be challenging due to Entities detaching around transaction boundaries. Using a transaction in your unit test can make this impossible task possible.

This example shows use of @Resource to have an EntityManager with an TRANSACTION persistence context injected into a @Stateful bean using the @TransactionAttribute annotation and a TestCase that runs test code in a JTA Transaction. An EJB 3 @Entity bean is used with the EntityManager to create, persist and merge data to a database.

The source for this example is in the "testing-transactions" directory located in the openejb-examples.zip available on the download page.

The Code

Error formatting macro: snippet: java.lang.NullPointerException

Writing a unit test for the example

Error formatting macro: snippet: java.lang.NullPointerException

Running

Running the example is fairly simple. In the "testing-transactions" directory of the examples zip, just run:

$ mvn clean install

Which should create output like the following.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.injection.tx.MoviesTest
Apache OpenEJB 3.0    build: 20080408-04:13
http://openejb.apache.org/
INFO - openejb.home = /Users/dblevins/work/openejb-3.0/examples/testing-transactions
INFO - openejb.base = /Users/dblevins/work/openejb-3.0/examples/testing-transactions
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/test-classes
INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/classes
INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/test-classes
INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean TransactionBean: Container(type=STATELESS, id=Default Stateless Container)
INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/test-classes
INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/classes
INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)
INFO - Configuring PersistenceUnit(name=movie-unit)
INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/classes
INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/test-classes
INFO - Jndi(name=TransactionBeanLocal) --> Ejb(deployment-id=TransactionBean)
INFO - Created Ejb(deployment-id=TransactionBean, ejb-name=TransactionBean, container=Default Stateless Container)
INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/test-classes)
INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/classes
INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl)
ERROR - JAVA AGENT NOT INSTALLED. The JPA Persistence Provider requested installation of a ClassFileTransformer which 
        requires a JavaAgent.  See http://openejb.apache.org/3.0/javaagent.html
INFO - Jndi(name=MoviesLocal) --> Ejb(deployment-id=Movies)
INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/testing-transactions/target/classes)
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.25 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
  • No labels