检查点算法

网格端点 使用检查点算法来确定何时落实调用批处理步骤的全局事务。 这些算法通过 XML 作业控制语言 (xJCL) 定义应用于批处理作业。 为 xJCL 中检查点算法指定的属性允许为批处理步骤定制检查点行为(例如事务超时和检查点时间间隔)。 此产品提供基于时间的检查点算法以及基于记录的算法,并定义服务提供者接口 (SPI) 以构建其他定制检查点算法。

在 processJobStep 方法的每个批处理步骤迭代上,公共批处理容器会查阅应用于此步骤的检查点算法以了解它是否落实了全局事务。 针对检查点算法的回调方法使公共批处理容器可以通知算法何时落实或启动全局事务。 此行为使该算法可跟踪全局事务生命周期。 在 processJobStep 方法的每个迭代上,公共批处理容器会针对算法调用 ShouldCheckpointBeExecuted 回调方法,以确定是否落实了事务。 该算法通过此方法控制检查点时间间隔。

查看文档参考部分中检查点算法 SPI 的批处理 API ,以获取可用于创建定制检查点算法的检查点算法 SPI。 类名为 com.ibm.wsspi.batch.CheckpointPolicyAlgorithm。

此产品支持两种检查点算法:基于时间的算法和基于记录的算法。 在以下部分中说明了这两种算法。

基于时间的算法

基于时间的检查点算法在指定时间间隔落实全局事务。 以下示例在 xJCL 中声明基于时间的算法:
<checkpoint-algorithm name="timebased">
     <classname>com.ibm.wsspi.batch.checkpointalgorithms.timebased</classname>
     <props>
           <prop name="interval" value="15" />
           <prop name="TransactionTimeOut" value="30" />
     </props>
</checkpoint-algorithm>

在先前示例中,时间间隔和 TransactionTimeOut 属性的单位以秒表示。

基于记录的算法

基于记录的检查点算法按批处理步骤的 processJobStep 方法的指定迭代数落实全局事务。 每个对 processJobStep 方法的调用会被视为迭代一个记录。 processJobStep 方法可针对每个调用从批处理数据流检索多个记录。 但是,针对此检查点算法,一个记录等于 processJobStep 方法的一个调用。

以下示例在 xJCL 中声明基于记录的算法:
<checkpoint-algorithm name="recordbased">
     <classname>com.ibm.wsspi.batch.checkpointalgorithms.recordbased</classname>
     <props>
           <prop name="recordcount" value="1000" />
           <prop name="TransactionTimeOut" value="60" />
     </props>
</checkpoint-algorithm>

在先前示例中,TransactionTimeOut 属性的单位以秒表示。

如果未以 xJCL 指定,那么缺省事务超时为 60 秒,缺省记录计数为 10000。

将检查点算法应用到批处理步骤

检查点算法通过 xJCL 应用到批处理作业。 可以在 xJCL 中声明多个检查点算法,可以将不同算法应用于每个批处理步骤。 针对一个批处理步骤,仅可向其应用一个检查点算法。

以下示例在 xJCL 中应用检查点算法:

<job name="PostingsSampleEar">

<checkpoint-algorithm name="timebased">
     <classname>com.ibm.wsspi.batch.checkpointalgorithms.timebased</classname>	
     <props>
           <prop name="interval" value="15" />
           <prop name=" TransactionTimeOut" value="30" />
     </props>
</checkpoint-algorithm>

<checkpoint-algorithm name="recordbased">
     <classname>com.ibm.wsspi.batch.checkpointalgorithms.recordbased</classname>
     <props>
           <prop name="recordcount" value="1000" />
           <prop name="TransactionTimeOut" value="60" />
     </props>
</checkpoint-algorithm>

<job-step name="Step1">
     <checkpoint-algorithm-ref name="timebased" />
</job-step>

<job-step name="Step2">
     <checkpoint-algorithm-ref name="recordbased" />
</job-step>
</job>