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

Reply via email to