Java バッチのパーシスタンス構成
Java™ バッチでは、パーシスタント・ストアを使用して状況、特定のジョブ・インスタンスの複数回の実行をまたいでチェックポイント、およびアプリケーション・パーシスタント・データを永続化します。パーシスタント・ストアにより、前の実行が失敗した場合、または前の実行を停止しなければならない場合に、再開されるジョブに該当するデータを提供して、ジョブ・インスタンスを再開できます。
Java バッチのメモリー・ベースのパーシスタンス構成
バッチのパーシスタンスにより、ジョブ・インスタンスが FAILED または STOPPED 状態で終了しても、その実行を再開できます。バッチのパーシスタンスのためのデータベース構成がない場合、Java バッチでは、特定のジョブ・インスタンスの複数回の実行をまたいで、状況、チェックポイント、およびアプリケーション・パーシスタント・データを追跡するように、メモリー・ベースのパーシスタンスがデフォルト設定されます。
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 は、schema や tablePrefix などのサーバー構成も取り込み、データベース・ストアによって参照されているデータ・ソースのデータベース・タイプに該当する SQL を含みます。
表の自動作成を無効にするには、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 を参照してください。