gpt4 book ai didi

java - EJB 异步调用不将控制权返回给调用者

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:50 25 4
gpt4 key购买 nike

我正在从另一个 EJB 调用异步 EJB 方法。此方法的负载很重(数据库操作),因此它应该将控制权返回给调用者并在单独的线程中执行业务。

根据 API,应该这样做:

远程接口(interface):

@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");
}
}

出于测试目的,我在异步方法内创建了一个无限循环。理论上,日志中应该出现“开始”-“结束”-“运行异步方法”但它永远不会到达“终点”。

我错过了什么吗?为什么对方法的调用没有将控件返回给调用者?

我正在使用 JBoss EAP 6.4 服务器。会不会是服务器端的配置问题?

最佳答案

您应该使用 ejb 接口(interface)注入(inject)。

@LocalBean
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEJBCaller {

@EJB
private MyEJBRemote myEJB;

public void request() throws RuntimeException {
logger.info("Begin");
myEJB.myMethod();
logger.info("End");
}
}

关于java - EJB 异步调用不将控制权返回给调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com