この章では、デプロイ用ジョブ・スケジューラ対応アプリケーションを構成する方法について説明します。次のトピックについて説明します。
ジョブ・スケジューラは、ステートレス・セッションEnterprise JavaBeans(EJB)としてデプロイされます。標準的なEJBと異なり、ジョブ・スケジューラとともに実際のクラス・ファイルをデプロイする必要はありません。これらのファイルは、Oracle Containers for J2EE(OC4J)の一部です。
すべてのEJBと同様、デプロイ記述子が必要です。ジョブ・スケジューラでは次の2つの記述子を使用します。
ジョブ・スケジューラを正しく機能させるには、両方のファイルがscheduler-ejb.jar
アーカイブ・ファイルに含まれている必要があります。
アプリケーションとともにジョブ・スケジューラをデプロイするには、アプリケーションのデプロイ担当者は、scheduler-ejb.jar
アーカイブを含める必要があります。ejb-jar.xml
ファイルとorion-ejb-jar.xml
ファイルに加えて、このアーカイブには次のものが必要です。
すべてのジョブ実装
すべてのイベント・リスナー実装
ジョブ・スケジューラがジョブ実装とイベント・リスナー実装にアクセスするには、scheduler-ejb.jar
アーカイブにクラス・ファイルが含まれている必要があります。このファイルを生成してアプリケーションにバンドルする作業は、アプリケーションのデプロイ担当者が行います。
例9-1は、サンプルのscheduler-ejb.jar
ファイルです。ジョブ・スケジューラ対応アプリケーションは、アプリケーションの一部としてtest.job
ジョブ実装とtest.watch
イベント・リスナー実装を使用しています。
ジョブ・スケジューラには、3種類の永続ジョブ記憶域があります。
メモリー内(JMS永続性)
ファイルベース(JMS永続性)
データベース支援(JDBC永続性)
JMS永続性を構成するには、jobStoreProviderClassName
<env-entry>
をoracle.ias.scheduler.core.jobstore.jdbc.ProvderImpl
に設定します。メモリー内またはファイルベースの永続性は、JMSキューをそれぞれメモリー内またはファイルベースとして構成することで実現します。
データベース支援の永続性を構成するには、J2EE_HOME
/database/scheduler_jobstore.sql
スクリプトを実行してデータベース・テーブルを作成し、jobStoreProviderClassName
<env-entry>
をoracle.ias.scheduler.core.jobstore.jdbc.ProviderImpl
に設定します。
次の項では、JDBC永続性とJMS永続性の構成例を示します。
scheduler_jobstore.sql
SQLスクリプトを実行して、データベース・テーブルを作成します。
ejb-jar.xml
ファイルで、jobStoreProviderClassName
<env-entry>
の値を次のように設定します。
<env-entry> <env-entry-name>jobStoreProviderClassName</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value> oracle.ias.scheduler.core.jobstore.jdbc.ProviderImpl</env-entry-value> </env-entry>
data-sources.xml
で、新しい<managed-data-source>
エントリを作成し、指定された接続プールが既存の<connection-pool>
を参照するようにします。
<managed-data-source name="SchedulerJobstore" connection-pool-name="Example Connection Pool" jndi-name="scheduler/jobstore" />
JDBC永続性の詳細な構成例は、OTNで次のHow-Toを参照してください。
http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-scheduler-db/doc/readme.html
ejb-jar.xml
ファイルで、jobStoreProviderClassName
<env-entry>
の値を次のように設定します。
<env-entry> <env-entry-name>jobStoreProviderClassName</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value> oracle.ias.scheduler.core.jobstore.jms.ProviderImpl </env-entry-value> </env-entry>
jms.xml
ファイルで、次のように新しい<queue>
エントリを作成します。
<queue name="jms/scheduler_jobstore" persistence file="scheduler_jobstore"> <description>scheduler job store queue</description> </queue>
jms.xml
で定義されたキューの宛先は、各キューの宛先でpersistence-file
属性が設定されている場合のみ永続的になります。永続的なキューの宛先を作成する詳細な手順は、JMSのドキュメントを参照してください。
JMS永続性の詳細な構成例は、OTNで次のHow-Toを参照してください。
http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-scheduler-jms/doc/readme.html
ジョブ・スケジューラのejb-jar.xml
デプロイ記述子ファイルには、ジョブ・スケジューラのセキュリティ構成に関する情報が含まれています。この情報を変更して、1つまたは複数のジョブ・スケジューラAPIへのアクセスを特定のロールに制限することができます。たとえば、ジョブの削除を、管理者権限を持つユーザーに限定することができます。
例9-3では、アプリケーション・ユーザーは、ユーザーと管理者という2つの一般的なカテゴリに分けられます。ユーザーにはジョブの発行のみが許可され、管理者はジョブの発行、一時停止、再開、取消しおよび削除が可能です。
例9-3 2層のセキュリティ・モデル
<!-- role declarations --> <security-role> <role-name>user</role-name> </security-role> <security-role> <role-name>administrator</role-name> </security-role> <!—- methods that can be invoked by the group 'user' --> <method-permission> <role-name>user</role-name> <method> <ejb-name>scheduler</ejb-name> <method-name>add</method-name> </method> </method-permission> <!—- methods that can be invoked by the group 'administrator' --> <method-permission> <role-name>administrator</role-name> <method> <ejb-name>scheduler</ejb-name> <method-name>remove</method-name> </method> <method> <ejb-name>scheduler</ejb-name> <method-name>pause</method-name> </method> <method> <ejb-name>scheduler</ejb-name> <method-name>resume</method-name> </method> <method> <ejb-name>scheduler</ejb-name> <method-name>cancel</method-name> </method> </method-permission>
ここでは、ジョブ・スケジューラに使用できるログ・レベルの設定について説明します。ルート・ログ出力のデフォルトのログ・レベルはLevel.WARNING
に設定されています。これは、予測しないエラーや致命的なエラーが、ルート・ログ出力により記録されるためです。ただし、例9-4に示すように、ejb-jar.xml
ファイルのglobalLogLevel
と呼ばれる<env-entry>
の文字列の値を設定することで、ログ・レベルの変更が可能です。
例9-4 ログ・レベルの変更
<env-entry> <env-entry-name>globalLogLevel</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>FINEST</env-entry-value> </env-entry>
表9-1に、<env-entry>
の値とそれぞれに対応するログ・レベルを示します。
DMS統計を公開するかどうかを設定するには、例9-5に示すように、ejb-jar.xml
ファイルの<env-entry>
値を設定します。
例9-5 DMSの構成
<env-entry> <env-entry-name>oracle.ias.scheduler.dms</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>true</env-entry-value> </env-entry>
<env-entry-value>
がtrueに設定されている場合、DMS統計が公開されます。DMS統計を公開しない場合は、この値をfalseに設定します。
JMX MBeanを公開するかどうかを設定するには、例9-6に示すように、ejb-jar.xml
ファイルの<env-entry>
値を設定します。
例9-6 JMXの構成
<env-entry> <env-entry-name>oracle.ias.scheduler.jmx</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>true</env-entry-value> </env-entry>
<env-entry-value>
がtrueに設定されている場合、JMX MBeanが公開されます。JMX MBeanを公開しない場合は、この値をfalseに設定します。
一部のジョブが、コンテナのシャットダウン中にスケジュールされている場合があります。ジョブ・スケジューラでは、これらの失われた実行を復元できます。コンテナのダウン中にスケジュールされていた1つまたは複数の実行は、コンテナの起動時に1つのジョブの実行にまとめられます。
固定間隔および固定遅延スケジュールの場合、繰返しの間隔が設定可能な実行リカバリしきい値期間より長いジョブの実行リカバリを有効にすることができます。
それには、例9-7に示すように、<env-entry>
の値を希望のしきい値(分)に設定します。この値を設定しない場合、値は30分に設定されます。間隔が30分より長い固定間隔および固定遅延ジョブのみジョブの実行リカバリが行われます。