JEE 7 JSR 352将数据从batchlet传递到chunk-step

时间:2018-03-10 15:13:13

标签: java-ee-7 jsr352

我已阅读标准(和javadoc)但仍有一些问题。 我的用例很简单: 批处理从外部源获取数据并确认数据(意味着在确认后数据从外部源删除)。 在确认数据之前,批处理产生相关的输出(in-menory-object),该输出将被传递到下一个面向块的步骤。

问题:

1)在batchlet和chunk步骤之间传递数据的最佳做法是什么? 看来我可以通过调用jobContext #setTransientUserData来做到这一点 在批处理中,然后在我的块步骤中,我可以通过调用访问该数据 jobContext#getTransientUserData。

我知道jobContext和stepContext都是以threadlocal方式实现的。 让我担心的是“瞬态”部分。 如果批处理成功但我的块步失败会发生什么? “TransientUserData”数据是否仍然可用,或者如果重新启动作业/步骤,它是否会消失? 对于我的用例,重要的是批处理只运行一次。 因此,即使重新启动作业或块步骤,也必须保留成功运行的批处理的输出数据 - 否则必须再次使用批处理。 (我已经确认了数据,但它已经消失了 - 所以再一次运行批处理对我没用。)

2)跟进问题 在stepContext中有几个方法:getPersistentUserData和setPersistentUserData。 这些方法的用途是什么? “持久性”部分指的是什么? 这些方法仅与分区有关吗?

谢谢! /丹尼尔

1 个答案:

答案 0 :(得分:2)

瞬态用户数据只是暂时的,在作业重启期间不可用。作业重新启动可能发生在不同的进程或计算机上,因此用户无法依赖重新启动时可用的先前运行的作业瞬态。

步骤持久性用户数据是批处理作业开发人员认为为了重新启动,监视或审计而需要保存/保留的那些应用程序数据。它们将在重新启动时可用,但它们通常作用于当前步骤(而不是跨步骤)。

通过阅读您的简短描述,我感觉您的两个步骤过于紧密耦合,您几乎可以将它们视为一个单独的工作单元。您希望它们成功或两者都失败,以保持应用程序状态的完整性。我认为这可能是问题的根源。