What you're seeing is correct (though I'm not a good one to ask why it's only at the trace level that you see this exception).
I guess, why is HeavyProcessingControllerProdu**cer session scoped? There is no HTTP Session when this unit test runs, so no it won't be active at that time. On Wed, Apr 10, 2013 at 3:00 PM, Reinis Vicups <to...@orbit-x.de> wrote: > Hi guys, > > got following scenario > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** > >>>>>>>>>>>>>>>> > > @org.junit.runner.RunWith(org.**apache.openejb.junit.** > ApplicationComposer) > public class IamIntegrationTest{ > > // ACHTUNG! > @javax.enterprise.inject.**Produces @javax.enterprise.inject.New > HeavyProcessingController heavyProcessingController; > > @org.apache.openejb.testing.**Module > public PersistenceUnit somePersistenceConfigHere() { > // boring code > } > > @org.apache.openejb.testing.**Configuration > public Properties settingUpSomeRessourceConfig() { > // boring code > } > > @Test > public void iAmHeavyIntegrationTestMethod(**) { > heavyProcessingController.**readALittleBitFromJPA(); > heavyProcessingController.**initiateSomeHeavyProcessing(); > } > } // end test class > > > @javax.enterprise.context.**SessionScoped > public class HeavyProcessingControllerProdu**cer { > > @Inject > JPAService jpaService; > > @Produces @RequestScoped > public List<SomeEntity> readALittleBitFromJPA() { > jpaService.getEntityList(); > } > > @javax.enterprise.inject.**Produces @javax.enterprise.inject.New > public HeavyProcessingControllerprodu**ceHeavyProcessingController() { > > // ACHTUNG, invoking here JPA and it works! > readALittleBitFromJPA(); > > // ACHTUNG, doing this because of some complex initialization > logic required aforehand. > return org.apache.myfaces.extensions.**cdi.core.impl.util.CodiUtils.** > getContextualReferenceByClass(**HeavyProcessingController.**class); > } > } // end Producer class > > > // ACHTUNG, this is stateful EJB Bean with no other explicit context > annotations! > @javax.ejb.Stateful > public class HeavyProcessingController implements Serializable { > > @Inject > AsyncHeavyProcessingWorker asyncWorker; > > public void initiateSomeHeavyProcessing() { > // ACHTUNG! @Asynchronous method is invoked here > asyncWorker.**asyncDoHeavyProcessingAndSaveY** > ourWorkIntoPersistence(); > } > } > > > // ACHTUNG, this is stateful EJB Bean with no other explicit context > annotations! > @javax.ejb.Stateful > public class AsyncHeavyProcessingWorkerimpl**ements Serializable { > > @Inject > JPAService jpaService; > > @Asynchronous > public void asyncDoHeavyProcessingAndSaveY**ourWorkIntoPersistence(){ > // ACHTUNG! > jpaService.persist(**allThatHardWork); > } > } > > @javax.ejb.Stateless > public class JPAService { > > @PersistenceContext > EntityManager em; > > // ACHTUNG, no explicit TransacactionAttribute, using defaults! > public void persist(SomeJPAEntity allThatHardWork) { > em.persist(allThatHardWork); > } <- ACHTUNG, exceptionsomewhere here! > } > > <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<** > <<<<<<<<<<<<<<<<<<<<<<<< > > Executing this code causes following exception: > > > 3389 default TRACE [@Asynchronous IntegrationTest - 1] openjpa.Runtime > - org.apache.openjpa.**persistence.**EntityManagerFactoryImpl@**51d62781 > created EntityManager org.apache.openjpa.**persistence.EntityManagerImpl@* > *5ead44a4. > 123394 default TRACE [@Asynchronous IntegrationTest - 1] > openjpa.Runtime - An exception occurred while ending the transaction. This > exception will be re-thrown. > javax.enterprise.context.**ContextNotActiveException: WebBeans context > with scope type annotation @SessionScoped does not exist within current > thread > at org.apache.webbeans.container.**BeanManagerImpl.getContext(** > BeanManagerImpl.java:351) > at org.apache.webbeans.intercept.**NormalScopedBeanInterceptorHan** > dler.getContextualInstance(**NormalScopedBeanInterceptorHan** > dler.java:143) > at org.apache.webbeans.intercept.**NormalScopedBeanInterceptorHan** > dler.invoke(**NormalScopedBeanInterceptorHan**dler.java:114) > at org.apache.webbeans.intercept.**NormalScopedBeanInterceptorHan** > dler.invoke(**NormalScopedBeanInterceptorHan**dler.java:108) > *_at xyz.my.domain.User_$$_**javassist_3.pcGetStateManager(** > User_$$_javassist_3.java)_* > at org.apache.openjpa.kernel.**BrokerImpl.isDetached(** > BrokerImpl.java:4580) > at org.apache.openjpa.kernel.**SingleFieldManager.preFlushPC(** > SingleFieldManager.java:775) > at org.apache.openjpa.kernel.**SingleFieldManager.preFlush(** > SingleFieldManager.java:621) > at org.apache.openjpa.kernel.**SingleFieldManager.preFlush(** > SingleFieldManager.java:589) > at org.apache.openjpa.kernel.**SingleFieldManager.preFlush(** > SingleFieldManager.java:505) > at org.apache.openjpa.kernel.**StateManagerImpl.preFlush(** > StateManagerImpl.java:2982) > at org.apache.openjpa.kernel.**PNewState.beforeFlush(** > PNewState.java:40) > at org.apache.openjpa.kernel.**StateManagerImpl.beforeFlush(** > StateManagerImpl.java:1054) > at org.apache.openjpa.kernel.**BrokerImpl.flush(BrokerImpl.** > java:2112) > at org.apache.openjpa.kernel.**BrokerImpl.flushSafe(** > BrokerImpl.java:2072) > at org.apache.openjpa.kernel.**BrokerImpl.beforeCompletion(** > BrokerImpl.java:1990) > at org.apache.geronimo.**transaction.manager.**TransactionImpl.** > beforeCompletion(**TransactionImpl.java:527) > at org.apache.geronimo.**transaction.manager.**TransactionImpl.** > beforeCompletion(**TransactionImpl.java:512) > at org.apache.geronimo.**transaction.manager.** > TransactionImpl.beforePrepare(**TransactionImpl.java:413) > at org.apache.geronimo.**transaction.manager.**TransactionImpl.commit( > **TransactionImpl.java:262) > at org.apache.geronimo.**transaction.manager.** > TransactionManagerImpl.commit(**TransactionManagerImpl.java:**252) > at org.apache.openejb.core.**transaction.**JtaTransactionPolicy.** > completeTransaction(**JtaTransactionPolicy.java:328) > at org.apache.openejb.core.**transaction.TxRequired.commit(** > TxRequired.java:75) > at org.apache.openejb.core.**transaction.**EjbTransactionUtil.** > afterInvoke(**EjbTransactionUtil.java:76) > at org.apache.openejb.core.**stateful.StatefulContainer.** > afterInvoke(StatefulContainer.**java:843) > at org.apache.openejb.core.**stateful.StatefulContainer.** > businessMethod(**StatefulContainer.java:667) > at org.apache.openejb.core.**stateful.StatefulContainer.** > invoke(StatefulContainer.java:**364) > at org.apache.openejb.core.ivm.**EjbObjectProxyHandler.** > synchronizedBusinessMethod(**EjbObjectProxyHandler.java:**256) > at org.apache.openejb.core.ivm.**EjbObjectProxyHandler$1.call(** > EjbObjectProxyHandler.java:**244) > at org.apache.openejb.async.**AsynchronousPool$** > AsynchronousCall.call(**AsynchronousPool.java:110) > at java.util.concurrent.**FutureTask$Sync.innerRun(** > FutureTask.java:334) > at java.util.concurrent.**FutureTask.run(FutureTask.**java:166) > at java.util.concurrent.**ThreadPoolExecutor.runWorker(** > ThreadPoolExecutor.java:1110) > at java.util.concurrent.**ThreadPoolExecutor$Worker.run(** > ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.**java:722) > WARNING - Could NOT lazily initialize session context because NO active > request context > 123395 default TRACE [@Asynchronous IntegrationTest - 1] > openjpa.Runtime - > org.apache.openjpa.**persistence.EntityManagerImpl@**5ead44a4.close() > invoked. > > I have following questions: > > 1.Why is that this exception is logged ONLY when setting openjpa.log to > Runtime=TRACE? In other cases it's "swallowed" (as in there's no exception > thrown in jpaService.persist(**allThatHardWork);) > > 2. Why is this exception? I already access JPA from @SessionScoped bean in > HeavyProcessingControllerProdu**cer.**produceHeavyProcessingControll**er() > when I readALittleBitFromJPA() and it reads from Database just fine. > > 3. If you care to comment on the design of those classes, I would love to > here if it's ok or not > > Thanks guys for reading this lengthy e-mail and even more thanks if you > give your thought on this > Reinis. >