EJB计时器是事务对象。但是在计时器期间如何启动新的交易呢?
示例:
@Timeout
public void foo(...) {
...
@Inject
Worker worker;
...
worker.doSometing();
...
}
---
Worker {
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public void doSomething(){
//TODO
}
}
不起作用。甚至用UserTransaction测试也没有成功。
解决方案: 如果worker类是CDI,则TransactionAttributeType.REQUIRES_NEW将不会调用新事务。如果worker类是EJB,它似乎有效。在我的情况下,我只是添加注释@Statless(Statefull也应该工作)为工作者调用