@John: yes, thanks to arquillian.xml...but i thought to openejb adapter
speaking of embedded adapter

*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 John D. Ament <[email protected]>

> @Romain
>
> TomEE embedded doesn't use Servlet 3 protocol even in embedded mode?
>  That's overrideable, right?
>
>
> On Wed, Apr 10, 2013 at 4:23 PM, Romain Manni-Bucau
> <[email protected]>wrote:
>
> > same for arquillian embedded adapter, tomee one is a real server adapter
> so
> > no hokk like it ;)
> >
> > @Asynchronous uses its own thread so yes that's pby the issue
> >
> > *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 John D. Ament <[email protected]>
> >
> > > Reinis,
> > >
> > > If you use Arquillian + TomEE your tests will work much better (e.g. no
> > > thread issues).  YOu can run TomEE embedded so it's not too much slower
> > > either.  DeltaSpike is only a CDI library so it shouldn't impact your
> > > testing (so you're loading the libs up in to your WEB-INF/lib?)
> > >
> > > John
> > >
> > >
> > > On Wed, Apr 10, 2013 at 3:45 PM, Reinis Vicups <[email protected]>
> wrote:
> > >
> > > > Thanks Mr. Ament for your input!
> > > >
> > > > Yes I think I will go with Arquillian, although Mr. Struberg is
> > > persisting
> > > > (no pun) me to go with DeltaSpike.
> > > >
> > > > The Prod. Env. is ofcourse TomEE+
> > > >
> > > > I think that fully built application will even run in prod. env. but
> I
> > > > really want to test my app before deploying. One good reason in this
> > > > particular scenario is the "swallowed" exception especially if it
> could
> > > be
> > > > caused not because it's test setup but because am using @Asynchronous
> > > e.g.
> > > >
> > > > Thank you guys for the instant feedback, now I have to do some
> serious
> > > > Arquillian-re-factoring in my app o/
> > > > Reinis
> > > >
> > > >
> > > > On 04/10/2013 09:32 PM, John D. Ament wrote:
> > > >
> > > >> I would hope those interested in Application Composer also look at
> > > >> Arquillian for their automated testing needs (BTW: is your
> production
> > > >> target ENV just OpenEJB + OWB?)
> > > >>
> > > >> I think part of your issue is your use of @asynchronous.
> > > >>
> > > >>
> > > >> On Wed, Apr 10, 2013 at 3:28 PM, Reinis Vicups <[email protected]>
> > > wrote:
> > > >>
> > > >>    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.
> > > >>>>
> > > >>>>  Ok but why then the same session scoped bean is able to read from
> > JPA
> > > >>> with
> > > >>> no issues two method calls before?
> > > >>>
> > > >>> As you may notice in stacktrace there's xyz.my.domain.User
> > > >>> (xyz.my.domain.User_$_****javassist_3.pcGetStateManager) This is
> the
> > > >>>
> > > >>> currently logged in user entity read from DB by JPA and passed up
> and
> > > >>> down
> > > >>> the stacktrace (injected or as param) in next to every method call.
> > > >>>
> > > >>> Reason why the HeavyProcessingControllerProdu****cer is session
> > scoped
> > > >>> is
> > > >>>
> > > >>> that it produces stuff for currently logged in session user whether
> > > @New
> > > >>> or
> > > >>> existing.
> > > >>>
> > > >>> I understand your argument that theres no HTTP Session and it is
> > > obvious,
> > > >>> I just thought (am still hoping) that the ApplicationComposer does
> > some
> > > >>> hard-core bootstrapping magic and weaves, javaasists or whatever
> dark
> > > >>> arts
> > > >>> are there required to allow me to junit-test all sorts of
> CDI/JSF/EJB
> > > >>> beans, no? :DDDD
> > > >>>
> > > >>> br
> > > >>> Reinis
> > > >>>
> > > >>>
> > > >>>
> > > >>> On 04/10/2013 09:14 PM, John D. Ament wrote:
> > > >>>
> > > >>>  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 <[email protected]>
> > > >>>> 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.
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > >
> >
>

Reply via email to