当前位置: 首页 > 知识库问答 >
问题:

将@RequestScope Bean注入可运行类

凌伟泽
2023-03-14

我有一个问题与注入@quiestScopedBean到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;
    }
}

当我尝试连接到endpoint时,会出现以下错误?

WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped

我确信问题在于错误地注入了我的ServiceBean。。。

共有1个答案

仰欣悦
2023-03-14

我确信问题在于错误地注入了我的ServiceBean

不。问题正是异常消息所说的:

No active contexts for scope type javax.enterprise.context.RequestScoped

根本没有可用的请求范围。

请求范围仅对在HTTP请求创建的原始线程中运行的代码可用。但您现在基本上是在创建一个完全独立(异步)运行的新线程来自HTTP请求创建的原始线程。

将请求范围中的所需数据作为构造函数参数传递。

TestRunnable testRunnable = new TestRunnable(serviceBean);

或者更好的是,将process()逻辑移到TestRunnable本身。

TestRunnable testRunnable = new TestRunnable(id);
 类似资料:
  • 问题内容: 我正在开发应用程序(用C ++编写),该应用程序在运行时会生成一些机器代码(现在是Linux,x86-64,但我计划在ARM上迁移)。接下来,它将生成的代码存储在内存中,并通过跳转到内存位置来执行它。长期以来,我在分配可执行内存方面遇到问题,但最终我使用以下方法解决了问题: 到目前为止,它是可行的,但是我不确定这是否是执行此类操作的优雅方法。我想知道可执行加载程序是如何做到的? 问题答

  • 出于测试的目的,有时我想看看我的代码是如何处理从代码的各个部分引发的意外运行时异常的。 有没有一种方法可以让我在调用这个方法时引发一个异常而不是返回一个有效的结果来导致它失败?我知道我可以添加显式代码来实现这一点,但我想知道是否可以用一个在运行时抛出异常的新方法替换任何类中的方法,或类似的方法;-)类似于Mockito如何执行以下操作: 我希望任何解决方案都不需要任何额外的工具--只需要标准的JV

  • 问题内容: 有什么方法可以在运行时将新的方法和属性注入到类中。 http://nurkiewicz.blogspot.com/2009/09/injecting-methods-at-runtime-to- java.html 指出我们可以使用Groovy做到这一点。 仅使用Java就能做到吗? 问题答案: 仅使用Java就能做到吗? 简单的答案是强调“您不想这样做!”。 从技术上讲,这是可能的,

  • 我尝试了,,和组合,但没有任何效果@注入失败maven quarkus插件构建: [错误]原因:javax。企业注射UnsatisfiedSolutionException:javax类型的未满足依赖关系。坚持不懈EntityManager和限定符[@Default] 我尝试了使用和不使用persistence.xml.我的数据源和application.properties工作正常,因为我可以注

  • 我有一个叫做srxCOM的dll。用于titan FTP的dll,此dll是为VB6制作的。我想在Visual Studio中使用dll。NET,所以我使用tblimp创建了一个运行时可调用的包装器,并将其命名为srxCOMnet。dll。我在VS项目中添加了dll作为参考,可以访问其中的函数。在创建项目时,我遇到了这个错误, 错误:CLSID{A82C6CF0-7B42-4ABD-AECB-98

  • 问题内容: 我在我的angular应用程序中使用angular-route-segment,试图从json feed配置这些段。 我对此有问题,因为我不知道如何注入该函数。这失败了 因此,而不是注入$ HTTP到的,我也尝试注入到 我也试过 但我明白了 问题答案: 提供程序只能在“配置”阶段注入,而不能在“运行”阶段注入。相反,诸如$ http之类的服务尚未在“配置”阶段初始化,而仅在“运行”阶段