ejb sessionbean中的事务超时

时间:2016-03-10 07:20:21

标签: java transactions ejb

在EJB SessionBean中,我将事务时间设置为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?

1 个答案:

答案 0 :(得分:0)

这取决于。如果是SessionBean#do()用

注释
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript('document.getElementById("terms_checkbox").style.visibility="visible";');
js.executeScript('document.getElementById("terms_checkbox").style.display="block";');

然后,对于do()的每次调用,将打开一个新事务。

如果是SessionBean#do()用

注释
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void do() { ...

并且你的循环方法已经是一个打开的事务,因为它注释如下:

@TransactionAttribute(TransactionAttributeType.REQUIRES)
public void do() { ...

然后整个交易都被打破了。

对于TransactionAttributes,请参阅https://docs.oracle.com/html/E13981_01/servtran002.htm