[
https://issues.apache.org/jira/browse/DELTASPIKE-420?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13918173#comment-13918173
]
Harald Wellmann commented on DELTASPIKE-420:
--------------------------------------------
My application which uses 0.6-SNAPSHOT just broke due to today's changes, and
I'm left with a couple of issues even after introducing the
BeanManagedUserTransactionStrategy:
* For a stateless session bean injecting a repository bean, I'm getting this
exception on WildFly 8.0.0.Final:
{noformat}
Caused by: javax.naming.NamingException: JBAS014237: Only session and
message-driven beans with bean-managed transaction demarcation are allowed to
access UserTransaction
at
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:142)
~[na:na]
at
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:81)
~[na:na]
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:202)
~[na:na]
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179)
~[na:na]
at
org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235)
~[na:na]
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:188)
~[na:na]
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)
~[na:na]
at javax.naming.InitialContext.lookup(InitialContext.java:411)
~[na:1.7.0_51]
at javax.naming.InitialContext.lookup(InitialContext.java:411)
~[na:1.7.0_51]
at
org.jboss.as.weld.services.bootstrap.WeldResourceInjectionServices.resolveResource(WeldResourceInjectionServices.java:185)
~[na:na]
at
org.jboss.as.weld.services.bootstrap.WeldResourceInjectionServices$1.createResource(WeldResourceInjectionServices.java:135)
~[na:na]
at
org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:44)
~[na:na]
at
org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:53)
~[na:na]
at org.jboss.weld.util.Beans.injectEEFields(Beans.java:331) ~[na:na]
at
org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:59)
~[na:na]
at
org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
~[na:na]
at
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
~[na:na]
at
org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
~[na:na]
at
org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
~[na:na]
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150) ~[na:na]
at
org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69)
~[na:na]
at
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
~[na:na]
at
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:789)
~[na:na]
at
org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
~[na:na]
{noformat}
As a workaround, I created a local copy of BeanManagedUserTransactionStrategy
as global alternative, deleting the {{@Resource}} annotation from the
{{UserTransaction}} field.
* For {{@ApplicationScoped @Transactional}} beans injecting a repository, I'm
getting this exception:
{noformat}
Caused by: java.lang.IllegalStateException: UserTransaction is not available
within the scope of a bean or method annotated with @Transactional and a
Transactional.TxType other than NOT_SUPPORTED or NEVER
at
org.jboss.tm.usertx.client.ServerVMClientUserTransaction.testAvailability(ServerVMClientUserTransaction.java:232)
at
org.jboss.tm.usertx.client.ServerVMClientUserTransaction.getStatus(ServerVMClientUserTransaction.java:196)
at
MyTransactionStrategy$UserTransactionAdapter.getTransactionStatus(MyTransactionStrategy.java:331)
at
MyTransactionStrategy$UserTransactionAdapter.isActive(MyTransactionStrategy.java:307)
at
org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:275)
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)
... 77 more
at
org.ops4j.pax.exam.servlet.TestRunnerServlet.runSuite(TestRunnerServlet.java:110)
at
org.ops4j.pax.exam.servlet.TestRunnerServlet.doGet(TestRunnerServlet.java:76)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
at
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
at
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
at
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)
at
io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52)
at
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
at
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)
at
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
at
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
at
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
at
io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:101)
at
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)
at
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
at
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
at
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168)
at
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:687)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
{noformat}
I had to convert these beans to stateless session beans - that doesn't hurt too
much for the time being, but I'd prefer to have repositories work out of the
box even in this case. If there's no easy way to achieve this, then at least
this restriction should be documented.
> Transactional repositories
> --------------------------
>
> Key: DELTASPIKE-420
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-420
> Project: DeltaSpike
> Issue Type: New Feature
> Components: Data-Module
> Affects Versions: 0.5
> Reporter: Harald Wellmann
> Assignee: Thomas Hug
> Attachments: DELTASPIKE-420_spi.patch
>
>
> It's nice to get semi-automatic repositories from DeltaSpike Data, but these
> repositories would be even more fun if they were transactional, not
> necessarily by default, but at least by simple configuration.
> Possible approaches:
> 1) Add @Transactional to an abstract repository class, i.e.
> javax.transaction.Transactional in Java EE 7, or
> org.apache.deltaspike.jpa.api.transaction.Transactional otherwise.
> Currently, this does not work due to DELTASPIKE-419.
> 2) Make it easy to override the @Repository binding or the query handler, to
> add transactional behaviour.
--
This message was sent by Atlassian JIRA
(v6.2#6252)