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>*
*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 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.