Java 石英作业中的RequestedScope

Java 石英作业中的RequestedScope,java,quartz-scheduler,cdi,Java,Quartz Scheduler,Cdi,我正在尝试在Quartz作业中使用RequestedScope bean,请参见: public class JobRoboFtp implements Job { @Inject private AcervoVideoService acervoVideoService; @Inject private ConfiguracaoService configuracaoService; @Inject private FtpManager f

我正在尝试在Quartz作业中使用RequestedScope bean,请参见:

public class JobRoboFtp implements Job {

    @Inject
    private AcervoVideoService acervoVideoService;

    @Inject
    private ConfiguracaoService configuracaoService;

    @Inject
    private FtpManager ftpManager;
但我总是:

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

好的,如果我将此服务更改为@Dependent scope,一切都可以工作,但我希望使用RequestedScope。有什么办法吗?

既然您没有对版本说太多,我将假设Weld 2.x(甚至3.x)的一些最新版本,那么有一种办法。我还假设您谈论的是SE环境,否则请求范围将在请求期间自动激活

如果我们谈论的是CDI1.2(Weld 2.x),那么您需要添加对Weld API的显式依赖并利用它。依赖项是org.jboss.weld:weld api,您正在寻找的功能是。如果您正在查找指向Weld文档的链接,请注意,这是在Weld 2.4中添加的

原理很简单——它在进入方法时拦截方法调用和激活的上下文,然后在退出方法时销毁它

@ActivateRequestContext
public void myMethod() {
  // any content in here will have request context ACTIVE
  doAwesomeThings();
}
如果我们谈论的是CDI2.0/Weld 3.x,那么CDI也采用了同样的方法(Weld版本也适用于此)。你可以读到它