Thanks Gerhard! Will do. Have a nice evening :)

Ove

Sent from my iPhone

> On 7. mars 2014, at 21:46, Gerhard Petracek <[email protected]> 
> 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 <[email protected]>:
> 
>> public class TestBean {
>> 
>>    @Inject
>>    @PartsRepository
>>    private EntityManager em;
>> 
>>    @Transactional
>>    public void transaction(TestEntity entity) {
>>        em.persist(entity);
>>    }
>> }
>> 
>> and in test-case:
>> 
>>    @Inject
>>    private TestBean testBean;
>> 
>>    @Test
>>    public void testMe() throws Exception {
>>        testBean.transaction(m); // <== exception message below
>>    }
>> 
>> stacktrace:
>> 
>> java.lang.NullPointerException: null
>>        at
>> org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:44)
>>        at
>> org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:53)
>>        at org.jboss.weld.util.Beans.injectEEFields(Beans.java:331)
>>        at
>> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:59)
>>        at
>> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
>>        at
>> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
>>        at
>> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
>>        at
>> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
>>        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150)
>>        at
>> org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69)
>>        at
>> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
>>        at
>> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:789)
>>        at
>> org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
>>        at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:358)
>>        at
>> org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:369)
>>        at
>> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:72)
>>        at
>> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:60)
>>        at
>> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
>>        at
>> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
>>        at
>> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
>>        at
>> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
>>        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150)
>>        at
>> org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69)
>>        at
>> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
>>        at
>> org.jboss.weld.bean.interceptor.CdiInterceptorFactory.create(CdiInterceptorFactory.java:45)
>>        at
>> org.jboss.weld.interceptor.proxy.InterceptionContext.initInterceptorInstanceMap(InterceptionContext.java:93)
>>        at
>> org.jboss.weld.interceptor.proxy.InterceptionContext.of(InterceptionContext.java:68)
>>        at
>> org.jboss.weld.interceptor.proxy.InterceptionContext.forNonConstructorInterception(InterceptionContext.java:63)
>>        at
>> org.jboss.weld.injection.producer.InterceptorApplyingInstantiator.newInstance(InterceptorApplyingInstantiator.java:53)
>>        at
>> org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:85)
>>        at
>> org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:183)
>>        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:149)
>>        at
>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
>>        at
>> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
>>        at
>> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78)
>>        at
>> com.parts.persistence.test.repository.TestBean$Proxy$_$$_WeldClientProxy.transaction(Unknown
>> Source)
>>        at
>> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:141)
>> 
>> 
>> This stacktrace doesn't provide me much lead to what's wrong. Is there a
>> way to unwrap what's going on behind the scene:
>> 
>> at
>> com.parts.persistence.test.repository.TestBean$Proxy$_$$_WeldClientProxy.transaction(Unknown
>> Source)
>>        at
>> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:141)
>> 
>> 
>> Cheers,
>> Ove
>> 
>> On 07 Mar 2014, at 20:11, Gerhard Petracek <[email protected]>
>> wrote:
>> 
>>> you can use a separated class and annotate it (or its methods) with
>>> @Transactional -> inject it in your test and delegate to it.
>>> 
>>> regards,
>>> gerhard
>>> 
>>> http://www.irian.at
>>> 
>>> Your JSF/JavaEE powerhouse -
>>> JavaEE Consulting, Development and
>>> Courses in English and German
>>> 
>>> Professional Support for Apache MyFaces
>>> 
>>> 
>>> 
>>> 2014-03-07 19:56 GMT+01:00 Ove Ranheim <[email protected]>:
>>> 
>>>> Hi Gerhard,
>>>> 
>>>> Thanks for your prompt response.
>>>> 
>>>> I use shrinkwrap desc:
>> .getOrCreateInterceptors().clazz(TransactionalInterceptor.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorMandatory.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorNever.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorNotSupported.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequiresNew.class.getName())
>> .clazz(com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorSupports.class.getName()).up()
>> .getOrCreateAlternatives().clazz(BeanManagedUserTransactionStrategy.class.getName()).up()
>>>> 
>>>> According to #2: anything missing?
>>>> 
>>>> Roger #1. If I use RequestScoped instead, I get this error:
>>>> 
>>>> testMe(com.parts.persistence.test.repository.PartsRepositoryTest)  Time
>>>> elapsed: 0.071 sec  <<< ERROR!
>>>> java.lang.NullPointerException: null
>>>>       at
>> org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:44)
>>>>       at
>> org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:53)
>>>>       at org.jboss.weld.util.Beans.injectEEFields(Beans.java:331)
>>>>       at
>> org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:59)
>>>>       at
>> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
>>>>       at
>> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
>>>>       at
>> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
>>>>       at
>> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
>>>>       at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150)
>>>>       at
>>>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
>>>>       at
>> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
>>>>       at
>> org.jboss.weld.injection.producer.AbstractMemberProducer.getReceiver(AbstractMemberProducer.java:128)
>>>>       at
>> org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:148)
>>>>       at
>> org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:183)
>>>>       at
>>>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
>>>>       at
>> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
>>>>       at
>> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
>>>>       at
>> org.jboss.weld.proxies.EntityManager$893098196$Proxy$_$$_WeldClientProxy.persist(Unknown
>>>> Source)
>>>>       at
>> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:137)
>>>> 
>>>> Appreciate you help!
>>>> 
>>>> Cheers,
>>>> ove
>>>> 
>>>> On 07 Mar 2014, at 19:47, Gerhard Petracek <[email protected]>
>>>> wrote:
>>>> 
>>>>> hi ove,
>>>>> 
>>>>> #1 currently only std. scopes are supported by ContextControl.
>>>>> #2 it will work once TransactionalInterceptor gets called
>>>>> 
>>>>> regards,
>>>>> gerhard
>>>>> 
>>>>> http://www.irian.at
>>>>> 
>>>>> Your JSF/JavaEE powerhouse -
>>>>> JavaEE Consulting, Development and
>>>>> Courses in English and German
>>>>> 
>>>>> Professional Support for Apache MyFaces
>>>>> 
>>>>> 
>>>>> 
>>>>> 2014-03-07 19:12 GMT+01:00 Ove Ranheim <[email protected]>:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> I'm not able to start the TransactionScoped in due time. I'm doing an
>>>>>> experiment on using ds-jpa together with JTA-and-Hibernate (
>>>>>> https://github.com/jbosstm/quickstart/tree/master/jta-and-hibernate).
>>>>>> 
>>>>>> The persistence.xml uses JTA and binds to a JdbcDataSource bound to
>>>> JNDI.
>>>>>> If I use the TransactionManager directly, it all works. However, when
>> I
>>>> use
>>>>>> the BeanManagedUserTransactionStrategy it fails. I'd like to make use
>> of
>>>>>> the @Transactional and @TransactionScope.
>>>>>> 
>>>>>> Here are some code snippets.
>>>>>> 
>>>>>>  public static void bindNamingAndTransactionService() throws
>>>> Exception {
>>>>>>      if(txInitialized) return;
>>>>>>      // Start JNDI server
>>>>>>      NAMING_BEAN.start();
>>>>>> 
>>>>>>      // Bind JTA implementation with default names
>>>>>>      JNDIManager.bindJTAImplementation();
>>>>>> 
>>>>>>      // Bind JTA implementation with JBoss names. Needed for JTA 1.2
>>>>>> implementation.
>>>>>>      // See https://issues.jboss.org/browse/JBTM-2054
>>>>>>      // resolve naming parse container for comp and bind
>>>>>>      NAMING_BEAN.getNamingInstance().createSubcontext(new
>>>>>> NamingParser().parse("jboss"));
>> jtaPropertyManager.getJTAEnvironmentBean().setTransactionManagerJNDIContext("java:/jboss/TransactionManager");
>>>>>>      jtaPropertyManager.getJTAEnvironmentBean()
>> .setTransactionSynchronizationRegistryJNDIContext("java:/jboss/TransactionSynchronizationRegistry");
>>>>>>      JNDIManager.bindJTAImplementation();
>>>>>> 
>>>>>>      JdbcDataSource dataSource = new JdbcDataSource();
>>>>>>      dataSource.setURL("jdbc:h2:~/partsdb;MVCC=TRUE");
>>>>>>      dataSource.setUser("sa");
>>>>>>      dataSource.setPassword("");
>>>>>> 
>>>>>>      InitialContext context = new InitialContext();
>>>>>>      context.bind("java:/jboss/primaryDS", dataSource);
>>>>>>      txInitialized = true;
>>>>>>  }
>>>>>> 
>>>>>> EntityManagerProducer:
>>>>>> 
>>>>>>  @Produces
>>>>>>  @PartsRepository
>>>>>>  @TransactionScoped
>>>>>>  protected EntityManager createEntityManager() {
>>>>>>      return entityManagerFactory.createEntityManager();
>>>>>>  }
>>>>>> 
>>>>>>  @Produces
>>>>>>  public EntityManagerFactory entityManagerFactory() {
>>>>>>      if (entityManagerFactory == null) {
>>>>>>          try {
>>>>>>              if (!txInitialized) bindNamingAndTransactionService();
>>>>>>          } catch (Exception e) {
>>>>>>              throw new RuntimeException(e);
>>>>>>          }
>>>>>>          return Persistence.createEntityManagerFactory("primary");
>>>>>>      }
>>>>>>      throw new UnsupportedOperationException();
>>>>>>  };
>>>>>> 
>>>>>> Arquillian Weld-Embedded-1.1 test:
>>>>>> 
>>>>>>  @BeforeClass
>>>>>>  public static void beforeClazz() throws Exception {
>> BeanProvider.getContextualReference(ContextControl.class).startContext(TransactionScoped.class);
>>>>>>  }
>>>>>> 
>>>>>>  @Test
>>>>>>  @Transactional
>>>>>>  public void testMe() throws Exception {
>>>>>>     // do something with TransactionScoped EntityManager
>>>>>>  }
>>>>>> 
>>>>>> If I move startContext to @Before method, the same error occurs.
>>>>>> 
>>>>>> 
>>>>>> Exception:
>>>>>> 
>>>>>> testMe(com.parts.persistence.test.repository.PartsRepositoryTest)
>> Time
>>>>>> elapsed: 0.063 sec  <<< ERROR!
>>>>>> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
>> active
>>>>>> contexts for scope type
>>>>>> org.apache.deltaspike.jpa.api.transaction.TransactionScoped
>>>>>>      at
>> org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680)
>>>>>>      at
>> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79)
>>>>>>      at
>> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
>>>>>>      at
>> org.jboss.weld.proxies.EntityManager$893098196$Proxy$_$$_WeldClientProxy.persist(Unknown
>>>>>> Source)
>>>>>>      at
>> com.parts.persistence.test.repository.PartsRepositoryTest.testMe(PartsRepositoryTest.java:130)
>>>>>> 
>>>>>> ideas?
>>>>>> 
>>>>>> Cheers,
>>>>>> Ove
>> 
>> 

Reply via email to