request and session scopes are active for a single thread (the test one) in
unit test

*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*



2013/4/10 Reinis Vicups <[email protected]>

> Hi,
>
> these are TEH relevant jars I think:
>
> cditest-*-1.1.7.jar
> myfaces-extcdi-*-1.0.5.jar
> mysql-connector-java-5.1.24.**jar
> openejb-javaagent-4.5.2.jar
> openejb-*-4.6.0-SNAPSHOT.jar
> openwebbeans-spi-1.1.7.jar
> openwebbeans-impl-1.1.7.jar
> javaee-api-6.0-5.jar
> openwebbeans-ejb-1.1.8.jar
> openwebbeans-ee-*-1.1.8.jar
> openjpa-2.2.0.jar
>
> br
> Reinis
>
>
> On 04/10/2013 09:05 PM, Romain Manni-Bucau wrote:
>
>> Hi,
>>
>> which version? did you try the snapshot?
>>
>>
>> *Romain Manni-Bucau*
>> *Twitter: @rmannibucau 
>> <https://twitter.com/**rmannibucau<https://twitter.com/rmannibucau>
>> >*
>> *Blog: 
>> **http://rmannibucau.**wordpress.com/*<http://rmannibucau.wordpress.com/*>
>> <http://**rmannibucau.wordpress.com/ <http://rmannibucau.wordpress.com/>>
>> *LinkedIn: 
>> **http://fr.linkedin.com/in/**rmannibucau*<http://fr.linkedin.com/in/rmannibucau*>
>> *Github: https://github.com/**rmannibucau*<https://github.com/rmannibucau*>
>>
>>
>>
>> 2013/4/10 Reinis Vicups <[email protected]>
>>
>>  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.
>>>
>>>
>

Reply via email to