EJB组件是否有超时设置?

时间:2015-06-18 08:51:43

标签: java jpa ejb

EJB组件是否有超时设置?

在这个EJB组件中,有一个运行sql的代码超过30分钟。 因此,超时是触发器,每个sql语句都会回滚。

我已将JPA超时设置为1小时,但似乎EJB中还有另一个设置。

TQS。 麦

1 个答案:

答案 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方法不是要走的路。这似乎是一个批处理过程。