如何将超时设置为 EJB 方法(在无状态 bean 中)
Posted
技术标签:
【中文标题】如何将超时设置为 EJB 方法(在无状态 bean 中)【英文标题】:How to set timeout to an EJB-Method (in stateless bean) 【发布时间】:2014-10-26 17:26:00 【问题描述】:我有一个无状态会话 bean,一个方法需要 6 分钟才能返回结果,因为我得到了“超时”异常。我注意到超时已经在 Wildfly Standalone.xml 或 persistence.xml 中设置了
<session-bean>
<stateful default-access-timeout="12000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>
<singleton default-access-timeout="12000"/>
</session-bean>
或
<property name="javax.persistence.query.timeout" value="120000" />
但它仅适用于有状态的 bean。如何将超时设置为无状态 bean 中的一种方法?
【问题讨论】:
【参考方案1】:我尝试了以下注释,它似乎工作:
@AccessTimeout(value = 15, unit = TimeUnit.MINUTES)
@Override
public void myMethod()
//do something
【讨论】:
这听起来很令人惊讶。 Javadoc 声明“此注释可以应用于 有状态会话 bean 或使用容器管理并发的 单例会话 bean。默认情况下,允许客户端进行并发调用到有状态会话对象,并且容器需要序列化此类并发请求。AccessTimeout 注释用于指定在 bean 实例已经在处理不同请求的情况下,有状态会话 bean 请求应该阻塞的时间量。" 这个答案似乎是错误的。 @AccessTimeout 是关于等待时间的,因为有状态 bean 的方法默认是同步的。 openejb.apache.org/examples-trunk/access-timeout以上是关于如何将超时设置为 EJB 方法(在无状态 bean 中)的主要内容,如果未能解决你的问题,请参考以下文章
@Stateless和@Asynchronous EJB之间的JPA事务处理
sessionscoped 托管 bean 与有状态 ejb