【发布时间】:2017-01-31 19:51:36
【问题描述】:
我正在从另一个 EJB 调用异步 EJB 方法。 此方法负载很重(数据库操作),因此它应该将控制权返回给调用者并在单独的线程中执行业务。
根据API,应该是这样的:
远程接口:
@Remote
public interface MyEJBRemote {
@Asynchronous
void myMethod() throws RuntimeException;
}
EJB 类:
@LocalBean
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEJB implements MyEJBRemote {
@Override
public void myMethod() throws RuntimeException {
//for testing
while (true){
Thread.sleep(5000);
logger.info("Running asynchronous method");
}
//Method code here
}
}
来电代码:
@LocalBean
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEJBCaller {
@EJB
private MyEJB myEJB;
public void request() throws RuntimeException {
logger.info("Begin");
myEJB.myMethod();
logger.info("End");
}
}
出于测试目的,我在异步方法中创建了一个无限循环。 理论上应该在日志中出现“Begin”-“End”-“Running asynchronous method” 但它永远不会到达“终点”。
我错过了什么?为什么对方法的调用没有将控件返回给调用者?
我正在使用 JBoss EAP 6.4 服务器。会不会是服务器端的配置问题?
【问题讨论】:
标签: java asynchronous jboss