首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与RequestScope链接的本地线程

与RequestScope链接的本地线程
EN

Stack Overflow用户
提问于 2016-01-15 16:29:57
回答 1查看 1.5K关注 0票数 0

我有一个使用VRaptor构建的web服务,它使用CDI (焊缝2.1.2.Final)。我需要并行一些由服务器进行的处理(工业警报的统计分析)。我使用的是ExecutorService和可调用实例,不幸的是,我需要线程中的一个请求作用域依赖。由于这种依赖,我面临着这样的错误:

代码语言:javascript
复制
WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped

有没有一种方法可以将线程链接到使用CDI创建它们的请求?

*我知道我不应该在服务器中打开线程,但这是目前最可行的选择

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-17 09:26:09

将其作为可调用的构造函数参数传递。

代码语言:javascript
复制
public class YourTask implements Callable<String> {

    private YourData data;

    public YourTask(YourData data) {
        this.data = data;
    }

    @Override
    public String call() {
        // Just use data.
    }

}

代码语言:javascript
复制
@Inject
private YourRequestScopedBean bean;

public void submit() {
    YourTask task = new YourTask(bean.getData());
    // ...
}

注意:不要传递bean本身,因为它基本上是一个proxy,它的实例在其他线程中不存在。

另请参阅:

与具体问题无关的(手工管理Java容器中的线程),即使是通过适当编程的ExecutorService完成的,也会受到反对。这表明您不知道Java的EJB调度和计时器API的可能性。您可能会发现这个答案中的示例很有用:Is it safe to start a new thread in a JSF managed bean?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34815608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档