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