Java ejb sessionbean中的事务超时

Java ejb sessionbean中的事务超时,java,transactions,ejb,Java,Transactions,Ejb,在EJBSessionBean中,我将事务超时设置为3600秒。我有一个循环代码,可以使用这个sessionbean。3600秒后,sessionbean事务超时,但循环仍在工作。 我的问题是,当事务超时后转到下一个循环时,是否会为sessionbean创建新的事务? 或者关于这里使用的交易的任何信息 SessionBean xx = ...; while(...){ // This loop may be a long time more than 3600s try{

在EJBSessionBean中,我将事务超时设置为3600秒。我有一个循环代码,可以使用这个sessionbean。3600秒后,sessionbean事务超时,但循环仍在工作。 我的问题是,当事务超时后转到下一个循环时,是否会为sessionbean创建新的事务? 或者关于这里使用的交易的任何信息

SessionBean xx = ...;
while(...){ // This loop may be a long time more than 3600s
    try{
        xx.do();
    }catch(Exception e){
    }
}
// if xx is transaction time out, the while loop is still working, then will a new transaction for xx be created?

视情况而定。如果例如SessionBean#do()用

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void do() { ...
@TransactionAttribute(TransactionAttributeType.REQUIRES)
public void do() { ...
然后,每次调用do()都会打开一个新事务

如果例如SessionBean#do()用

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void do() { ...
@TransactionAttribute(TransactionAttributeType.REQUIRES)
public void do() { ...
您的循环方法已经有一个打开的事务,因为它的注释如下:

@TransactionAttribute(TransactionAttributeType.REQUIRES) // or REQUIRES_NEW
public void loopMethod() { ...
那么整个交易就破裂了


有关交易属性,请参见

非常感谢。在你的帮助下,我已经找到了结果。