Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB@Asynchronous-事务在执行几分钟后不处于活动状态_Java_Asynchronous_Transactions_Jboss_Ejb - Fatal编程技术网

Java EJB@Asynchronous-事务在执行几分钟后不处于活动状态

Java EJB@Asynchronous-事务在执行几分钟后不处于活动状态,java,asynchronous,transactions,jboss,ejb,Java,Asynchronous,Transactions,Jboss,Ejb,在我的singleton会话bean中有一个异步方法,它在执行几分钟后,在完成另一个事务的方法后抛出以下异常: 原因:org.jboss.util.NestedSQLException:事务未激活:tx=TransactionImple

在我的singleton会话bean中有一个异步方法,它在执行几分钟后,在完成另一个事务的方法后抛出以下异常:

原因:org.jboss.util.NestedSQLException:事务未激活:tx=TransactionImple 我已尝试添加此anotation-@TransactionTimeout-但不起作用

有什么想法吗


谢谢。

1.在transaction-jboss-beans.xml中配置默认超时:

100

2.使用BMT手动设置事务的超时:

userTransaction.setTransactionTimeout(100)

3.在方法级别重写xml定义中的会话bean:

//--
    <method-attributes> 
       <method> 
         <method-name>someMethod</method-name> 
           <transaction-timeout>100</transaction-timeout> 
       </method> 
    </method-attributes>
//--
//--
某种方法
100
//--

是的,您可以使用注释
@TransactionTimeout
如果您不想调整标准超时,可以为特定业务方法设置事务超时。为此,JBoss/Wildfly提供了
@TransactionTimeout
注释

开始之前,请确保已将依赖项添加到项目中:

<dependency>
    <groupId>org.jboss.ejb3</groupId>
    <artifactId>jboss-ejb3-ext-api</artifactId>
    <version>2.2.0.Final</version>
    <scope>provided</scope>
</dependency>

该规范不包括事务超时。将其标记为“jboss”,希望更熟悉该平台的人能提供帮助。Great@Nayan Wadekar。谢谢
@Stateless
class SomeBean {

    @Inject
    AsyncBean asyncBean;

    @TransactionTimeout(value=5, unit= TimeUnit.MINUTES)
    public void foo() {
        asyncBean.lala()
    }
}
@Stateless
class AsyncBean {

    @Asynchronous
    @TransactionTimeout(value=10, unit= TimeUnit.MINUTES)
    public void lala() {
        ...
    }
}