Jakarta ee AsyncResult可以被认为是可序列化的未来任务吗?

Jakarta ee AsyncResult可以被认为是可序列化的未来任务吗?,jakarta-ee,java-ee-6,Jakarta Ee,Java Ee 6,我不理解异步结果类的概念。 从中我了解到,它与FutureTask类一样工作(但AsyncResult是可序列化的,因此可以发送到本地或远程客户端)。 但是,表示不应调用此类的方法,因此我只能创建并返回此类的实例: @Asynchronous public Future<String> processPayment(Order order) throws PaymentException { ... String status = ...; return new Asyn

我不理解异步结果类的概念。 从中我了解到,它与FutureTask类一样工作(但AsyncResult是可序列化的,因此可以发送到本地或远程客户端)。 但是,表示不应调用此类的方法,因此我只能创建并返回此类的实例:

@Asynchronous
public Future<String> processPayment(Order order) throws PaymentException {
  ...
  String status = ...;
  return new AsyncResult<String>(status);
}
异步的 public Future processPayment(订单)抛出PaymentException{ ... 字符串状态=。。。; 返回新的异步结果(状态); } 那么,客户端将得到什么样的对象呢

我可以写信吗

@Asynchronous
public  AsyncResult<String> processPayment...
异步的 公共结果处理支付。。。

在调用AsyncResult/Future的
cancel(false)
方法之后,容器会取消异步任务吗

编辑:
我已经找到了答案。

您可以在AsyncResult类文档中找到基本原理:

请注意,此对象不会传递给客户端。这只不过是一个例子 方便地向容器提供结果值。 因此,它的任何实例方法都不应由 应用程序

使用第一个代码段中定义的(正确的)签名,客户端将收到一个简单的未来,如下所示:

@Singleton
public class AsyncClient{
   @Inject PaymentProcessor proc;
   public String invokePaymentProcessor(Order order){
         Future<String> result=proc.processPayment(order);
         // should not block.... the container instantiates a Future and 
         // returns it immediately
         return result.get(); // gets the string (blocks until received)
   }

}
@Singleton
公共类异步客户端{
@注入PaymentProcessor进程;
公共字符串invokePaymentProcessor(订单){
未来结果=过程处理付款(订单);
//不应阻止…容器实例化未来和
//立即归还
return result.get();//获取字符串(直到收到为止)
}
}

当然,如果容器尚未开始方法调用(即异步调用仍在processig队列中),
cancel(false)
应该取消调用(将其从队列中删除),否则应该指定
cancel(true)
并在
PaymentProcessor.processPayment的最终处理循环中选中
SessionContext.was Cancelled
,您可以在AsyncResult类文档中找到基本原理:

请注意,此对象不会传递给客户端。这只不过是一个例子 方便地向容器提供结果值。 因此,它的任何实例方法都不应由 应用程序

使用第一个代码段中定义的(正确的)签名,客户端将收到一个简单的未来,如下所示:

@Singleton
public class AsyncClient{
   @Inject PaymentProcessor proc;
   public String invokePaymentProcessor(Order order){
         Future<String> result=proc.processPayment(order);
         // should not block.... the container instantiates a Future and 
         // returns it immediately
         return result.get(); // gets the string (blocks until received)
   }

}
@Singleton
公共类异步客户端{
@注入PaymentProcessor进程;
公共字符串invokePaymentProcessor(订单){
未来结果=过程处理付款(订单);
//不应阻止…容器实例化未来和
//立即归还
return result.get();//获取字符串(直到收到为止)
}
}
当然,如果容器尚未开始方法调用(即异步调用仍在processig队列中),
cancel(false)
应该取消调用(将其从队列中删除),否则应该指定
cancel(true)
并在
PaymentProcessor.processPayment