1

在批处理项目中,我需要在处理之前从数据库中加载一些参考数据。我试图通过在 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 !

}

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

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

谢谢

4

1 回答 1

0

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

于 2020-12-09T22:22:25.373 回答