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