【问题标题】:JSR 352 - Java batch - Cannot inject service bean or DAO in listener artifactsJSR 352 - Java 批处理 - 无法在侦听器工件中注入服务 bean 或 DAO
【发布时间】:2020-12-09 21:28:04
【问题描述】:

在批处理项目中,我需要在处理之前从数据库中加载一些参考数据。 我试图通过在 JobListener 中注入服务 bean 并在“beforeJob”方法中加载数据来做到这一点,但 serviceBean 始终为空。

public interface ServiceBean extends Serializable { ... }

@Stateless
@Named
public class ServiceBeanImpl implements ServiceBean { ... }

@Named
//@Dependent <- Tried adding this
public class CollectJobListener extends AbstractJobListener {

   @Inject JobContext jobContext;

   @Inject 
   private ServiceBean serviceBean; // Always NULL

   @Override
   public void beforeJob() throws Exception {...}

}

我尝试了多种类型的侦听器(块、进程、写入侦听器),但结果始终相同。

如果我在“主要”工件(读取器、处理器、写入器)中进行注入,则注入工作正常。

@Named
@Dependent
public class MyItemWriter extends AbstractItemWriter {

    @Inject 
    private ServiceBean serviceBean; // Works !

}

关于我如何让它发挥作用的任何想法?

或者我应该只在主要工件之一中完成我的设置工作?

谢谢

【问题讨论】:

    标签: dependency-injection cdi jsr352 jberet


    【解决方案1】:

    如果您使用的是 WildFly(其中包括 JBeret 作为其批处理容器),它应该可以工作。将 bean 注入任何批处理工件(包括批处理侦听器)应该以相同的方式工作。如果问题仍然存在,请提交WildFly JIRA issue

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多