Jakarta ee AsyncResult可以被认为是可序列化的未来任务吗?
我不理解异步结果类的概念。 从中我了解到,它与FutureTask类一样工作(但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
@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