EJB组件是否有超时设置?
在这个EJB组件中,有一个运行sql的代码超过30分钟。 因此,超时是触发器,每个sql语句都会回滚。
我已将JPA超时设置为1小时,但似乎EJB中还有另一个设置。
TQS。 麦
答案 0 :(得分:0)
从EJB 3.1开始,这可以通过@Asyncrhonous(http://docs.oracle.com/javaee/7/api/javax/ejb/Asynchronous.html)
实现@Asynchronous
public Future<ResultObject> longRunningMethod () {
}
然后你可以用
来调用它Future<ResultObject> result = ejb.longRunningMethod();
result.get(15, TimeUnit.SECONDS);
请注意,longRunningMethod的默认事务模式为REQUIRED_NEW。这可能会让事情变得棘手。
除此之外,所有容器都提供了一种设置事务超时的方法。但这并不像预期的那样有效。该方法不返回,它仅在超时持续时间后标记为失败,并在方法完成后抛出事务超时异常,而不是在超出超时后立即抛出。
通常,如果您的数据库事务运行时间超过30分钟。和ejb方法不是要走的路。这似乎是一个批处理过程。