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