Hi @all, so now I tracked down my problem with the Extended PersistenceContext. The reason for failure was the TransactionManagement. Anyhow I tried to work with different possibilities of Transactions, but did not find a solution yet. So maybe someone can point me to the right direction.
My scenario is as follows and pretty easy. I have one EntityManagerProvider using the injected EntityManager as described in http://www.nabble.com/Re%3A-Obtaining-an-EntityManager-instance-outside-an-EJB-p21701466.html. The I have another SessionBean, which should also be injected with an Extended EntityManager. The EntityManager is injected perfectly into my EntityManagerProvider, but when trying to use the second sessionBean with the extended EntityManager I run into various problems. As I read from the documentations, the Extended PersistenceContext works as follows: Any changes made to the entities are queued to the EntityManager. As soon as a new Transaction is started, the EntityManager joins this Transaction and commits changed to database. So therefor my first idea was, not to use a Transaction, because this should be done by the container - in this case openEJB. When I do so, it results in the following exception, when trying to obtain the delegate of the EntityManager: java.lang.IllegalStateException: InternalError: an entity manager should already be registered for this entended persistence unit at org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:91) at org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:61) at org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:92) at org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:41) at com.sepus.testUtil.commons.service.BaseApplicationServerProvider.getPersistenceProvider(BaseApplicationServerProvider.java:106) at company.commons.service.impl.PopulatorServiceImpl.<init>(PopulatorServiceImpl.java:47) at company.commons.environment.TestEnvironment.start(TestEnvironment.java:130) at company.commons.environment.TestBase.startEnvironment(TestBase.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:398) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:145) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:82) at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:167) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104) at org.testng.TestRunner.runWorkers(TestRunner.java:712) at org.testng.TestRunner.privateRun(TestRunner.java:582) at org.testng.TestRunner.run(TestRunner.java:477) at org.testng.SuiteRunner.runTest(SuiteRunner.java:324) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292) at org.testng.SuiteRunner.run(SuiteRunner.java:198) at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821) at org.testng.TestNG.runSuitesLocally(TestNG.java:788) at org.testng.TestNG.run(TestNG.java:708) at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74) at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92) at org.apache.maven.surefire.Surefire.run(Surefire.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) (By the way: there is probably a typo in the Exception-message) Second try was to use the javax.persistence.EntityTransaction of the EntityManager. But as soon as I try to obtain the EntityTransaction I get the following Exception: java.lang.IllegalStateException: A JTA Entity Manager can not use an entity transaction at org.apache.openejb.persistence.JtaEntityManager.getTransaction(JtaEntityManager.java:220) at com.sepus.testUtil.commons.environment.TestEnvironment.start(TestEnvironment.java:127) at com.sepus.testUtil.commons.environment.TestBase.startEnvironment(TestBase.java:29) at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74) at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92) at org.apache.maven.surefire.Surefire.run(Surefire.java:177) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) Third solution was to use the javax.Transaction.TransactionManager. Not even better: DEBUG - finished invoking method create with exception:javax.ejb.EJBException: nested exception is: org.apache.openejb.persistence.EntityManagerAlread yRegisteredException: Another entity manager is already registered for this persistence unit javax.ejb.EJBException: nested exception is: org.apache.openejb.persistence.EntityManagerAlreadyRegisteredException: Another entity manager is already registered for this persistence unit org.apache.openejb.persistence.EntityManagerAlreadyRegisteredException: Another entity manager is already registered for this persistence unit at org.apache.openejb.persistence.JtaEntityManagerRegistry$ExtendedRegistry.addEntityManagers(JtaEntityManagerRegistry.java:191) at org.apache.openejb.persistence.JtaEntityManagerRegistry$ExtendedRegistry.access$100(JtaEntityManagerRegistry.java:169) at org.apache.openejb.persistence.JtaEntityManagerRegistry.addEntityManagers(JtaEntityManagerRegistry.java:129) at org.apache.openejb.core.stateful.StatefulContainer.createEJBObject(StatefulContainer.java:288) at org.apache.openejb.core.stateful.StatefulContainer.invoke(StatefulContainer.java:263) at org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:270) at org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:161) at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:286) at $Proxy77.create(Unknown Source) at org.apache.openejb.core.ivm.naming.BusinessLocalReference.getObject(BusinessLocalReference.java:33) at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150) at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115) at javax.naming.InitialContext.lookup(InitialContext.java:351) at company.testUtil.commons.service.BaseApplicationServerProvider.lookup(BaseApplicationServerProvider.java:162) at company.testUtil.commons.service.BaseApplicationServerProvider.getService(BaseApplicationServerProvider.java:145) at company.testUtil.commons.service.BaseApplicationServerProvider.getService(BaseApplicationServerProvider.java:136) at company.testUtil.commons.environment.TestEnvironment.getService(TestEnvironment.java:332) at company..iis.test.core.populator.IISPopulator.getSvc(IISPopulator.java:39) at company..iis.test.core.populator.RegionPopulator.populate(RegionPopulator.java:27) at company.testUtil.commons.service.impl.PopulatorServiceImpl.doPopulate(PopulatorServiceImpl.java:176) at company.testUtil.commons.service.impl.PopulatorServiceImpl.recursivePopulation(PopulatorServiceImpl.java:121) at company.testUtil.commons.service.impl.PopulatorServiceImpl.populate(PopulatorServiceImpl.java:91) at company.testUtil.commons.environment.TestEnvironment.start(TestEnvironment.java:133) at company.testUtil.commons.environment.TestBase.startEnvironment(TestBase.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:398) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:145) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:82) at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:167) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104) at org.testng.TestRunner.runWorkers(TestRunner.java:712) at org.testng.TestRunner.privateRun(TestRunner.java:582) at org.testng.TestRunner.run(TestRunner.java:477) at org.testng.SuiteRunner.runTest(SuiteRunner.java:324) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292) at org.testng.SuiteRunner.run(SuiteRunner.java:198) at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821) at org.testng.TestNG.runSuitesLocally(TestNG.java:788) at org.testng.TestNG.run(TestNG.java:708) at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74) at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92) at org.apache.maven.surefire.Surefire.run(Surefire.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) And lastly, using the UserTransaction did not succeed, as no UserTransaction has been injected and therefor has a null-value. So now I am a bit confused, how to work with the Extended PersistenceContext using openEJB and Hibernate as EntityManager. Can anybody maybe tell me, what I am missing or what I have to do to make it work? Thanks Thomas
