vin*_*ice 5 multithreading asynchronous jboss5.x jakarta-ee
我们有一个运行在JBoss EAP 5.1上的旧应用程序,并公开了一个调用长时间运行的 ejb 方法的 web 服务,所以我们想集成这个方法调用的简单异步管理,就像这样:
当客户端调用端点时方法,服务器立即返回一个 UUID,然后在单独的线程中调用业务逻辑方法。
在不使用 JMS 的情况下实现这一点的最佳方法是什么?
使用 EJB 3.1,您可以进行异步方法调用。如果您使用 Java 6 o 更高版本,一种可能是使用注释 @Asynchronous 来注释您的 ejb 业务方法。这样,当您从 Web 服务调用 ejb 时,ejb 容器将立即将控制权返回给 WS。
如果ejb方法返回一个值,事情可能会更复杂,您将需要定期检查执行状态并在完成后获取结果。如果这是您的场景,请记住调用异步方法的代码必须维护对 Future 对象的引用。
其他选项可能是创建一个执行 ejb 方法调用的新线程。从 JEE 7(JSR 236:并发实用程序)开始,就可以创建托管线程,它允许您以安全的方式在容器中运行新线程。