在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?
答案 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