[jira] [Commented] (DELTASPIKE-1350) TransactionalInterceptor should use the EntityManagerResolver for lookups

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Commented] (DELTASPIKE-1350) TransactionalInterceptor should use the EntityManagerResolver for lookups

JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/DELTASPIKE-1350?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16526134#comment-16526134 ]

Andrei Ivanov commented on DELTASPIKE-1350:
-------------------------------------------

Please read my description again.
The examples I mention there are taken from the link you have provided, so yes, I have read it.

Also I've mentioned that I don't see how selection by qualifier could work in my case, hence my request to allow the selection of the entity manager by using the defined EntityManagerResolver, functionality that is provided by DeltaSpike, but only in the data module (which I don't use), not in JPA.

> TransactionalInterceptor should use the EntityManagerResolver for lookups
> -------------------------------------------------------------------------
>
>                 Key: DELTASPIKE-1350
>                 URL: https://issues.apache.org/jira/browse/DELTASPIKE-1350
>             Project: DeltaSpike
>          Issue Type: Improvement
>          Components: JPA-Module
>    Affects Versions: 1.8.2
>            Reporter: Andrei Ivanov
>            Priority: Major
>
> Hi,
> I'm trying to use the transaction support from the JPA module with multiple entity managers that are created by a producer defined in a separate/common module.
> That means that any specific qualifiers defined in the client modules (like {{@DbA}} / {{@DbB}}{{ from the examples) are not visible to the producer. To make this work, I've followed the approach from the EntityManagerFactoryProducer}} and I've defined my own qualifier, {{PersistenceContextName}}, duplicated from {{PersistenceUnitName}} (and similar to the {{CustomQualifier}} from the example).
> I've also created an {{EntityManagerResolver}} in one of the client modules and configured it in the DAOs inside it (which are not DeltaSpike repositories), with {{@Transactional}} and {{@EntityManagerConfig(entityManagerResolver = BranchManagementResolver.class, qualifier = PersistenceContextName.class)}}
> As far as I see, only the {{qualifier}} attribute is used, but it invokes my producer with a {{null}} {{InjectionPoint}}:
> {noformat}
> java.lang.NullPointerException: null
>     at EntityManagerProducer.getEntityManagerFactory(EntityManagerProducer.java:109) ~[server-core-impl-1.0.21-SNAPSHOT.jar:?]
>     at EntityManagerProducer.createEntityManager(EntityManagerProducer.java:95) ~[server-core-impl-1.0.21-SNAPSHOT.jar:?]
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_172]
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_172]
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_172]
>     at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_172]
>     at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:85) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.injection.producer.ProducerMethodProducer.produce(ProducerMethodProducer.java:103) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:161) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:180) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.contexts.unbound.DependentContextImpl.get(DependentContextImpl.java:70) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:700) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:723) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:64) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:86) ~[weld-core-impl-3.0.4.Final.jar:3.0.4.Final]
>     at org.apache.deltaspike.jpa.spi.entitymanager.QualifierBackedEntityManagerResolver.resolveEntityManager(QualifierBackedEntityManagerResolver.java:59) ~[deltaspike-jpa-module-api-1.8.2.jar:1.8.2]
>     at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.resolveEntityManagerForQualifier(ResourceLocalTransactionStrategy.java:381) ~[deltaspike-jpa-module-impl-1.8.2.jar:1.8.2]
> {noformat}
> The NPE line has {{LOGGER.info(injectionPoint.getAnnotated())}}, and {{injectionPoint}} is null.
> Maybe this is a separate bug?
>  
> If I understand this correctly, my problem would be solved if my custom resolver would be used for lookups, but the only reference to it is from {{EntityManagerRefLookup#lookupReference}}, and that just got removed from {{TransactionStrategyHelper}}.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)