Java EE 5 - 如何在没有 JMS 的情况下实现异步方法调用

vin*_*ice 5 multithreading asynchronous jboss5.x jakarta-ee

我们有一个运行在JBoss EAP 5.1上的旧应用程序,并公开了一个调用长时间运行的 ejb 方法的 web 服务,所以我们想集成这个方法调用的简单异步管理,就像这样:
当客户端调用端点时方法,服务器立即返回一个 UUID,然后在单独的线程中调用业务逻辑方法。
不使用 JMS 的情况下实现这一点的最佳方法是什么?

Gab*_*uru 0

使用 EJB 3.1,您可以进行异步方法调用。如果您使用 Java 6 o 更高版本,一种可能是使用注释 @Asynchronous 来注释您的 ejb 业务方法。这样,当您从 Web 服务调用 ejb 时,ejb 容器将立即将控制权返回给 WS。

如果ejb方法返回一个值,事情可能会更复杂,您将需要定期检查执行状态并在完成后获取结果。如果这是您的场景,请记住调用异步方法的代码必须维护对 Future 对象的引用。

其他选项可能是创建一个执行 ejb 方法调用的新线程。从 JEE 7(JSR 236:并发实用程序)开始,就可以创建托管线程,它允许您以安全的方式在容器中运行新线程。

  • 注释 _javax.ejb.Asynchronous_ 属于 JavaEE 6,JBoss EAP 5.1 不支持它,[请参阅此表](https://access.redhat.com/site/articles/113373) (2认同)