【问题标题】:Java batch - inject ejb to batchletJava批处理-将ejb注入batchlet
【发布时间】:2018-06-29 04:54:16
【问题描述】:

我有一个启动 bean。我想在这开始一些批处理工作。 我使用 @Nemed@Dependent 注释了 batchlet 类。我想在批处理中使用像 ReportService 这样的 ejb,但注入不起作用。如何将 EJB 注入到我的 batchlet? 我在 wildfly 11.0.0.Alpha1 上部署了以下示例,并在服务对象中获得了空引用。

批处理测试:

@Dependent
@Named("BatchletTest")
public class BatchletTest extends AbstractBatchlet{


    public BatchletTest() {
    }

    @Inject
    ReportService service;

    @Override
    public String process() throws Exception {
        System.out.println(service);
        return null;
    }
}

测试作业.xml

 <job id="test-job" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
        <step id="testStep">
            <batchlet ref="com.test.BatchletTest" />
        </step>
    </job>

StartupBean:

@Singleton
@Startup
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class StartupBean {

    private Logger logger = LoggerFactory.getLogger(StartupBean.class);

    @PostConstruct
    private void startup() throws Exception {
            long executionId = BatchRuntime.getJobOperator().start("test-job", new Properties());
            System.out.println("myJob started, execution ID = " + executionId);

    }

}

报告服务:

@Stateless
public class ReportService {
.....
}

【问题讨论】:

  • 哪个应用服务器和哪个版本?服务器日志中有任何警告和错误吗?日志中应该有一些与 CDI 注入相关的警告/错误。一种可能性是您将 FQCN 用作作业 xml 中的 bean ref,这可能会绕过 CDI 加载,从而使 {{service}} 注入字段超出 CDI 的范围。
  • 我部署在 wildfly 11.0.0.Alpha1 上。日志中没有错误。
  • 尝试使用 CDI bean 名称作为批处理工件 ref,以便 CDI 可以处理 ejb 注入到您的批处理类。

标签: ejb cdi java-batch jberet jbatch


【解决方案1】:

您没有在您的类 ReportService 上使用 @Local anntotaion 实现任何接口。

试试这个:

@Stateless
@LocalBean
public class ReportService {
.....
}

@Stateless
public class ReportService implements ReportServiceLocal{
.....
}

@Local
public interface ReportServiceLocal {
.....
}

请查看link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2020-03-25
    • 2014-04-25
    相关资源
    最近更新 更多