【发布时间】:2020-01-03 10:58:59
【问题描述】:
我在将@RequestScoped Bean 注入Runnable 类时遇到问题。
这是我的资源类
@ApplicationScoped
@Path("/process")
public class TestResource {
private static ExecutorService executor = Executors.newFixedThreadPool(20);
@POST
public void process(Integer id, @Suspended AsyncResponse ar) {
TestRunnable testRunnable = new TestRunnable();
testRunnable.setId(id);
executor.execute(() -> {
testRunnable.run();
ar.resume("OK");
});
}
这是我的 TestRunnable 类:
public class TestRunnable implements Runnable {
private Integer id;
private ServiceBean serviceBean;
public void asyncProcess() {
serviceBean = CDI.current().select(ServiceBean.class).get();
serviceBean.process(id);
}
@Override
public void run() {
asyncProcess();
}
public void setId(Integer id) {
this.id = id;
}
}
当我尝试连接到端点时出现以下错误?
WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
我确定问题出在我的 ServiceBean 注入错误...
【问题讨论】:
-
如果您从语句
testRunnable.run();中得到此异常并且您在相当新的应用程序服务器上运行,您可以尝试注入ManagedExecutorService,而不是创建自己的:@Resource ManagedExecutorService executor。其余代码保持不变。如果这对您有用,您甚至可以配置应用程序服务器以生成自定义的ManagedExecutorService(例如,具有 20 个线程)。
标签: jakarta-ee cdi