この章では、Oracle Enterprise Schedulerメタデータ・サービスを使用して、スケジュール、ジョブ定義およびその他のOracle Enterprise Schedulerメタデータをリポジトリに保存する方法について説明します。また、メタデータ・サービスの問合せメソッドを使用して、メタデータに格納されているオブジェクトをリストすることもできます。
この章では、次の項目について説明します。
ジョブ定義の作成方法の詳細は、第5章「Oracle Enterprise Schedulerサンプル・アプリケーションのユースケース(非推奨)」、第8章「PL/SQLジョブの作成と使用」および第9章「プロセス・ジョブの作成と使用」を参照してください。
Oracle Enterprise Schedulerでは、メタデータ・サービスを提供し、使用するアプリケーション・プログラムに対して、ステートレス・セッションEnterprise Java Bean (EJB)として公開します。メタデータ・サービスを使用すると、アプリケーション・レベルのメタデータ・オブジェクトを保存できます。メタデータ・サービスでは、Oracle Metadata Services (MDS)を使用してメタデータ・オブジェクトをリポジトリに保存します(データベース・ベースまたはファイル・ベースのいずれかのリポジトリを使用できます)。メタデータ・サービスを使用すると、複数のジョブ・リクエストの発行をまたいで、アプリケーション・レベルのメタデータを再使用できます。
Oracle Enterprise Schedulerのメタデータ・オブジェクトには、次のものがあります。
アプリケーション・レベル・メタデータ: メタデータ・サービスを使用して、ジョブ・リクエストに対するジョブ・タイプ、ジョブ定義、ジョブ・セットおよびその他のアプリケーション・レベルのメタデータ・オブジェクト定義を格納します。
デフォルト(グローバル) Oracle Enterprise Schedulerメタデータ: グローバルOracle Enterprise Schedulerメタデータには、スケジュール、作業シフト、作業割当てなどの管理オブジェクトが含まれます。Oracle Enterprise Schedulerには、デフォルトの管理オブジェクトにアクセスして格納するために、MetadataServiceMXBean
およびMetadataServiceMXBeanProxy
が備えられています。
注意: Oracle Enterprise Schedulerスケジュール・オブジェクトは、アプリケーション・レベルのメタデータとグローバル・メタデータの両方で使用されます。 |
アプリケーション・レベル・メタデータ・オブジェクトへのアクセスは、MetadataService
インタフェースでのみ公開されます。MetadataService
はステートレス・セッションEJBとして公開されます。外部クライアントは、対応するEJBを使用してサービスにアクセスする必要があります。クライアントは内部API層と直接相互作用できません。アプリケーション・クライアントが、ステートレス・セッションEJB経由でメタデータ・サービスを使用する場合、複数のメソッドが1つのユーザー・トランザクション内でコールされるときなどに、複数のコールをまたいで状態を格納するMetadataServiceHandle引数への参照が、このインタフェース内のすべてのメソッドによって受け取られます。MBeanProxy
インタフェースにはハンドラは必要ありません。
Oracle Enterprise Schedulerアプリケーションでは、MetadataServiceHandleにアクセスしたり操作する必要はありません。アプリケーションで行う必要があるのは、openメソッドによって作成される参照を保持し、コールされるメソッドにそれを渡すことのみです。最後に、closeメソッドをコールしてハンドルを明示的にクローズする必要があります。特定のハンドルを使用して加えられたすべての変更は、closeメソッドをコールすることによってのみコミット(または中断)されます。
メタデータ・オブジェクト名は、特定のパッケージまたはネームスペースのスコープ内で一意である必要があります。特定のパッケージ内に、同じ名前を持つ、同じタイプの2つのメタデータ・オブジェクトを作成することはできません。
各Oracle WebLogic Serverドメインには通常、1つのメタデータ・リポジトリが含まれます。メタデータ・リポジトリは複数のパーティションに分割され、各パーティションはリポジトリ内の他のパーティションから独立し、分離しています。
アプリケーションごとに、使用するパーティションを選択できます。2つのアプリケーションで1つのパーティションを共有することもできます。
パーティション内では、データを任意の方法で編成できます。通常、データはオペレーティング・システムのファイル・システムのように階層的に編成されます。ファイル・システムで使用されるフォルダやディレクトリのかわりに、メタデータ・サービスでは、ファイルを見つけるために使用される一意の名前を形成するネームスペースまたはパッケージ名を使用します。
その他すべてのOracle Enterprise Schedulerアプリケーションでは、アプリケーション・レベルのメタデータを含むアプリケーション名およびオプションのパッケージ名がネームスペース/oracle/apps/ess
の下に表示されます。たとえば、application1
という名前のアプリケーションのメタデータ・リポジトリをdev
、test
およびproduction
という名前のパッケージに分割できます。
このアプリケーションのメタデータ・リポジトリの構造は、次のようになります。
/oracle/apps/ess/application1/dev/metadata /oracle/apps/ess/application1/test/metadata /oracle/apps/ess/application1/production/metadata
メタデータ・オブジェクトを作成する各メタデータ・サービス・メソッドでは、ディレクトリ構造のパッケージ部分を指定する必須のpackageName
引数を使用します。
Oracle Enterprise Schedulerメタデータ・リポジトリにアクセスすると、次を含む、様々なタイプのメタデータ・サービス操作を実行できるようになります。
追加、更新、削除: これらの操作はトランザクション特性を持ちます。
コピー: これらの操作はトランザクション特性を持ちます。
問合せ: これらの操作は読取り専用特性を持ち、メタデータ・リポジトリ内のメタデータ・オブジェクトをリストできます。
取得: これらの操作は、forUpdate
フラグの値に応じて、読取り専用特性またはトランザクション特性のいずれかを持ちます。
クライアントはステートレス・セッションEJB経由でメタデータ・サービスにアクセスするため、各メソッドでMetadataServiceHandle
引数への参照が使用されます。この引数には、メタデータ・サービス操作の状態が格納されます。メタデータ・サービスのopen()
メソッドにより、各メタデータ・リポジトリのユーザー・トランザクションが開始されます。Oracle Enterprise Schedulerアプリケーション・クライアントでは、open()
メソッドによりMetadataServiceHandle
参照を取得し、後続のメタデータ・サービス・メソッドにこの参照を渡します。MetadataServiceHandle
参照によって、コール側アプリケーションのメタデータ・リポジトリへの接続が提供されます。
メタデータ・サービスを使用するクライアント・アプリケーションでは、close()
をコールして、メタデータ・サービス・トランザクションを明示的に閉じる必要があります。これによりトランザクションが終了し、トランザクションがコミットまたはロールバック(取消し)されます。close()
はメタデータ・サービス内のトランザクション動作を制御するだけでなく、Oracle Enterprise Schedulerにより特定のリソースを解放できるようにします。このため、close()
はメタデータ・サービスの読取り専用query()
およびget()操作でも必須となります。
注意: メタデータ・サービスではJTAグローバル・トランザクションはサポートされませんが、トランザクションの境界でメタデータ・サービス・コールを行うことはできます。Beanまたはコンテナ管理のトランザクションでメタデータ・サービス・コールを行うことはできますが、このコールはトランザクションの一部にはなりません。 |
メタデータ・サービスにアクセスするには、次のようないくつかの方法があります。
ステートレス・セッションEJBアクセス: Oracle Enterprise Schedulerユーザー・アプリケーションではこのタイプのアクセスを使用します。
MBeanアクセス: このアクセスは、oracle.as.scheduler.management
APIを使用して管理機能を実行するアプリケーションで使用されます。
MBeanプロキシ・アクセス: このアクセスは、oracle.as.scheduler.management
APIを使用して管理機能を実行するアプリケーションで使用されます。管理クライアントがOracle Enterprise Schedulerに対してリモートにある場合は、MBeanプロキシを使用します。
ユーザー・アプリケーションでは、アプリケーション・レベルのメタデータ操作を行うために、ステートレス・セッションEJBを使用してメタデータ・サービスにアクセスします。ユーザーは、JNDIを使用してOracle Enterprise Schedulerアプリケーションに関連付けられているメタデータ・サービスを参照できます。
例6-1に、アプリケーション・レベルのメタデータを使用できるようにする、Oracle Enterprise Schedulerメタデータ・サービスのJNDIルックアップを示します。getMetadataServiceEJB()
メソッドでは、名前"ess/metadata"を使用してメタデータ・サービスを参照することに注意してください。通常、Oracle Enterprise Schedulerアプリケーションでは、MetadataServiceBean
へのEJB参照に"ess/metadata"を使用します。
設計時に、Oracle JDeveloperを使用して、アプリケーション・レベルのメタデータ・オブジェクトを作成、表示および更新できます。
メタデータ・サービスの問合せメソッドを使用すると、メタデータ・リポジトリ内のオブジェクトを表示できます。queryJobTypes()
メソッドを使用してジョブ・タイプの問合せを、queryJobDefinitions()
メソッドを使用してジョブ定義の問合せを実行でき、その他のメタデータ・オブジェクトについても同様に対応するMetadataService
問合せメソッドを使用して問合せを実行できます。
問合せと組み合せてフィルタを使用し、必要な項目のみを取得するように出力を制限できます(SQL WHERE
句を使用する場合と同様の方法で)。
フィルタにより、問合せの比較または条件を指定します。フィルタは、field
引数(String
)、comparator
および関連するvalue
(Object
)を含む比較を作成することにより作成します。フィルタでは、フィルタ・メソッドを使用して比較を組み合せてフィルタ式を作成できます。
表6-1に比較演算子(comparator
引数)をリストします。
表6-1 フィルタ比較演算子
比較演算子 | 説明 |
---|---|
|
フィールドに指定された値が含まれる |
|
フィールドが指定された値で終了する |
|
フィールドが指定された値に等しい |
|
フィールドが指定された値より大きい |
|
フィールドが指定された値以上 |
|
フィールドが指定された値未満 |
|
フィールドが指定された値以下 |
|
フィールドに指定された値が含まれない |
|
フィールドが指定された値と等しくない |
|
フィールドが指定された値で始まる |
例6-2に、新しいフィルタを作成するコードを示します。
例6-2 問合せに対するフィルタ・コンパレータを使用したフィルタの作成
Filter filter = new Filter(MetadataService.QueryField.PACKAGE.fieldName(), Filter.Comparator.NOT_EQUALS, null);
表6-2 MetadataService問合せフィールド
問合せフィールド | 説明 |
---|---|
|
パッケージの名前。 |
|
ジョブ定義名。 |
|
ジョブ定義に関連付けられているジョブ・タイプ。 |
|
ジョブ実行タイプ(同期または非同期)。 |
|
ジョブ・セット実行モード(パラレルまたはシリアル)。 |
|
ジョブ・セットの最初のステップ。 |
|
作業割当てがアクティブかどうかを示します。 |
|
ジョブが関連付けられている製品の名前を示します。 |
|
このジョブが実行されるホスティング・アプリケーションの名前。 |
MetadataService
問合せにより、MetadataObjectIDs
の列挙リストが次の形式で返されます。
java.util.Enumeration<MetadataObjectId>
例6-3に、メタデータ内のジョブ・タイプのリストを問い合せるサンプル・ルーチンを示します。
例6-3 メタデータ・サービスの問合せメソッドの使用
Enumeration<MetadataObjectId> qryResults = m_service.queryJobTypes(handle, filter, null, false);
例6-3には、queryJobTypes()
メソッドを使用するための次の重要なステップが示されています。
MetadataServiceHandle
のインスタンスを取得して、メタデータ・リポジトリへの参照を提供する必要があります。
問合せのフィルタを作成する必要があります。フィルタには、フィールド、コンパレータおよび検索対象の値が含まれます。
問合せでのソート基準として使用するフィールドをorderBy
引数を使用して決定するか、orderBy
引数をNULLに設定して特定の順序付けが適用されないことを示します。
問合せにascending
引数を設定します。結果リストに順序付けが適用される場合、ascending
引数をtrue
に設定して昇順を指定するか、false
に設定して降順を指定します。