Java バッチのパーシスタンス構成

Java™ バッチは、パーシスタント・ストアを使用して、ジョブ・インスタンスの複数回の実行にわたって状況、チェックポイント、およびアプリケーション・パーシスタント・データを保持するようにジョブ・リポジトリーを構成できます。 パーシスタント・ストアにより、前の実行が失敗した場合、または前の実行を停止しなければならない場合に、再開されるジョブに該当するデータを提供して、ジョブ・インスタンスを再開できます。

ジョブ・リポジトリー

ジョブ・リポジトリーは、データベースによってサポートされるパーシスタント・ストア、または、開発目的にのみ使用されるメモリー・ベースのパーシスタント・ストアのいずれかを含みます。 Liberty バッチ機能を使用すると、複数のサーバーが共通のパーシスタント・ストアまたはジョブ・リポジトリーを使用できる環境を柔軟に定義できます。 多くの機能の有効範囲が、同じジョブ・リポジトリーを使用するように構成されたすべてのサーバーであることを理解しておくことは重要です。 詳しくは、 ジョブ・リポジトリーを参照してください。

Java バッチのメモリー・ベースのパーシスタンス構成

バッチのパーシスタンスにより、ジョブ・インスタンスが FAILED または STOPPED 状態で終了しても、その実行を再開できます。 バッチ・パーシスタンス用のデータベース構成がない場合、Java バッチはデフォルトでメモリー・ベースのパーシスタンスになり、ジョブ・インスタンスの複数回の実行にわたって状況、チェックポイント、およびアプリケーション永続データを追跡します。

注: デフォルトのメモリー・ベースのパーシスタンスには、明確ですが重要な制限があります。  バッチ・コンテナー・ランタイム環境またはサーバー JVM が異常終了または再始動した場合、パーシスタンスは失われます。この機能は開発用のみであり、実動システムや重要なバッチ処理のサポート用に使用してはなりません。

Java バッチのデータベース・パーシスタンス構成

バッチのパーシスタンスをデータベース・ストアを通して構成できます。 データベース・ストアはデータ・ソースを参照し、そのデータ・ソースは、JDBC ドライバー、具体的なデータベース・ロケーション、およびその他のデータベース・カスタム・プロパティーを参照します。 バッチ・パーシスタンス表の修飾名は、データベース・ストア自体の schema 属性および tablePrefix 属性を使用して構成できます。

defaultDatabaseStore という名前のデフォルトのデータベース・ストアが提供されていて、DefaultDataSource という名前のデフォルトのデータ・ソースを構成することによってアクティブになります。

または、 databaseStore エレメントを使用して別のデータベース・ストアを構成し、以下を追加してそのデータベース・ストアを使用するようにバッチ・パーシスタンスを構成することができます。

databaseStoreを参照する jobStoreRef 属性を持つ batchPersistence エレメント。

Java バッチ・データベース接続プーリングに関する考慮事項

通常、Java バッチ・ランタイムは、データベースに対して呼び出しが行われたときに get-use-close パターンに従い、通常、 JDBC 接続を使用している時間より長く保持しません。これは、特定の数のジョブおよびパーティションを 1 つのサーバー上で実行するために必要な接続の数についての問題は、ほぼ完全に管理者の判断に任せられることを意味します。

デッドロックを回避するために、接続プールのサイズを、稼働中のジョブおよびパーティションの数以上に構成する必要はありません。 接続が少なすぎることが原因のリソース競合があっても、準最適パフォーマンスは達成できます。 バッチ・コンポーネントのアクティブ化など、特殊なパスを実行する場合は、必要な接続の最小数 (おそらく 1 より大きい数) が存在することもあります。 管理者は、デフォルト値から始めて、接続プールのメトリックおよびモニタリングを使用して、例えば、パフォーマンスとリソース消費のバランスを取ることができます。 これは、JDBC 接続のランタイム使用量に適用されます。 アプリケーション・コードによって JDBC 接続プールが使用されるため、管理者が JDBC 接続プールについて考慮する必要がある場合があります。

データベース表の自動作成と手動作成

デフォルトでは、バッチ・ランタイムは、バッチ・パーシスタンス・データベース・ストアに、存在しない表を自動作成します。 また、このデフォルトの自動作成動作は、新規列定義に関与するメンテナンスが適用された場合は、既存表を拡張し、新規列を作成します。

代わりに、ddlGen スクリプトを使用して、サーバー構成に基づいて DDL を生成することができます。 必要に応じて、手動で表を作成する前に DDL をカスタマイズすることができます。 この DDL は、schematablePrefix などのサーバー構成も取り込み、データベース・ストアによって参照されているデータ・ソースのデータベース・タイプに該当する SQL を含みます。

注: カスタマイズされた DDL では、正整数の主キー ID を使用する必要があります。 データベース・パーシスタンスの制限として、 Java バッチは、1 次キー ID 列に永続的に保持される ID として負およびゼロの整数を受け入れません。 Java バッチ・コンテナー・ランタイムは、 1 次キー ID 列に永続的に保持される正整数のジョブ ID を使用するジョブのみを実行します。

表の自動作成を無効にするには、databaseStore で createTables="false" 属性を使用します。 このオプションを使用して、手動で作成した表をバッチ・ランタイムが予期せず検出できなかった場合でも、自動作成された表を使用するのではなく、手動で作成された表を確実に使用できます。

生成された DDL をカスタマイズして表を手動で作成する方法 (可能なカスタマイズを含む) については、ホワイト・ペーパー「 Liberty Batch-Job Repository Configuration 」を参照してください。 このホワイト・ペーパーは z/OS® オペレーティング・システム上の DB2® に関するものですが、他のデータベースやプラットフォームに役立つ情報が記載されている場合があります。

パーシスタンス構成のサンプル

Derby データベース RUNTIMEDB を使用して構成された自動作成された表がある、デフォルトのデータベース・ストア:

<!-- Derby JDBC driver --> 
<library id="DerbyLib"> 
    <fileset dir="${server.config.dir}/resources/derby" /> 
</library> 

<!-- Data source for batch tables, and possibly other components. --> 
<dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    <properties.derby.embedded  
        databaseName="${server.config.dir}/resources/RUNTIMEDB"     
        createDatabase="create" 
        user="user" password="pass" /> 
</dataSource> 

手動で作成された表、カスタム・スキーマ、表プレフィックス、バッチ・データ・ソースがある、バッチ固有のデータベース・ストア:

<batchPersistence jobStoreRef="BatchDatabaseStore"/>

<!-- DB Store config only used by batch components -->
<databaseStore id="BatchDatabaseStore" dataSourceRef="BatchDS"
    createTables="false" schema="HLQ" tablePrefix="JB1"/> 

<!-- Data source for batch tables --> 
<dataSource id="BatchDS"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
     ...
</dataSource> 

認証構成、カスタム・スキーマ、自動作成された表、デフォルトのデータ・ソースがある、デフォルトのデータベース・ストア:

<!-- DB Store used by batch and possibly other runtime components. --> 
<databaseStore id="defaultDatabaseStore" schema="HLQ">
    <authData user="user1" password="password1"/>  
</databaseStore>

<!-- Data source for batch tables, and possibly other components. --> <dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    ...
</dataSource> 

参照

生成された DDL をカスタマイズして表を手動で作成する方法 (可能なカスタマイズを含む) については、ホワイト・ペーパー https://www.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP102716 を参照してください。