I am attempting to use an embedded OpenEJB container (Apache OpenEJB 3.1.1
build: 20090530-06:18) from inside my JUnit test invoked via the
maven-surefire-plugin. I initialise the container in the setUp method (JUnit
3.8) and it appears to populate correctly by finding all the relevant EJB
jars in the classpath as for example I get the following outputs in the
output log (the other EJBs also show as being loaded successfully in a
similar way):
Assembling app: C:\wsad\was5\player-ejb\target\classes
INFO (startup:70) - PersistenceUnit(name=esd-jpa,
provider=org.apache.openjpa.persistence.PersistenceProviderImpl)
INFO (options:70) - Using
'openejb.jndiname.format=ejblocal:{interfaceClass}'
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.AccountHistoryHome)
--> Ejb(deployment-id=AccountHistoryHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.AcmeAccountHome)
--> Ejb(deployment-id=AcmeAccountHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.AcmeTransferHome)
--> Ejb(deployment-id=AcmeTransferHomeBean)
INFO (startup:70) -
Jndi(name=ejblocal:acme.account.ejb.InsertRetailLogicRef) -->
Ejb(deployment-id=InsertRetailLogicRefBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.PaymentCardHome)
--> Ejb(deployment-id=PaymentCardHomeBean)
INFO (startup:70) -
Jndi(name=ejblocal:acme.account.ejb.RetailLogicReconciliation) -->
Ejb(deployment-id=RetailLogicReconciliationBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.TokenHome) -->
Ejb(deployment-id=TokenHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.account.ejb.WalletItemHome) -->
Ejb(deployment-id=WalletItemHomeBean)
INFO (startup:70) -
Jndi(name=ejblocal:acme.game.draw.reconciliation.Reconciliation) -->
Ejb(deployment-id=ReconciliationBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.game.ejb.GamePlaySL) -->
Ejb(deployment-id=GamePlaySLEJB)
INFO (startup:70) - Jndi(name=ejblocal:acme.subs.ejb.SubscriptionDrawHome)
--> Ejb(deployment-id=SubscriptionDrawHomeBean)
INFO (startup:70) -
Jndi(name=ejblocal:acme.subs.ejb.SubscriptionSecuritySL) -->
Ejb(deployment-id=SubscriptionSecuritySLEJB)
INFO (startup:70) -
Jndi(name=ejblocal:acme.system.ejb.AcmeEJBCommandServer) -->
Ejb(deployment-id=AcmeEJBCommandServerBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.system.ejb.AcmeLog) -->
Ejb(deployment-id=AcmeLogBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.AddressHome) -->
Ejb(deployment-id=AddressHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.AcmeProfileLocalHome)
--> Ejb(deployment-id=AcmeProfileLocalHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.AcmeUserLocalHome) -->
Ejb(deployment-id=AcmeUserLocalHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.LightWeightLoginSL)
--> Ejb(deployment-id=LightWeightLoginSLEJB)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.LoadWalletSL) -->
Ejb(deployment-id=LoadWalletSLEJB)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.SavedBoardLocalHome)
--> Ejb(deployment-id=SavedBoardLocalHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:acme.user.ejb.SecurityHome) -->
Ejb(deployment-id=SecurityHomeBean)
INFO (startup:70) - Jndi(name=ejblocal:com.gtech.commerce.UidBlockPool) -->
Ejb(deployment-id=UidBlockPoolBean)
INFO (startup:70) - Created
Ejb(deployment-id=RetailLogicReconciliationBean,
ejb-name=RetailLogicReconciliationBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AccountHistoryHomeBean,
ejb-name=AccountHistoryHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=InsertRetailLogicRefBean,
ejb-name=InsertRetailLogicRefBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeUserLocalHomeBean,
ejb-name=AcmeUserLocalHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeAccountHomeBean,
ejb-name=AcmeAccountHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=SecurityHomeBean,
ejb-name=SecurityHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=LoadWalletSLEJB,
ejb-name=LoadWalletSLEJB, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=PaymentCardHomeBean,
ejb-name=PaymentCardHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeLogBean,
ejb-name=AcmeLogBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=LightWeightLoginSLEJB,
ejb-name=LightWeightLoginSLEJB, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeEJBCommandServerBean,
ejb-name=AcmeEJBCommandServerBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeTransferHomeBean,
ejb-name=AcmeTransferHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AddressHomeBean,
ejb-name=AddressHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=SubscriptionSecuritySLEJB,
ejb-name=SubscriptionSecuritySLEJB, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=ReconciliationBean,
ejb-name=ReconciliationBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=SavedBoardLocalHomeBean,
ejb-name=SavedBoardLocalHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=GamePlaySLEJB,
ejb-name=GamePlaySLEJB, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=WalletItemHomeBean,
ejb-name=WalletItemHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=TokenHomeBean,
ejb-name=TokenHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=AcmeProfileLocalHomeBean,
ejb-name=AcmeProfileLocalHomeBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=UidBlockPoolBean,
ejb-name=UidBlockPoolBean, container=My Stateless Container)
INFO (startup:70) - Created Ejb(deployment-id=SubscriptionDrawHomeBean,
ejb-name=SubscriptionDrawHomeBean, container=My Stateless Container)
INFO (startup:70) - Deployed
Application(path=C:\wsad\was5\player-ejb\target\classes)
The following OpenEJB properties are defined as System Properties in the
maven-surefire-plugin:
<property>
<name>openejb.deployments.classpath.include</name>
<value>.*(commerce-ejb|command-ejb|player-ejb).*</value>
</property>
<property>
<name>openejb.deployments.classpath.ear</name>
<value>false</value>
</property>
<property>
<name>openejb.jndiname.format</name>
<value>ejblocal:{interfaceClass}</value>
</property>
<property>
<name>java.naming.factory.initial</name>
<value>org.apache.openejb.client.LocalInitialContextFactory</value>
</property>
<property>
<name>java.naming.factory.url.pkgs</name>
<value>org.apache.openejb.core.ivm.naming</value>
</property>
However I find that I get a stack overflow error at the point I attempt to
perform a lookup of the first EJB encountered from my ServiceLocator class:
java.lang.StackOverflowError
at
com.sun.naming.internal.VersionHelper12$6.run(VersionHelper12.java:165)
at java.security.AccessController.doPrivileged(Native Method)
at
com.sun.naming.internal.VersionHelper12.getContextClassLoader(VersionHelper12.java:162)
at
com.sun.naming.internal.ResourceManager.getFactory(ResourceManager.java:339)
at
javax.naming.spi.NamingManager.getURLObject(NamingManager.java:575)
at
javax.naming.spi.NamingManager.getURLContext(NamingManager.java:533)
at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:320)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:133)
at
org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:133)
at
org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:133)
at
org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
....(repeated hundreds of times)
I have been pulling my hair out why this is not working and have
experimented by modifying/adding/removing the system properties but to no
avail. Any suggestions appreciated!