gpt4 book ai didi

java - 从 JMS 监听器 onMessage() 提交时,批处理作业卡在 STARTING

转载 作者:行者123 更新时间:2023-11-30 10:28:04 27 4
gpt4 key购买 nike

我尝试根据 JSR 352 规范使用 JobOperator 在 JMS MessageListener 的 onMessage(...) 方法中从 BatchRuntime 获得。

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

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

从普通的 HttpServlet 开始同一个作业,它会立即运行到完成。为什么会这样?

最佳答案

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

批处理需要在托管线程上运行,以便 EE 上下文可用,这样用作批处理“线程池”的 ManagedExecutorService 等 EE API 才能正常运行。

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

关于java - 从 JMS 监听器 onMessage() 提交时,批处理作业卡在 STARTING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com