2

我正在尝试根据 JSR 352 规范使用JobOperator从 BatchRuntime 获得onMessage(...)的 JMS MessageListener 中的方法启动批处理作业。

JobOperator jobOperator = BatchRuntime.getJobOperator();
Properties props = new Properties();
props.setProperty("sourceFile", "data_file.csv");
jobOperator.start("batchTask", props);

结果是作业执行卡在STARTING。当我尝试从同一个线程停止任务时,它同样卡在 STOPPING。

从平原开始相同的工作,HttpServlet它会立即运行到完成。为什么会这样?

4

1 回答 1

1

您应该使用 MDB 在 EE 应用程序服务器中使用 JMS 消息,而不是您自己的 MessageListener。(见这里。)

批处理需要在托管线程上运行,以便 EE 上下文可用,以便 EE API(例如用作批处理“线程池”的ManagedExecutorService)能够正常运行。

使用非托管线程时,除了批处理(以及可能的其他应用程序服务器功能)之外,其他 EE API 也会存在潜在问题,这就是为什么 MDB 是这里的必要方法的原因。

于 2017-07-03T15:54:22.953 回答