gpt4 book ai didi

java - 如何将 Jersey beans 注入(inject) Weld 中的 Quartz 作业中?

转载 作者:行者123 更新时间:2023-12-01 05:19:09 24 4
gpt4 key购买 nike

我在 Glassfish 和 jetty-servlet 中都有一个纯 JAX-RS 应用程序。我正在尝试将一些 bean 注入(inject) Quartz 作业中。

我已经用 @javax.inject.Inject 注释了 Job 字段,但我也相信我需要使 Job 工厂可用于容器,反之亦然 - 我有点迷失在这里什么结果首先。

我该如何实现它?

最佳答案

嗨 Victor,如果没有关于您的应用程序的更多详细信息,我将假设您正在 servlet 容器中运行。使用“纯”JAX-RS 应用程序无法做到这一点。

但是我建议您使用 CDI(Weld 或 OpenWebBeans)。然后,您可以使用 Deltaspike 启用 Quartz 作业内的请求上下文,获取对请求作用域 bean 的引用。

在 servlet 容器中启用 Weld 非常好 simple

提供了有关在 HTTP 请求之外启用请求上下文的指南 here

默认情况下,您无法将 @RequestScoped beans 注入(inject)到您的quartz作业中(没有HTTP请求,因此没有请求上下文)。要解决此问题,您可以通过上面的链接启用请求上下文,或者(可能是我的方法)将 @Dependent 作用域 bean(完成工作)注入(inject) JAX RS bean(本质上是包装器),然后您可以轻松获取引用到您的quartz作业中的@Dependent作用域bean。

这是我的 web.xmlpom.xml要在jetty内运行Weld和Jersey,您将需要jetty-plus、jetty-jndi和Weld依赖项。

这里有一些 info关于在 jetty 中进行 JNDI 设置,但是我不使用此方法,因为我将 jetty 作为 SE 应用程序中的嵌入式容器启动,以下是我所做的代码片段:

String[] configurationClasses =
{
"org.eclipse.jetty.webapp.WebInfConfiguration",
"org.eclipse.jetty.webapp.WebXmlConfiguration",
"org.eclipse.jetty.webapp.MetaInfConfiguration",
"org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration"
};
WebAppContext webapp = new WebAppContext();
webapp.setConfigurationClasses(configurationClasses);
webapp.setDescriptor("/path/to/webapp/WEB-INF/web.xml");
webapp.setContextPath("/");
webapp.setResourceBase("/path/to/webapp");
webapp.setClassLoader(Thread.currentThread().getContextClassLoader());

关于java - 如何将 Jersey beans 注入(inject) Weld 中的 Quartz 作业中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10698503/

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