@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