我在将@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的错误注入...
我确定问题出在我的ServiceBean的错误注入上
不。问题恰好与异常消息中所说的一样:
No active contexts for scope type javax.enterprise.context.RequestScoped
根本没有可用的请求范围。
请求范围仅适用于在HTTP请求创建的原始线程中运行的代码。但是您基本上是在这里创建一个新线程,该线程与HTTP请求创建的原始线程完全独立(异步!)运行。
将所需数据作为构造函数参数传递。
TestRunnable testRunnable = new TestRunnable(serviceBean);