如果我在EJB bean中有两个方法,一个事务属性为NOT_SUPPORTED,需要用REQUIRED调用另一个方法,如果我通过注入的bean进行调用,我可以期待事务启动:
@Stateless
@LocalBean
public class LeBean {
@EJB LeBean bean;
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void someMethod(){
...
bean.otherMethod();
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void otherMethd(){
...
}
}
或者我可以像这样在本地拨打电话:
@Stateless
@LocalBean
public class LeBean {
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void someMethod(){
...
otherMethod();
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void otherMethd(){
...
}
}
现在someMethod()
需要很长时间才能在到达otherMethod()
之前处理信息,因此事务超时,即使我已将NOT_SUPPORTED声明为第一种方法的transactionAttribute。
答案 0 :(得分:2)
如果我通过电话拨打电话,我可以期待交易启动吗? 注入豆:
如果你想要一个交易,你必须通过注入的bean进行调用。必须通过业务接口进行调用,否则将忽略您的事务属性。在您的情况下,如果您从没有交易的方法或暂停的交易(即 - NOT_SUPPORTED)调用otherMethod(),那么它只是一个POJO调用。
从技术上讲,如果确实存在someMethod(),那么otherMethod()将“置于”someMethod()的事务之上。例如,对于someMethod(),你有NOT_SUPPORTED,但如果它是REQUIRED或REQUIRES_NEW,那么otherMethod()将在该事务中共享。 someMethod()的回滚也会从otherMethod()回滚操作。
现在someMethod()需要很长时间来处理信息 到达otherMethod(),因此事务超时
这完全是另一个问题。您可能希望增加事务超时,并考虑将其作为单独的异步进程运行。