You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by Ove Ranheim <or...@gmail.com> on 2014/03/07 19:12:05 UTC

How can TransactionScoped be started with weld-embedded-1.1

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



Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Ove Ranheim <or...@gmail.com>.
Hi Gerhard,

Ivan Vasyliev already made a great example that demonstrate this issue (btw: https://issues.apache.org/jira/browse/DELTASPIKE-473).

Please have a look at: https://github.com/vasilievip/cdi-jpa-jta-generic-dao

To properly demonstrate DS behaviour, you must disable the Spring stuff, hence you need to:

pom.xml (comment out)

        <!--
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
        </dependency>
        -->

SprintDataProductDAO.java (comment out):

public interface SpringDataProductDAO
/* extends JpaRepository<Product, Long> */
{

}

ProductService.java (comment out)

//    @Inject
//    SpringDataProductDAO springProductDAO;

//    @Transactional
//    public List<Product> findAll() {
//        assert springProductDAO != null;
//        List<Product> products = new ArrayList<Product>();
//        Iterator<Product> productIterator = springProductDAO.findAll().iterator();
//        while (productIterator.hasNext()) {
//            products.add(productIterator.next());
//        }
//        return products;
//    }
//
//    @Transactional
//    public Long save(Product product) {
//        assert springProductDAO != null;
//        springProductDAO.save(product);
//        return product.getId();
//    }

Exception stracktrace:

Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.841 sec <<< FAILURE! - in com.javafiction.common.persistence.test.ProductServiceTest
testFindAll(com.javafiction.common.persistence.test.ProductServiceTest)  Time elapsed: 1.808 sec  <<< ERROR!
org.apache.deltaspike.data.api.QueryInvocationException: Failed calling Repository: [Repository=com.acme.persistence.DeltaspikeProductDAO,entity=com.acme.model.Product,method=save,exception=class java.lang.IllegalStateException,message=A JTA EntityManager cannot use getTransaction()
	at org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1368)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.javafiction.common.persistence.resources.JtaEntityManagerProxy.invoke(JtaEntityManagerProxy.java:45)
	at com.sun.proxy.$Proxy63.getTransaction(Unknown Source)
	at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.getTransaction(ResourceLocalTransactionStrategy.java:308)
	at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:274)
	at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:153)
	at org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeTransactional(TransactionalQueryRunner.java:72)
	at org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeQuery(TransactionalQueryRunner.java:54)
	at org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:80)
	at com.sun.proxy.$Proxy61.save(Unknown Source)
	at com.acme.services.ProductService.save2(ProductService.java:72) // <= this is the real issue
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:110)
	at org.apache.webbeans.intercept.InterceptorInvocationContext.realProceed(InterceptorInvocationContext.java:72)
	at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:66)
	at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:89)
	at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:52)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:151)
	at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:62)
	at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:138)
	at com.acme.services.ProductService$$OwbInterceptProxy0.save2(com/acme/services/ProductService.java)
	at com.javafiction.common.persistence.test.ProductServiceTest.testFindAll(ProductServiceTest.java:56)


Thanks to Ivan for making this demo!

I'm after exact equivalent of this test case. The test case fails on: deltaspikeProductDAO.save(product);

The demo demonstrates that it works with Spring Data, but breaks with DeltaSpike Data.

Cheers,
Ove

On 07 Mar 2014, at 21:46, Gerhard Petracek <ge...@gmail.com> 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 <or...@gmail.com>:
> 
>> 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 <ge...@gmail.com>
>> 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 <or...@gmail.com>:
>>> 
>>>> 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 <ge...@gmail.com>
>>>> 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 <or...@gmail.com>:
>>>>> 
>>>>>> 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
>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 


Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Ove Ranheim <or...@gmail.com>.
Thanks Gerhard! Will do. Have a nice evening :)

Ove

Sent from my iPhone

> On 7. mars 2014, at 21:46, Gerhard Petracek <ge...@gmail.com> 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 <or...@gmail.com>:
> 
>> 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 <ge...@gmail.com>
>> 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 <or...@gmail.com>:
>>> 
>>>> 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 <ge...@gmail.com>
>>>> 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 <or...@gmail.com>:
>>>>> 
>>>>>> 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
>> 
>> 

Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Gerhard Petracek <ge...@gmail.com>.
hi ove,

#1 DELTASPIKE-473 is about javax.transaction.Transactional and not about
org.apache.deltaspike.jpa.api.transaction.Transactional.
#2 for jta you can use BeanManagedUserTransactionStrategy (or
EnvironmentAwareTransactionStrategy for a mixed environment).

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-08 9:50 GMT+01:00 Ove Ranheim <or...@gmail.com>:

> But I want to use JTA, that's why I include the Narayana and
> JTA-and-Hiberante.
>
>
> On 08 Mar 2014, at 08:58, Thomas Hug <th...@gmail.com> wrote:
>
> > Hi Ove,
> >
> > By default, the DS JPA module comes with a RESOURCE_LOCAL transaction
> > strategy (which the Data module is reusing). Your persistence.xml states
> a
> > JTA transaction type though, so you have to change the transaction
> strategy
> > according to [1].
> >
> > Hope that helps,
> > Thomas
> >
> > [1] http://deltaspike.apache.org/jpa.html#jta-support
> >
> >
> > On Fri, Mar 7, 2014 at 11:39 PM, Ove Ranheim <or...@gmail.com> wrote:
> >
> >> Hi Gerhard,
> >>
> >> Ivan Vasyliev already made a great example that demonstrate this issue
> >> (btw: https://issues.apache.org/jira/browse/DELTASPIKE-473).
> >>
> >> Please have a look at:
> >> https://github.com/vasilievip/cdi-jpa-jta-generic-dao
> >>
> >> To properly demonstrate DS behaviour, you must disable the Spring stuff,
> >> hence you need to:
> >>
> >> pom.xml (comment out)
> >>
> >>        <!--
> >>        <dependency>
> >>            <groupId>org.springframework.data</groupId>
> >>            <artifactId>spring-data-jpa</artifactId>
> >>            <version>${spring-data-jpa.version}</version>
> >>        </dependency>
> >>        -->
> >>
> >> SprintDataProductDAO.java (comment out):
> >>
> >> public interface SpringDataProductDAO
> >> /* extends JpaRepository<Product, Long> */
> >> {
> >>
> >> }
> >>
> >> ProductService.java (comment out)
> >>
> >> //    @Inject
> >> //    SpringDataProductDAO springProductDAO;
> >>
> >> //    @Transactional
> >> //    public List<Product> findAll() {
> >> //        assert springProductDAO != null;
> >> //        List<Product> products = new ArrayList<Product>();
> >> //        Iterator<Product> productIterator =
> >> springProductDAO.findAll().iterator();
> >> //        while (productIterator.hasNext()) {
> >> //            products.add(productIterator.next());
> >> //        }
> >> //        return products;
> >> //    }
> >> //
> >> //    @Transactional
> >> //    public Long save(Product product) {
> >> //        assert springProductDAO != null;
> >> //        springProductDAO.save(product);
> >> //        return product.getId();
> >> //    }
> >>
> >> Exception stracktrace:
> >>
> >> Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.841
> sec
> >> <<< FAILURE! - in
> com.javafiction.common.persistence.test.ProductServiceTest
> >> testFindAll(com.javafiction.common.persistence.test.ProductServiceTest)
> >> Time elapsed: 1.808 sec  <<< ERROR!
> >> org.apache.deltaspike.data.api.QueryInvocationException: Failed calling
> >> Repository:
> >>
> [Repository=com.acme.persistence.DeltaspikeProductDAO,entity=com.acme.model.Product,method=save,exception=class
> >> java.lang.IllegalStateException,message=A JTA EntityManager cannot use
> >> getTransaction()
> >>        at
> >>
> org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1368)
> >>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>        at
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> >>        at
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >>        at java.lang.reflect.Method.invoke(Method.java:606)
> >>        at
> >>
> com.javafiction.common.persistence.resources.JtaEntityManagerProxy.invoke(JtaEntityManagerProxy.java:45)
> >>        at com.sun.proxy.$Proxy63.getTransaction(Unknown Source)
> >>        at
> >>
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.getTransaction(ResourceLocalTransactionStrategy.java:308)
> >>        at
> >>
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:274)
> >>        at
> >>
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:153)
> >>        at
> >>
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeTransactional(TransactionalQueryRunner.java:72)
> >>        at
> >>
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeQuery(TransactionalQueryRunner.java:54)
> >>        at
> >>
> org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:80)
> >>        at com.sun.proxy.$Proxy61.save(Unknown Source)
> >>        at com.acme.services.ProductService.save2(ProductService.java:72)
> >> // <= this is the real issue
> >>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>        at
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> >>        at
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >>        at java.lang.reflect.Method.invoke(Method.java:606)
> >>        at
> >>
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:110)
> >>        at
> >>
> org.apache.webbeans.intercept.InterceptorInvocationContext.realProceed(InterceptorInvocationContext.java:72)
> >>        at
> >>
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:66)
> >>        at
> >>
> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:89)
> >>        at
> >>
> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:52)
> >>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>        at
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> >>        at
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >>        at java.lang.reflect.Method.invoke(Method.java:606)
> >>        at
> >>
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:151)
> >>        at
> >>
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:62)
> >>        at
> >>
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:138)
> >>        at
> >>
> com.acme.services.ProductService$$OwbInterceptProxy0.save2(com/acme/services/ProductService.java)
> >>        at
> >>
> com.javafiction.common.persistence.test.ProductServiceTest.testFindAll(ProductServiceTest.java:56)
> >>
> >>
> >> Thanks to Ivan for making this demo!
> >>
> >> I'm after exact equivalent of this test case. The test case fails on:
> >> deltaspikeProductDAO.save(product);
> >>
> >> The demo demonstrates that it works with Spring Data, but breaks with
> >> DeltaSpike Data.
> >>
> >> Cheers,
> >> Ove
> >>
> >> On 07 Mar 2014, at 21:46, Gerhard Petracek <ge...@gmail.com>
> >> 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 <or...@gmail.com>:
> >>>
> >>>> 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 <
> gerhard.petracek@gmail.com>
> >>>> 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 <or...@gmail.com>:
> >>>>>
> >>>>>> 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 <
> >> gerhard.petracek@gmail.com>
> >>>>>> 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 <or...@gmail.com>:
> >>>>>>>
> >>>>>>>> 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
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
>
>

Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Ove Ranheim <or...@gmail.com>.
But I want to use JTA, that's why I include the Narayana and JTA-and-Hiberante.


On 08 Mar 2014, at 08:58, Thomas Hug <th...@gmail.com> wrote:

> Hi Ove,
> 
> By default, the DS JPA module comes with a RESOURCE_LOCAL transaction
> strategy (which the Data module is reusing). Your persistence.xml states a
> JTA transaction type though, so you have to change the transaction strategy
> according to [1].
> 
> Hope that helps,
> Thomas
> 
> [1] http://deltaspike.apache.org/jpa.html#jta-support
> 
> 
> On Fri, Mar 7, 2014 at 11:39 PM, Ove Ranheim <or...@gmail.com> wrote:
> 
>> Hi Gerhard,
>> 
>> Ivan Vasyliev already made a great example that demonstrate this issue
>> (btw: https://issues.apache.org/jira/browse/DELTASPIKE-473).
>> 
>> Please have a look at:
>> https://github.com/vasilievip/cdi-jpa-jta-generic-dao
>> 
>> To properly demonstrate DS behaviour, you must disable the Spring stuff,
>> hence you need to:
>> 
>> pom.xml (comment out)
>> 
>>        <!--
>>        <dependency>
>>            <groupId>org.springframework.data</groupId>
>>            <artifactId>spring-data-jpa</artifactId>
>>            <version>${spring-data-jpa.version}</version>
>>        </dependency>
>>        -->
>> 
>> SprintDataProductDAO.java (comment out):
>> 
>> public interface SpringDataProductDAO
>> /* extends JpaRepository<Product, Long> */
>> {
>> 
>> }
>> 
>> ProductService.java (comment out)
>> 
>> //    @Inject
>> //    SpringDataProductDAO springProductDAO;
>> 
>> //    @Transactional
>> //    public List<Product> findAll() {
>> //        assert springProductDAO != null;
>> //        List<Product> products = new ArrayList<Product>();
>> //        Iterator<Product> productIterator =
>> springProductDAO.findAll().iterator();
>> //        while (productIterator.hasNext()) {
>> //            products.add(productIterator.next());
>> //        }
>> //        return products;
>> //    }
>> //
>> //    @Transactional
>> //    public Long save(Product product) {
>> //        assert springProductDAO != null;
>> //        springProductDAO.save(product);
>> //        return product.getId();
>> //    }
>> 
>> Exception stracktrace:
>> 
>> Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.841 sec
>> <<< FAILURE! - in com.javafiction.common.persistence.test.ProductServiceTest
>> testFindAll(com.javafiction.common.persistence.test.ProductServiceTest)
>> Time elapsed: 1.808 sec  <<< ERROR!
>> org.apache.deltaspike.data.api.QueryInvocationException: Failed calling
>> Repository:
>> [Repository=com.acme.persistence.DeltaspikeProductDAO,entity=com.acme.model.Product,method=save,exception=class
>> java.lang.IllegalStateException,message=A JTA EntityManager cannot use
>> getTransaction()
>>        at
>> org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1368)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>        at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>        at java.lang.reflect.Method.invoke(Method.java:606)
>>        at
>> com.javafiction.common.persistence.resources.JtaEntityManagerProxy.invoke(JtaEntityManagerProxy.java:45)
>>        at com.sun.proxy.$Proxy63.getTransaction(Unknown Source)
>>        at
>> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.getTransaction(ResourceLocalTransactionStrategy.java:308)
>>        at
>> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:274)
>>        at
>> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:153)
>>        at
>> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeTransactional(TransactionalQueryRunner.java:72)
>>        at
>> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeQuery(TransactionalQueryRunner.java:54)
>>        at
>> org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:80)
>>        at com.sun.proxy.$Proxy61.save(Unknown Source)
>>        at com.acme.services.ProductService.save2(ProductService.java:72)
>> // <= this is the real issue
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>        at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>        at java.lang.reflect.Method.invoke(Method.java:606)
>>        at
>> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:110)
>>        at
>> org.apache.webbeans.intercept.InterceptorInvocationContext.realProceed(InterceptorInvocationContext.java:72)
>>        at
>> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:66)
>>        at
>> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:89)
>>        at
>> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:52)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>        at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>        at java.lang.reflect.Method.invoke(Method.java:606)
>>        at
>> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:151)
>>        at
>> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:62)
>>        at
>> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:138)
>>        at
>> com.acme.services.ProductService$$OwbInterceptProxy0.save2(com/acme/services/ProductService.java)
>>        at
>> com.javafiction.common.persistence.test.ProductServiceTest.testFindAll(ProductServiceTest.java:56)
>> 
>> 
>> Thanks to Ivan for making this demo!
>> 
>> I'm after exact equivalent of this test case. The test case fails on:
>> deltaspikeProductDAO.save(product);
>> 
>> The demo demonstrates that it works with Spring Data, but breaks with
>> DeltaSpike Data.
>> 
>> Cheers,
>> Ove
>> 
>> On 07 Mar 2014, at 21:46, Gerhard Petracek <ge...@gmail.com>
>> 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 <or...@gmail.com>:
>>> 
>>>> 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 <ge...@gmail.com>
>>>> 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 <or...@gmail.com>:
>>>>> 
>>>>>> 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 <
>> gerhard.petracek@gmail.com>
>>>>>> 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 <or...@gmail.com>:
>>>>>>> 
>>>>>>>> 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
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 


Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Thomas Hug <th...@gmail.com>.
Hi Ove,

By default, the DS JPA module comes with a RESOURCE_LOCAL transaction
strategy (which the Data module is reusing). Your persistence.xml states a
JTA transaction type though, so you have to change the transaction strategy
according to [1].

Hope that helps,
Thomas

[1] http://deltaspike.apache.org/jpa.html#jta-support


On Fri, Mar 7, 2014 at 11:39 PM, Ove Ranheim <or...@gmail.com> wrote:

> Hi Gerhard,
>
> Ivan Vasyliev already made a great example that demonstrate this issue
> (btw: https://issues.apache.org/jira/browse/DELTASPIKE-473).
>
> Please have a look at:
> https://github.com/vasilievip/cdi-jpa-jta-generic-dao
>
> To properly demonstrate DS behaviour, you must disable the Spring stuff,
> hence you need to:
>
> pom.xml (comment out)
>
>         <!--
>         <dependency>
>             <groupId>org.springframework.data</groupId>
>             <artifactId>spring-data-jpa</artifactId>
>             <version>${spring-data-jpa.version}</version>
>         </dependency>
>         -->
>
> SprintDataProductDAO.java (comment out):
>
> public interface SpringDataProductDAO
> /* extends JpaRepository<Product, Long> */
> {
>
> }
>
> ProductService.java (comment out)
>
> //    @Inject
> //    SpringDataProductDAO springProductDAO;
>
> //    @Transactional
> //    public List<Product> findAll() {
> //        assert springProductDAO != null;
> //        List<Product> products = new ArrayList<Product>();
> //        Iterator<Product> productIterator =
> springProductDAO.findAll().iterator();
> //        while (productIterator.hasNext()) {
> //            products.add(productIterator.next());
> //        }
> //        return products;
> //    }
> //
> //    @Transactional
> //    public Long save(Product product) {
> //        assert springProductDAO != null;
> //        springProductDAO.save(product);
> //        return product.getId();
> //    }
>
> Exception stracktrace:
>
> Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.841 sec
> <<< FAILURE! - in com.javafiction.common.persistence.test.ProductServiceTest
> testFindAll(com.javafiction.common.persistence.test.ProductServiceTest)
>  Time elapsed: 1.808 sec  <<< ERROR!
> org.apache.deltaspike.data.api.QueryInvocationException: Failed calling
> Repository:
> [Repository=com.acme.persistence.DeltaspikeProductDAO,entity=com.acme.model.Product,method=save,exception=class
> java.lang.IllegalStateException,message=A JTA EntityManager cannot use
> getTransaction()
>         at
> org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1368)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at
> com.javafiction.common.persistence.resources.JtaEntityManagerProxy.invoke(JtaEntityManagerProxy.java:45)
>         at com.sun.proxy.$Proxy63.getTransaction(Unknown Source)
>         at
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.getTransaction(ResourceLocalTransactionStrategy.java:308)
>         at
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:274)
>         at
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:153)
>         at
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeTransactional(TransactionalQueryRunner.java:72)
>         at
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeQuery(TransactionalQueryRunner.java:54)
>         at
> org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:80)
>         at com.sun.proxy.$Proxy61.save(Unknown Source)
>         at com.acme.services.ProductService.save2(ProductService.java:72)
> // <= this is the real issue
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:110)
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.realProceed(InterceptorInvocationContext.java:72)
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:66)
>         at
> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:89)
>         at
> com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:52)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:151)
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:62)
>         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:138)
>         at
> com.acme.services.ProductService$$OwbInterceptProxy0.save2(com/acme/services/ProductService.java)
>         at
> com.javafiction.common.persistence.test.ProductServiceTest.testFindAll(ProductServiceTest.java:56)
>
>
> Thanks to Ivan for making this demo!
>
> I'm after exact equivalent of this test case. The test case fails on:
> deltaspikeProductDAO.save(product);
>
> The demo demonstrates that it works with Spring Data, but breaks with
> DeltaSpike Data.
>
> Cheers,
> Ove
>
> On 07 Mar 2014, at 21:46, Gerhard Petracek <ge...@gmail.com>
> 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 <or...@gmail.com>:
> >
> >> 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 <ge...@gmail.com>
> >> 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 <or...@gmail.com>:
> >>>
> >>>> 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 <
> gerhard.petracek@gmail.com>
> >>>> 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 <or...@gmail.com>:
> >>>>>
> >>>>>> 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
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
>
>

Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Gerhard Petracek <ge...@gmail.com>.
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 <or...@gmail.com>:

> 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 <ge...@gmail.com>
> 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 <or...@gmail.com>:
> >
> >> 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 <ge...@gmail.com>
> >> 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 <or...@gmail.com>:
> >>>
> >>>> 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
> >>>>
> >>>>
> >>>>
> >>
> >>
>
>

Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Ove Ranheim <or...@gmail.com>.
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 <ge...@gmail.com> 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 <or...@gmail.com>:
> 
>> 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 <ge...@gmail.com>
>> 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 <or...@gmail.com>:
>>> 
>>>> 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
>>>> 
>>>> 
>>>> 
>> 
>> 


Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Gerhard Petracek <ge...@gmail.com>.
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 <or...@gmail.com>:

> 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 <ge...@gmail.com>
> 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 <or...@gmail.com>:
> >
> >> 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
> >>
> >>
> >>
>
>

Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Ove Ranheim <or...@gmail.com>.
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 <ge...@gmail.com> 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 <or...@gmail.com>:
> 
>> 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
>> 
>> 
>> 


Re: How can TransactionScoped be started with weld-embedded-1.1

Posted by Gerhard Petracek <ge...@gmail.com>.
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 <or...@gmail.com>:

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