Jakarta ee 当有状态bean在@Asynchronous方法调用期间被破坏时会发生什么?

Jakarta ee 当有状态bean在@Asynchronous方法调用期间被破坏时会发生什么?,jakarta-ee,ejb,ejb-3.0,java-ee-7,Jakarta Ee,Ejb,Ejb 3.0,Java Ee 7,我有一个带事务性@异步方法的有状态EJB,返回未来。它是从web层(@SessionScopedCDIBean)调用的,如下所示: @SessionScoped @Named public class SessionBean { @EJB EjbService service public void call() { Future<Object> response = service.process(); } } @Stateful @Transacti

我有一个带事务性
@异步
方法的有状态EJB,返回
未来
。它是从web层(
@SessionScoped
CDIBean)调用的,如下所示:

@SessionScoped
@Named
public class SessionBean {
  @EJB
  EjbService service

  public void call() {
    Future<Object> response = service.process();
  }

}

@Stateful
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class EjbService {

  @Asynchronous
  public Future<Object> process() {
  //
  }

}
@SessionScoped
@命名
公共类SessionBean{
@EJB
EjbService服务
公开作废通知(){
未来响应=service.process();
}
}
@有状态
@TransactionAttribute(TransactionAttributeType.REQUIRED)
公共类EjbService{
@异步的
公共未来进程(){
//
}
}

问题是,如果用户在执行此异步调用期间终止web会话,事务会发生什么情况?

异步
@asynchronous
方法将创建一个新事务(即使类具有另一个属性,
TransactionAttribute Type.REQUIRED
仍将创建一个新事务)

现在,如果在
Future
中调用
get()
方法,线程将等待,直到计算结束时AsyncResult变为可用。之后,有状态可以执行超时,并将被容器销毁

如果只执行异步方法,而不执行
get()
-,则该方法将排队并进行处理,然后,同样的情况也适用于。。。有状态的被摧毁

专业提示:ejb容器在一定时间内维护完整异步调用的结果值(这一时间在规范中没有定义)

总之,由于发生了一个新的事务,并且控件立即返回给客户机(除非调用
get()
),因此在正常情况下,该事务会毫无例外地完成