ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Enterprise Scheduler開発者ガイド
11g リリース1 (11.1.1.7)
B66615-04
  目次へ移動
目次

前
 
次
 

6 メタデータ・サービスの使用

この章では、Oracle Enterprise Schedulerメタデータ・サービスを使用して、スケジュール、ジョブ定義およびその他のOracle Enterprise Schedulerメタデータをリポジトリに保存する方法について説明します。また、メタデータ・サービスの問合せメソッドを使用して、メタデータに格納されているオブジェクトをリストすることもできます。

この章では、次の項目について説明します。

ジョブ定義の作成方法の詳細は、第5章「Oracle Enterprise Schedulerサンプル・アプリケーションのユースケース(非推奨)」第8章「PL/SQLジョブの作成と使用」および第9章「プロセス・ジョブの作成と使用」を参照してください。

6.1 メタデータ・サービスの使用の概要

Oracle Enterprise Schedulerでは、メタデータ・サービスを提供し、使用するアプリケーション・プログラムに対して、ステートレス・セッションEnterprise Java Bean (EJB)として公開します。メタデータ・サービスを使用すると、アプリケーション・レベルのメタデータ・オブジェクトを保存できます。メタデータ・サービスでは、Oracle Metadata Services (MDS)を使用してメタデータ・オブジェクトをリポジトリに保存します(データベース・ベースまたはファイル・ベースのいずれかのリポジトリを使用できます)。メタデータ・サービスを使用すると、複数のジョブ・リクエストの発行をまたいで、アプリケーション・レベルのメタデータを再使用できます。

Oracle Enterprise Schedulerのメタデータ・オブジェクトには、次のものがあります。


注意:

Oracle Enterprise Schedulerスケジュール・オブジェクトは、アプリケーション・レベルのメタデータとグローバル・メタデータの両方で使用されます。


アプリケーション・レベル・メタデータ・オブジェクトへのアクセスは、MetadataServiceインタフェースでのみ公開されます。MetadataServiceはステートレス・セッションEJBとして公開されます。外部クライアントは、対応するEJBを使用してサービスにアクセスする必要があります。クライアントは内部API層と直接相互作用できません。アプリケーション・クライアントが、ステートレス・セッションEJB経由でメタデータ・サービスを使用する場合、複数のメソッドが1つのユーザー・トランザクション内でコールされるときなどに、複数のコールをまたいで状態を格納するMetadataServiceHandle引数への参照が、このインタフェース内のすべてのメソッドによって受け取られます。MBeanProxyインタフェースにはハンドラは必要ありません。

Oracle Enterprise Schedulerアプリケーションでは、MetadataServiceHandleにアクセスしたり操作する必要はありません。アプリケーションで行う必要があるのは、openメソッドによって作成される参照を保持し、コールされるメソッドにそれを渡すことのみです。最後に、closeメソッドをコールしてハンドルを明示的にクローズする必要があります。特定のハンドルを使用して加えられたすべての変更は、closeメソッドをコールすることによってのみコミット(または中断)されます。

メタデータ・オブジェクト名は、特定のパッケージまたはネームスペースのスコープ内で一意である必要があります。特定のパッケージ内に、同じ名前を持つ、同じタイプの2つのメタデータ・オブジェクトを作成することはできません。

6.1.1 メタデータ・サービス・ネームスペースの概要

各Oracle WebLogic Serverドメインには通常、1つのメタデータ・リポジトリが含まれます。メタデータ・リポジトリは複数のパーティションに分割され、各パーティションはリポジトリ内の他のパーティションから独立し、分離しています。

アプリケーションごとに、使用するパーティションを選択できます。2つのアプリケーションで1つのパーティションを共有することもできます。

パーティション内では、データを任意の方法で編成できます。通常、データはオペレーティング・システムのファイル・システムのように階層的に編成されます。ファイル・システムで使用されるフォルダやディレクトリのかわりに、メタデータ・サービスでは、ファイルを見つけるために使用される一意の名前を形成するネームスペースまたはパッケージ名を使用します。

その他すべてのOracle Enterprise Schedulerアプリケーションでは、アプリケーション・レベルのメタデータを含むアプリケーション名およびオプションのパッケージ名がネームスペース/oracle/apps/essの下に表示されます。たとえば、application1という名前のアプリケーションのメタデータ・リポジトリをdevtestおよびproductionという名前のパッケージに分割できます。

このアプリケーションのメタデータ・リポジトリの構造は、次のようになります。

/oracle/apps/ess/application1/dev/metadata
/oracle/apps/ess/application1/test/metadata
/oracle/apps/ess/application1/production/metadata

メタデータ・オブジェクトを作成する各メタデータ・サービス・メソッドでは、ディレクトリ構造のパッケージ部分を指定する必須のpackageName引数を使用します。

6.1.2 メタデータ・サービス操作の概要

Oracle Enterprise Schedulerメタデータ・リポジトリにアクセスすると、次を含む、様々なタイプのメタデータ・サービス操作を実行できるようになります。

  • 追加、更新、削除: これらの操作はトランザクション特性を持ちます。

  • コピー: これらの操作はトランザクション特性を持ちます。

  • 問合せ: これらの操作は読取り専用特性を持ち、メタデータ・リポジトリ内のメタデータ・オブジェクトをリストできます。

  • 取得: これらの操作は、forUpdateフラグの値に応じて、読取り専用特性またはトランザクション特性のいずれかを持ちます。

6.1.3 メタデータ・サービス・トランザクションの概要

クライアントはステートレス・セッションEJB経由でメタデータ・サービスにアクセスするため、各メソッドでMetadataServiceHandle引数への参照が使用されます。この引数には、メタデータ・サービス操作の状態が格納されます。メタデータ・サービスのopen()メソッドにより、各メタデータ・リポジトリのユーザー・トランザクションが開始されます。Oracle Enterprise Schedulerアプリケーション・クライアントでは、open()メソッドによりMetadataServiceHandle参照を取得し、後続のメタデータ・サービス・メソッドにこの参照を渡します。MetadataServiceHandle参照によって、コール側アプリケーションのメタデータ・リポジトリへの接続が提供されます。

メタデータ・サービスを使用するクライアント・アプリケーションでは、close()をコールして、メタデータ・サービス・トランザクションを明示的に閉じる必要があります。これによりトランザクションが終了し、トランザクションがコミットまたはロールバック(取消し)されます。close()はメタデータ・サービス内のトランザクション動作を制御するだけでなく、Oracle Enterprise Schedulerにより特定のリソースを解放できるようにします。このため、close()はメタデータ・サービスの読取り専用query()およびget()操作でも必須となります。


注意:

メタデータ・サービスではJTAグローバル・トランザクションはサポートされませんが、トランザクションの境界でメタデータ・サービス・コールを行うことはできます。Beanまたはコンテナ管理のトランザクションでメタデータ・サービス・コールを行うことはできますが、このコールはトランザクションの一部にはなりません。


6.2 メタデータ・サービスへのアクセス

メタデータ・サービスにアクセスするには、次のようないくつかの方法があります。

6.2.1 ステートレス・セッションEJBを使用してメタデータ・サービスにアクセスする方法

ユーザー・アプリケーションでは、アプリケーション・レベルのメタデータ操作を行うために、ステートレス・セッションEJBを使用してメタデータ・サービスにアクセスします。ユーザーは、JNDIを使用してOracle Enterprise Schedulerアプリケーションに関連付けられているメタデータ・サービスを参照できます。

例6-1に、アプリケーション・レベルのメタデータを使用できるようにする、Oracle Enterprise Schedulerメタデータ・サービスのJNDIルックアップを示します。getMetadataServiceEJB()メソッドでは、名前"ess/metadata"を使用してメタデータ・サービスを参照することに注意してください。通常、Oracle Enterprise Schedulerアプリケーションでは、MetadataServiceBeanへのEJB参照に"ess/metadata"を使用します。

例6-1 メタデータ・サービスへのステートレス・セッションEJBアクセスのためのJNDIルックアップ

// Demonstration on how to lookup metadata service from a Java EE application
// JNDI lookup on the metadata service EJB

import oracle.as.scheduler.core.JndiUtil;

MetadataService ms = JndiUtil.getMetadataServiceEJB();

6.3 Oracle JDeveloperを使用したメタデータ・サービスへのアクセス

設計時に、Oracle JDeveloperを使用して、アプリケーション・レベルのメタデータ・オブジェクトを作成、表示および更新できます。

6.4 メタデータ・サービスを使用したメタデータの問合せ

メタデータ・サービスの問合せメソッドを使用すると、メタデータ・リポジトリ内のオブジェクトを表示できます。queryJobTypes()メソッドを使用してジョブ・タイプの問合せを、queryJobDefinitions()メソッドを使用してジョブ定義の問合せを実行でき、その他のメタデータ・オブジェクトについても同様に対応するMetadataService問合せメソッドを使用して問合せを実行できます。

問合せと組み合せてフィルタを使用し、必要な項目のみを取得するように出力を制限できます(SQL WHERE句を使用する場合と同様の方法で)。

6.4.1 フィルタの作成方法

フィルタにより、問合せの比較または条件を指定します。フィルタは、field引数(String)、comparatorおよび関連するvalue(Object)を含む比較を作成することにより作成します。フィルタでは、フィルタ・メソッドを使用して比較を組み合せてフィルタ式を作成できます。

表6-1に比較演算子(comparator引数)をリストします。

表6-1 フィルタ比較演算子

比較演算子 説明

CONTAINS

フィールドに指定された値が含まれる

ENDS_WITH

フィールドが指定された値で終了する

EQUALS

フィールドが指定された値に等しい

GREATER_THAN

フィールドが指定された値より大きい

GREATER_THAN_EQUALS

フィールドが指定された値以上

LESS_THAN

フィールドが指定された値未満

LESS_THAN_EQUALS

フィールドが指定された値以下

NOT_CONTAINS

フィールドに指定された値が含まれない

NOT_EQUALS

フィールドが指定された値と等しくない

STARTS_WITH

フィールドが指定された値で始まる


例6-2に、新しいフィルタを作成するコードを示します。

例6-2 問合せに対するフィルタ・コンパレータを使用したフィルタの作成

Filter filter =
  new Filter(MetadataService.QueryField.PACKAGE.fieldName(),
  Filter.Comparator.NOT_EQUALS, null);

表6-2 MetadataService問合せフィールド

問合せフィールド 説明

MetadataService.QueryField.PACKAGE

パッケージの名前。

MetadataService.QueryField.NAME

ジョブ定義名。

MetadataService.QueryField.JOBTYPE

ジョブ定義に関連付けられているジョブ・タイプ。

MetadataService.QueryField.EXECUTIONTYPE

ジョブ実行タイプ(同期または非同期)。

MetadataService.QueryField.EXECUTIONMODE

ジョブ・セット実行モード(パラレルまたはシリアル)。

MetadataService.QueryField.FIRSTSTEP

ジョブ・セットの最初のステップ。

MetadataService.QueryField.ACTIVE

作業割当てがアクティブかどうかを示します。

MetadataService.QueryField.PRODUCT

ジョブが関連付けられている製品の名前を示します。

MetadataService.QueryField.EFFECTIVEAPPLICATION

このジョブが実行されるホスティング・アプリケーションの名前。


6.4.2 メタデータ・オブジェクトの問合せ方法

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に設定して降順を指定します。