为什么javax.ejb.AsyncResult.isDone总是抛出异常?

问题描述 投票:3回答:3

我认为我误解了Java ee异步方法调用。我正在遵循此官员tutorial的想法。对于void方法,这很好,但是我希望我的异步方法返回一个值:

@Asynchronous
public Future<String> processPayment(Order order) {
    ...
    String status = ...;
    return new AsyncResult<String>(status);
}

我在后台有许多这样长时间运行的任务,因此我收集了List<Future<String>>并遍历它们以检查任务是否完成。我通过

进行此检查
for(Future<String> future: listOfFutures) {
    if(future.isDone())
       // do something
}

但是调用方法IllegalStateException:"Object does not represent an acutal Future"时,代码以AsyncResult.isDone()失败。

嗯,然后我读了this,这让我感到非常困惑:官方教程说“ Use AsyncResult.isDone()”检查异步方法的状态,而官方javadoc说“不敢使用AsyncResult.isDone()“] ..

我知道我可以将FutureTask<T>Callable<T>一起使用,但这是Java的一部分。

您能否解释一下是否可以使用java ee异步方法调用

谢谢!

P.S。我正在使用Glassfish 3.1.2和EJB 3.1]

我认为我误解了Java ee异步方法调用。我正在遵循此官方教程中的想法。对于void方法,这很好,但是我希望我的异步方法返回一个值:@ ...

java jakarta-ee asynchronous future
3个回答
1
投票

因此,您的问题是“是否可以使用java ee异步方法调用?”答案是


0
投票

如果使用Spring Framework,请使用


-1
投票

@@ Holger在某种意义上为我指明了正确的方向:在这种情况下,我的问题是Future的实现,AsyncResult。事实证明这很有趣。我查看了AsyncResult类代码,这就是我看到的内容:

© www.soinside.com 2019 - 2024. All rights reserved.