在石英作业中注入 DAO 和工厂



i 有一份既需要 DAO 又需要 1 个工厂类的工作 像这样的东西

https://pastebin.com/kK7VcbW1

我的问题是如何注入它们,当代码到达 Factory 类中的 dao 调用getSomething时,我会收到此异常

在抽象的道中,我从@ApplicationScoped EnttityManagerProducer得到的@Inject entityManager它的getEntityManager@RequestScoped

org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:691)
at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:89)
at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:164)
at org.jboss.weld.bean.ContextualInstance.getIfExists(ContextualInstance.java:63)
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:83)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
at org.jboss.weldx.persistence.EntityManager$1070085530$Proxy$_$$_WeldClientProxy.createQuery(Unknown Source)
at com.org.dao.impl.ConcreteDAOImpl.getByName(ConcreteDAOImpl.java:18)
at com.org.dao.impl.ConcreteDAOImp$Proxy$_$$_WeldClientProxy.getByName(Unknown Source)
at com.org.FactoryImpl.getObj(FactoryImpl.java:33)

(为了示例,我替换了真正的类(

我尝试将注释放在类和接口级别,我不知道哪个是可推荐

这种类型的功能是Apache Deltaspike内置的,你可以阅读调度程序模块。 正如你所提到的问题是,默认情况下,上下文在Java EE之外不会自动启动。 为此,您需要手动启动一个。 在 CDI 2.0 中,这可以通过将@ActivateRequestContext添加到方法/类来完成,并且请求范围将在该方法的持续时间内启动。

在CDI 2.0之前,其特定于平台。 DeltaSpike更干净地解决了这个问题。

最新更新