Thanks Gerhard! Will do. Have a nice evening :) Ove
Sent from my iPhone > On 7. mars 2014, at 21:46, Gerhard Petracek <[email protected]> > wrote: > > hi ove, > > please provide a link to a demo-app which illustrates the issue. > > regards, > gerhard > > http://www.irian.at > > Your JSF/JavaEE powerhouse - > JavaEE Consulting, Development and > Courses in English and German > > Professional Support for Apache MyFaces > > > > 2014-03-07 21:27 GMT+01:00 Ove Ranheim <[email protected]>: > >> public class TestBean { >> >> @Inject >> @PartsRepository >> private EntityManager em; >> >> @Transactional >> public void transaction(TestEntity entity) { >> em.persist(entity); >> } >> } >> >> and in test-case: >> >> @Inject >> private TestBean testBean; >> >> @Test >> public void testMe() throws Exception { >> testBean.transaction(m); // <== exception message below >> } >> >> stacktrace: >> >> java.lang.NullPointerException: null >> at >> org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:44) >> at >> org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:53) >> at org.jboss.weld.util.Beans.injectEEFields(Beans.java:331) >> at >> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:59) >> at >> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66) >> at >> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) >> at >> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64) >> at >> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90) >> at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150) >> at >> org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69) >> at >> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733) >> at >> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:789) >> at >> org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92) >> at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:358) >> at >> org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:369) >> at >> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:72) >> at >> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:60) >> at >> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66) >> at >> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) >> at >> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64) >> at >> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90) >> at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150) >> at >> org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69) >> at >> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733) >> at >> org.jboss.weld.bean.interceptor.CdiInterceptorFactory.create(CdiInterceptorFactory.java:45) >> at >> org.jboss.weld.interceptor.proxy.InterceptionContext.initInterceptorInstanceMap(InterceptionContext.java:93) >> at >> org.jboss.weld.interceptor.proxy.InterceptionContext.of(InterceptionContext.java:68) >> at >> org.jboss.weld.interceptor.proxy.InterceptionContext.forNonConstructorInterception(InterceptionContext.java:63) >> at >> org.jboss.weld.injection.producer.InterceptorApplyingInstantiator.newInstance(InterceptorApplyingInstantiator.java:53) >> at >> org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:85) >> at >> org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:183) >> at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:149) >> at >> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) >> at >> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98) >> at >> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) >> at >> com.parts.persistence.test.repository.TestBean$Proxy$_$$_WeldClientProxy.transaction(Unknown >> Source) >> at >> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:141) >> >> >> This stacktrace doesn't provide me much lead to what's wrong. Is there a >> way to unwrap what's going on behind the scene: >> >> at >> com.parts.persistence.test.repository.TestBean$Proxy$_$$_WeldClientProxy.transaction(Unknown >> Source) >> at >> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:141) >> >> >> Cheers, >> Ove >> >> On 07 Mar 2014, at 20:11, Gerhard Petracek <[email protected]> >> wrote: >> >>> you can use a separated class and annotate it (or its methods) with >>> @Transactional -> inject it in your test and delegate to it. >>> >>> regards, >>> gerhard >>> >>> http://www.irian.at >>> >>> Your JSF/JavaEE powerhouse - >>> JavaEE Consulting, Development and >>> Courses in English and German >>> >>> Professional Support for Apache MyFaces >>> >>> >>> >>> 2014-03-07 19:56 GMT+01:00 Ove Ranheim <[email protected]>: >>> >>>> Hi Gerhard, >>>> >>>> Thanks for your prompt response. >>>> >>>> I use shrinkwrap desc: >> .getOrCreateInterceptors().clazz(TransactionalInterceptor.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorMandatory.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorNever.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorNotSupported.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequiresNew.class.getName()) >> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorSupports.class.getName()).up() >> .getOrCreateAlternatives().clazz(BeanManagedUserTransactionStrategy.class.getName()).up() >>>> >>>> According to #2: anything missing? >>>> >>>> Roger #1. If I use RequestScoped instead, I get this error: >>>> >>>> testMe(com.parts.persistence.test.repository.PartsRepositoryTest) Time >>>> elapsed: 0.071 sec <<< ERROR! >>>> java.lang.NullPointerException: null >>>> at >> org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:44) >>>> at >> org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:53) >>>> at org.jboss.weld.util.Beans.injectEEFields(Beans.java:331) >>>> at >> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:59) >>>> at >> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66) >>>> at >> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) >>>> at >> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64) >>>> at >> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90) >>>> at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150) >>>> at >>>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) >>>> at >> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733) >>>> at >> org.jboss.weld.injection.producer.AbstractMemberProducer.getReceiver(AbstractMemberProducer.java:128) >>>> at >> org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:148) >>>> at >> org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:183) >>>> at >>>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) >>>> at >> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98) >>>> at >> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99) >>>> at >> org.jboss.weld.proxies.EntityManager$893098196$Proxy$_$$_WeldClientProxy.persist(Unknown >>>> Source) >>>> at >> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:137) >>>> >>>> Appreciate you help! >>>> >>>> Cheers, >>>> ove >>>> >>>> On 07 Mar 2014, at 19:47, Gerhard Petracek <[email protected]> >>>> wrote: >>>> >>>>> hi ove, >>>>> >>>>> #1 currently only std. scopes are supported by ContextControl. >>>>> #2 it will work once TransactionalInterceptor gets called >>>>> >>>>> regards, >>>>> gerhard >>>>> >>>>> http://www.irian.at >>>>> >>>>> Your JSF/JavaEE powerhouse - >>>>> JavaEE Consulting, Development and >>>>> Courses in English and German >>>>> >>>>> Professional Support for Apache MyFaces >>>>> >>>>> >>>>> >>>>> 2014-03-07 19:12 GMT+01:00 Ove Ranheim <[email protected]>: >>>>> >>>>>> Hi, >>>>>> >>>>>> I'm not able to start the TransactionScoped in due time. I'm doing an >>>>>> experiment on using ds-jpa together with JTA-and-Hibernate ( >>>>>> https://github.com/jbosstm/quickstart/tree/master/jta-and-hibernate). >>>>>> >>>>>> The persistence.xml uses JTA and binds to a JdbcDataSource bound to >>>> JNDI. >>>>>> If I use the TransactionManager directly, it all works. However, when >> I >>>> use >>>>>> the BeanManagedUserTransactionStrategy it fails. I'd like to make use >> of >>>>>> the @Transactional and @TransactionScope. >>>>>> >>>>>> Here are some code snippets. >>>>>> >>>>>> public static void bindNamingAndTransactionService() throws >>>> Exception { >>>>>> if(txInitialized) return; >>>>>> // Start JNDI server >>>>>> NAMING_BEAN.start(); >>>>>> >>>>>> // Bind JTA implementation with default names >>>>>> JNDIManager.bindJTAImplementation(); >>>>>> >>>>>> // Bind JTA implementation with JBoss names. Needed for JTA 1.2 >>>>>> implementation. >>>>>> // See https://issues.jboss.org/browse/JBTM-2054 >>>>>> // resolve naming parse container for comp and bind >>>>>> NAMING_BEAN.getNamingInstance().createSubcontext(new >>>>>> NamingParser().parse("jboss")); >> jtaPropertyManager.getJTAEnvironmentBean().setTransactionManagerJNDIContext("java:/jboss/TransactionManager"); >>>>>> jtaPropertyManager.getJTAEnvironmentBean() >> .setTransactionSynchronizationRegistryJNDIContext("java:/jboss/TransactionSynchronizationRegistry"); >>>>>> JNDIManager.bindJTAImplementation(); >>>>>> >>>>>> JdbcDataSource dataSource = new JdbcDataSource(); >>>>>> dataSource.setURL("jdbc:h2:~/partsdb;MVCC=TRUE"); >>>>>> dataSource.setUser("sa"); >>>>>> dataSource.setPassword(""); >>>>>> >>>>>> InitialContext context = new InitialContext(); >>>>>> context.bind("java:/jboss/primaryDS", dataSource); >>>>>> txInitialized = true; >>>>>> } >>>>>> >>>>>> EntityManagerProducer: >>>>>> >>>>>> @Produces >>>>>> @PartsRepository >>>>>> @TransactionScoped >>>>>> protected EntityManager createEntityManager() { >>>>>> return entityManagerFactory.createEntityManager(); >>>>>> } >>>>>> >>>>>> @Produces >>>>>> public EntityManagerFactory entityManagerFactory() { >>>>>> if (entityManagerFactory == null) { >>>>>> try { >>>>>> if (!txInitialized) bindNamingAndTransactionService(); >>>>>> } catch (Exception e) { >>>>>> throw new RuntimeException(e); >>>>>> } >>>>>> return Persistence.createEntityManagerFactory("primary"); >>>>>> } >>>>>> throw new UnsupportedOperationException(); >>>>>> }; >>>>>> >>>>>> Arquillian Weld-Embedded-1.1 test: >>>>>> >>>>>> @BeforeClass >>>>>> public static void beforeClazz() throws Exception { >> BeanProvider.getContextualReference(ContextControl.class).startContext(TransactionScoped.class); >>>>>> } >>>>>> >>>>>> @Test >>>>>> @Transactional >>>>>> public void testMe() throws Exception { >>>>>> // do something with TransactionScoped EntityManager >>>>>> } >>>>>> >>>>>> If I move startContext to @Before method, the same error occurs. >>>>>> >>>>>> >>>>>> Exception: >>>>>> >>>>>> testMe(com.parts.persistence.test.repository.PartsRepositoryTest) >> Time >>>>>> elapsed: 0.063 sec <<< ERROR! >>>>>> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No >> active >>>>>> contexts for scope type >>>>>> org.apache.deltaspike.jpa.api.transaction.TransactionScoped >>>>>> at >> org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680) >>>>>> at >> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79) >>>>>> at >> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99) >>>>>> at >> org.jboss.weld.proxies.EntityManager$893098196$Proxy$_$$_WeldClientProxy.persist(Unknown >>>>>> Source) >>>>>> at >> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:130) >>>>>> >>>>>> ideas? >>>>>> >>>>>> Cheers, >>>>>> Ove >> >>
