この章では、WebLogic Serverパーティションでバッチ・ランタイムを構成する方法について説明します。この章の説明に従い、WLS管理コンソールまたはWLSTを使用して、パーティション・レベルのバッチ・ジョブ・ランタイムを構成できます。
バッチ・ジョブは、ユーザー対話なしで実行できるタスクであり、非対話型でバルク指向の長時間実行タスクに最も適しています(これらのタスクは、リソース消費型で、順次実行またはパラレル実行が可能であり、アドホックに開始するか、スケジュールを使用して開始できます)。
WebLogic Serverでは、パーティションを対象とするバッチ・ランタイムがサポートされています。パーティションでバッチ・ランタイムを使用するには、バッチ・ジョブ用のJobRepository表にアクセスするために、パーティションごとに専用のデータ・ソースを構成する必要があります。パーティションにデプロイされたJava EEコンポーネントがバッチ・ジョブを発行すると、バッチ・ランタイムがこのデータ・ソースを使用してJobRepository表を更新します。
オプションで、パーティション・バッチ・ランタイムを構成して、ドメイン・レベルでパーティションを対象としたMESテンプレートを構成することによって、アプリケーション・スコープの管理対象エグゼキュータ・サービス(MES)を使用できます。MESによってジョブが非同期的に処理されて、JobRepositoryデータ・ソースに現在および過去のジョブのステータスが格納されます。ただし、パーティションをターゲットにしているMESテンプレートがない場合、バッチ・ランタイムは、Java EE 7の仕様に従って、デフォルトのJNDI名(java:comp/DefaultManagedExecutorService
)にバインドされたMESを使用します。
JobRepository表の作成手順など、ドメイン・スコープのバッチ・ランタイムの作成および管理の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のバッチ・ランタイムの構成に関する項を参照してください。
バッチ・ジョブ、バッチ処理およびバッチ処理フレームワークの詳細は、Java EE 7チュートリアルのバッチ処理に関する項を参照してください。「Java Specification Request 352: Batch Applications for the Java Platform」(http://jcp.org/en/jsr/detail?id=352)も参照してください。仕様により、バッチ・アプリケーションのプログラミング・モデルと、バッチ・ジョブのスケジュールおよび実行のランタイムが定義されます。
パーティションでバッチ・ランタイムを構成するには、次の手順を実行する必要があります。
必要に応じて、バッチ・ジョブを格納するJobRepository表を作成します。
パーティションのJDBCデータ・ソースを構成します。
オプションで、MESテンプレートを作成し、それをパーティションにターゲット設定します。
WLS管理コンソールまたはWLSTを使用して、パーティション・バッチ・ランタイムを構成します。
パーティションでバッチ・ランタイムを構成するには、ドメイン・レベルで次の前提条件を満たす必要があります。
JobRepository表が存在している - バッチ・ランタイムでJobRepository表が自動的に作成されることはありません。パーティションをアクティブ化する前に、DB管理者が表を作成する必要があります。
JobRepository表の構成の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のバッチ・ランタイムの構成に関する項を参照してください。
JobRepository表を格納するためのサポートされているデータベースの詳細は、Oracle Technology NetworkにあるOracle Fusion Middlewareのサポートされるシステム構成ページを参照してください。
パーティションのJDBCデータ・ソースを構成する - 各パーティションには、バッチ・ジョブ用に作成される専用のJDBCデータ・ソースが必要です。バッチ・データ・ソースのJNDI名は、PartitionMBean.setBatchJobsDataSourceJndiName
を使用して設定する必要があります。Java EEコンポーネントがバッチ・ジョブを発行すると、バッチ・ランタイムは、データ・ソースのJNDI名の参照により取得されるこのデータ・ソースを使用してJobRepository表を更新します。
JDBCデータ・ソースの構成の詳細は、『Oracle WebLogic Server JDBCデータ・ソースの管理』のJDBCデータ・ソースの作成に関する項を参照してください。
オプションで、MESテンプレートを作成する - 最適なパフォーマンスを得るため、パーティションのバッチ・ランタイムを構成して、ドメイン・レベルでパーティションを対象としたMESテンプレートを構成することによって、アプリケーション・スコープのMESを使用できます。これにより、MESテンプレートごとに新しいMESインスタンスが作成され、パーティションにデプロイされたJava EEコンポーネントに対して発行されるバッチ・ジョブが実行されます。
ただし、名前が設定されていない場合、バッチ・ランタイムは、デフォルトのJNDI名(java:comp/DefaultManagedExecutorService
)にバインドされたデフォルトのJava EE MESを使用します。
MESテンプレートの構成の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のグローバルCMOテンプレートに関する項を参照してください。
WLS管理コンソールを使用して、パーティションごとに専用のバッチ・ランタイムを構成できます。「partition-nameの設定」ページで、パーティションの「構成」→「一般」ページを開き、次の構成フィールドを入力します。
エグゼキュータ・サービス・テンプレート - パーティションにデプロイされたアプリケーションから発行されるバッチ・ジョブの実行に使用されるアプリケーション・スコープのMESインスタンスの名前。
パーティションにバッチ・ジョブを発行する場合は、同じ名前のMESテンプレートが存在し、パーティションを対象としている必要があります。名前が設定されていない場合、バッチ・ランタイムは、デフォルトのJNDI名(java:comp/DefaultManagedExecutorService
)にバインドされたデフォルトのJava EE MESを使用します。
データソースJNDI名 - パーティションにデプロイされたアプリケーションから発行されるバッチ・ジョブのデータを格納するために使用される、バッチ・ランタイムのデータ・ソースのJNDI名。Java EEコンポーネントがバッチ・ジョブを発行すると、バッチ・ランタイムは、データ・ソースのJNDI名の参照により取得されるこのデータ・ソースを使用してバッチJobRepository表を更新します。
WLSTを使用して、パーティションごとに専用のバッチ・ランタイムを構成できます。
WLSTでBatchRuntimeConfigMBean
とPartitionMBean
を使用して、JobRepositoryに特定のデータベースを使用するようにバッチ・ランタイムを構成できます。
def update_partition_batch_config(partitionName, jndiName, schemaName): connect('admin','passwd') edit() startEdit() cd('/Partitions/' + <partitionName>) cmo.setDataSourceJndiName(jndiName) cd('/BatchConfig/') cmo.setSchemaName(schemaName) save() activate()
この例では、管理者がJNDI名jdbc/batchDS
を使用してデータ・ソースを作成している場合に、update_partition_batch_config('<partitionName>','jdbc/batchDS','BATCH')
を呼び出すと、jndiName
: 'jdbc/batchDS'
にバインドされたデータ・ソースで指定されたデータベースのスキーマ'BATCH'
にすべてのJobRepository表を格納するようにバッチ・ランタイムが構成されます。
WLSTを使用して、バッチ・ジョブの実行に特定のMESを使用するようにバッチ・ランタイムを構成できます。ただし、まずMESテンプレートをドメイン・レベルで作成し、MESの名前をPartitionMBean
に指定する必要があります。
connect('admin
','passwd
') edit() startEdit() cd('/Partitions'/ + <partitionName>) cmo.setBatchJobsExecutorServiceName('mesName
') save() activate()
ここで、mesName
は、このパーティションに対してすでに作成(およびターゲット設定)されたMESテンプレートの名前です。
PartitionMBean
でgetBatchJobsManagedExecutorServiceName()
メソッドを使用して、異なるMESを使用するようにバッチ・ランタイムを構成できます。ただし、バッチ・ジョブを発行する場合は、同じ名前のMESテンプレートが存在し、パーティションを対象としている必要があります。
詳細は、Oracle WebLogic Server MBeanリファレンスのBatchConfigMBeanに関する項およびPartitionMBeanに関する項を参照してください。
WLSTコマンドの使用の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のオンラインおよびオフラインのWebLogic Server WLSTコマンド・リファレンスに関する項を参照してください。
次の管理ツールを使用して、パーティション・スコープごとにバッチ・ランタイムのJobRepositoryを問合せできます。
注意: バッチJobRepositoryを格納しているデータベースが実行されていることを確認してください。たとえば、デフォルトのDerbyデータベースは、java weblogic.Server コマンドを使用してWebLogic Serverをブートしたときに自動的に起動されることはありません。データベースが実行されていない場合は、バッチ・ジョブを発行したときか、WLSTまたはWLS管理コンソールを使用してBatchJobRepositoryRuntimeMBean にアクセスしたときに、バッチRIによって例外がスローされます。 |
WLS管理コンソールを使用してJobRepositoryを問い合せ、パーティションのバッチ・ジョブの詳細を取得できます。
パーティションにデプロイされたアプリケーションによって発行されるすべてのジョブに関する詳細を表示するには、「partition-nameの設定」ページで、「モニタリング」→「バッチ・ジョブ」ページを開きます。
WLSTでBatchJobRepositoryRuntimeMBean
を使用してJobRepositoryを問い合せ、パーティションのバッチ・ジョブの詳細を取得できます。
詳細は、『Oracle WebLogic Server MBeanリファレンス』のBatchJobRepositoryRuntimeMBeanに関する項を参照してください。
getJobDetails
を使用したすべてのバッチ・ジョブの詳細の取得getJobDetails()
属性により、ドメインにデプロイされたアプリケーションによって発行されるすべてのジョブに関する詳細が返されます。コレクションの各エントリには、次の要素の配列が含まれます。
表21-4 getJobDetails()属性の要素
要素名 | 説明 |
---|---|
JOB_NAME |
バッチ・ジョブの名前。 |
APP_NAME |
バッチ・ジョブを発行したアプリケーションの名前(文字列)。 |
INSTANCE_ID |
インスタンスID (長)。 |
EXECUTION_ID |
実行ID (長)。 |
BATCH_STATUS |
このジョブのバッチ・ステータス(文字列)。 |
START_TIME |
ジョブの開始時刻( |
END_TIME |
ジョブの完了時刻( |
EXIT_STATUS |
ジョブの終了ステータス(文字列)。 |
次に、ドメインにデプロイされたすべてのバッチ・ジョブのリストを出力するgetJobDetails()
を使用するWLSTスクリプトの例を示します。
connect('admin', 'admin123')
domainRuntime()
cd('BatchJobRepositoryRuntime')
cd('myserver')
executions=cmo.getJobDetails()
print "JobName AppName InstanceID ExecutionID BatchStatus StartTime EndTime ExitStatus"
print e[0], " ", e[1], " ", e[2], " ", e[3], " ", e[4], " ", e[5], " ", e[6], ",e[7]
次に、getJobDetails()
の実行後のサンプル出力を示します。
JobName AppName InstanceID ExecutionID BatchStatus StartTime EndTime ExitStatus PayrollJob lab1 9 9 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED PayrollJob lab1 8 8 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED PayrollJob lab1 7 7 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED PayrollJob lab1 6 6 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED PayrollJob lab1 5 5 COMPLETED Fri Apr 24 10:10:57 PDT 2015 Fri Apr 24 10:10:58 PDT 2015 COMPLETED PayrollJob lab1 4 4 COMPLETED Fri Apr 24 10:10:56 PDT 2015 Fri Apr 24 10:10:56 PDT 2015 COMPLETED PayrollJob lab1 3 3 COMPLETED Mon Apr 20 11:32:12 PDT 2015 Mon Apr 20 11:32:12 PDT 2015 COMPLETED PayrollJob lab1 2 2 COMPLETED Mon Apr 20 11:32:10 PDT 2015 Mon Apr 20 11:32:11 PDT 2015 COMPLETED PayrollJob lab1 1 1 COMPLETED Mon Apr 20 11:25:26 PDT 2015 Mon Apr 20 11:25:26 PDT 2015 COMPLETED
getJobExecutions
を使用したジョブ実行の詳細の取得getJobExections
属性により、特定のジョブ実行に関する詳細が返されます。コレクションの各エントリには、次の要素の配列が含まれます。
表21-5 getJobExecutions()属性の要素
要素名 | 説明 |
---|---|
JOB_NAME |
バッチ・ジョブの名前(文字列)。 |
INSTANCE_ID |
インスタンスID (長)。 |
EXECUTION_ID |
実行ID (長)。 |
BATCH_STATUS |
このジョブのバッチ・ステータス(文字列)。 |
START_TIME |
ジョブの開始時刻( |
END_TIME |
ジョブの完了時刻( |
EXIT_STATUS |
ジョブの終了ステータス(文字列)。 |
次に、特定のExecutionIDの詳細を取得するためにWLSTスクリプトでgetJobExectuions()
を使用する例(getJobExecutions(6)
)を示します。すべてのExecutionIDのリストを取得するには、getJobDetails()
メソッドを使用します。
connect('admin', 'admin123')
partitionRuntime()
cd('BatchJobRepositoryRuntime')
cd('myserver')
executions=cmo.getJobExecutions(6)
print "JobName InstanceID ExecutionID BatchStatus StartTime EndTime ExitStatus"
for e in executions
print e[0], " ", e[1], " ", e[2], " ", e[3], " ", e[4], " ", e[5], " ", e[6]
次に、getJobExecutions()
の実行後のサンプル出力を示します。
JobName InstanceID ExecutionID BatchStatus StartTime EndTime ExitStatus PayrollJob 6 6 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED
getStepExecutions
を使用したジョブ・ステップ実行の詳細の取得getStepExecutions
属性により、ジョブ実行の各ステップに関するメトリックが返されます。コレクションの各エントリには、次の要素の配列が含まれます。
表21-6 getStepExecutions()属性の要素
要素名 | 説明 |
---|---|
STEP_NAME |
バッチ・ジョブ・ステップの名前(文字列)。 |
STEP_ID |
ステップID (長)。 |
EXECUTION_ID |
実行ID (長)。 |
BATCH_STATUS |
このジョブのバッチ・ステータス(文字列)。 |
START_TIME |
ジョブの開始時刻( |
END_TIME |
ジョブの完了時刻( |
EXIT_STATUS |
ジョブの終了ステータス(文字列)。 |
次に、特定のステップ実行IDの詳細を取得するためにWLSTスクリプトでgetStepExecutions()
を使用する例(getStepExecutions(6)
)を示します。すべての実行IDのリストを取得するには、getJobDetails()
メソッドを使用します。
connect('admin', 'admin123')
partitionRuntime()
cd('BatchJobRepositoryRuntime')
cd('myserver')
executions=cmo.getStepExecutions(6)
print "StepName StepExecutionID BatchStatus StartTime EndTime ExitStatus"
print e[0], " ", e[1], " ", e[2], " ", e[3], " ", e[4], " ", e[5], "]
次に、getStepExecutions()
の実行後のサンプル出力を示します。
StepName StepExecutionID BatchStatus StartTime EndTime ExitStatus PayrollJob 6 6 COMPLETED Fri Apr 24 10:11:00 PDT 2015 Fri Apr 24 10:11:01 PDT 2015 COMPLETED
詳細については、以下の各節を参照してください。
『Oracle WebLogic Serverサーバー環境の管理』のバッチ・ランタイムの構成に関する項
管理対象エグゼキュータ・サービス・テンプレートの構成の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のグローバルCMOテンプレートに関する項を参照してください。
JDBCデータ・ソースの構成の詳細は、『Oracle WebLogic Server JDBCデータ・ソースの管理』のJDBCデータ・ソースの作成に関する項を参照してください。
バッチ関連の構成およびランタイムMBeanの詳細は、Oracle WebLogic Server MBeanリファレンスのBatchConfigMBeanに関する項、BatchJobRepositoryRuntimeMBeanに関する項およびPartitionMBeanに関する項を参照してください。
WLSTコマンドの使用の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のオンラインおよびオフラインのWebLogic Server WLSTコマンド・リファレンスに関する項を参照してください。
『Oracle WebLogic Serverの理解』のサンプル・アプリケーションとコード例に関する項
Java EE 7チュートリアルのバッチ処理に関する項
「Java Specification Request 352: Batch Applications for the Java Platform」(http://jcp.org/en/jsr/detail?id=352)