| Title: TestCase with TestBean inner-class |
| The use of an inner-class annotated as an EJB can get you all the resources |
| you may need to run your test case such as a UserTransaction, |
| EntityManager, JMS Topic or Queue, DataSource, references to other EJBs, |
| etc. |
| |
| Simply add a *META-INF/ejb-jar.xml* to your *test* *sources* and start |
| annotating your inner class as needed. |
| |
| The test logic can be placed inside the inner-class EJB or you can setup |
| the EJB to pass the required resources to the outer class. |
| |
| |
| import junit.framework.TestCase; |
| |
| import javax.ejb.Stateless; |
| import javax.ejb.TransactionManagement; |
| import static javax.ejb.TransactionManagementType.BEAN; |
| import javax.annotation.Resource; |
| import javax.transaction.UserTransaction; |
| import javax.persistence.PersistenceContext; |
| import javax.persistence.PersistenceContextType; |
| import javax.persistence.EntityManager; |
| import javax.naming.Context; |
| import javax.naming.InitialContext; |
| import java.util.Properties; |
| |
| public class MyTest extends TestCase { |
| |
| private EntityManager entityManager; |
| private UserTransaction userTransaction; |
| |
| @Override |
| protected void setUp() throws Exception { |
| Properties p = new Properties(); |
| p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); |
| // set any other properties |
| |
| InitialContext initialContext = new InitialContext(p); |
| TestLocal testLocal = (TestLocal) initialContext.lookup("TestBeanLocal"); |
| |
| entityManager = testLocal.getEntityManager(); |
| userTransaction = testLocal.getUserTransaction(); |
| } |
| |
| |
| /** |
| * The src/test/resource/META-INF/ejb-jar.xml will cause this |
| * EJB to be automatically discovered and deployed when |
| * OpenEJB boots up. |
| */ |
| @Stateless |
| @TransactionManagement(BEAN) |
| public static class TestBean implements TestLocal { |
| |
| @Resource |
| private UserTransaction userTransaction; |
| |
| @PersistenceContext(type = PersistenceContextType.EXTENDED) |
| private EntityManager entityManager; |
| |
| public UserTransaction getUserTransaction() { |
| return userTransaction; |
| } |
| |
| public EntityManager getEntityManager() { |
| return entityManager; |
| } |
| } |
| |
| public static interface TestLocal { |
| EntityManager getEntityManager(); |
| UserTransaction getUserTransaction(); |
| } |
| |
| } |
| |
| |