Transactions inside ManagedScheduledExecutorService tasks on TomEE 7.0.0?

Context

I want to schedule recurring background jobs with ManagedScheduledExecutorService. I get Runnables / Callableusing Instance, so I have injection capabilities inside my tasks.

My app is working on TomEE 7.0.0-SNAPSHOT webprofile.

Problem

Because these tasks access the database, they need a transaction. However, inside Runnable/ Callabletransaction is not active.

User transaction

The documentation for ManagedScheduledExecutorService states that

If a transaction is required, use an instance of javax.transaction.UserTransaction. A UserTransaction instance is available (...) by requesting an injection of the UserTransaction object using the Resource annotation.

However introduced

@Resource
private UserTransaction userTransaction;

null .

bean

, , , EJB , , .

:

SEVERE: CDI Beans module deployment failed
java.lang.IllegalStateException: no interface to proxy for ejb StatelessEjb, is this is a MDB maybe you shouldn't use a scope?
    at org.apache.openejb.cdi.CdiEjbBean.createEjb(CdiEjbBean.java:252)
    at org.apache.openejb.cdi.CdiPlugin.getSessionBeanProxy(CdiPlugin.java:224)
    at org.apache.webbeans.container.BeanManagerImpl.getEjbOrJmsProxyReference(BeanManagerImpl.java:951)
    at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:777)
    at org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:651)
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:111)
    at org.apache.webbeans.inject.InjectableConstructor.createParameters(InjectableConstructor.java:109)
    at org.apache.webbeans.inject.InjectableConstructor.doInjection(InjectableConstructor.java:72)
    at org.apache.webbeans.portable.InjectionTargetImpl.newInstance(InjectionTargetImpl.java:190)
    at org.apache.webbeans.portable.InjectionTargetImpl.produce(InjectionTargetImpl.java:173)
    at org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172)
    at org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:127)
    at org.apache.webbeans.component.ManagedBean.create(ManagedBean.java:67)
    at org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
    at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:124)
    at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:785)
    at org.apache.webbeans.inject.instance.InstanceImpl.create(InstanceImpl.java:306)
    at org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:123)
(...)

Github. , , .

  • EJB @Stateless , ?
  • @Resource UserTransaction?
+4
1

CDI :

@Inject
private UserTransaction userTransaction;

edit: ​​ @Resource: https://issues.apache.org/jira/browse/TOMEE-1672

+5

Source: https://habr.com/ru/post/1618140/


All Articles