ヘッダーをスキップ

Oracle Application Server Adapter概要
10g(10.1.3.1.0)

B31900-01
目次
目次
索引
索引

戻る 次へ

6 アダプタのライフ・サイクル管理

Oracle Application Serverアダプタは、J2EE Connector Architecture(J2CA)1.5標準に基づいており、Oracle Containers for J2EE(OC4J)内にデプロイされます。Oracle Application Serverアダプタのライフ・サイクルは、Business Process Execution Language for Web Services(BPEL)Process Managerによって決まります。これらのアダプタは、アダプタ・フレームワーク・コンポーネントを介してBPEL Process Managerに統合されます。

この章の内容は、次のとおりです。

6.1 Oracle Application Serverアダプタのインストール

テクノロジ・アダプタおよびOracleAS Adapter for Oracle Applicationsは、Oracle BPEL Process Managerのインストールの一部として組み込まれています。 これらのアダプタは、スタンドアロンOC4Jと中間層の両方のデプロイをサポートしています。パッケージ・アプリケーション・アダプタおよびレガシー・アダプタは、OracleAS Adapters CDの一部として使用できます。 これらのアダプタは、中間層デプロイのみをサポートしています。

6.2 アダプタの起動と停止

Oracle Application Serverアダプタは、J2CA 1.5リソース・アダプタとしてデプロイされます。 したがって、アダプタを起動および停止するには、すべてのリソース・アダプタが、start (BootstrapContext)メソッドとstopメソッドをSPIインタフェースの一部として実装している必要があります。Oracle Application Serverアダプタは、それらのアダプタを使用するBPELプロセスがJ2CAアウトバウンド相互作用を開始したときに起動されます。 アダプタは、BPELプロセス自体がインバウンド相互作用のためにロードされるとき、またはアダプタがBPELプロセスにイベントをパブリッシュするときにも起動されます。

アダプタの起動後にアダプタを停止する唯一の方法は、OC4Jを停止することです。 このリリースでは、アダプタ・フレームワークはJ2CA 1.5コンテナの一部として機能します。

6.3 アダプタの物理的なデプロイ

Oracle Application Serverアダプタは、OC4Jコンテナ内にJ2CA 1.5リソース・アダプタとしてデプロイされます。アダプタは、Javaアーカイブ(JAR)形式を使用してリソース・アダプタ・アーカイブ(RAR)ファイルとしてパッケージ化されています。 アダプタを物理的にデプロイするには、RARファイルを使用すること、および基礎となるOC4Jまたは中間層プラットフォームにアダプタをコネクタとして登録することが必要です。RARファイルには、ra.xmlファイルが含まれています。このファイルは、リソース・アダプタに関するデプロイ固有の情報が格納されるデプロイメント・ディスクリプタXMLファイルです。また、RARファイルには、OC4Jとリソース・アダプタ間の規約に関する宣言情報も含まれています。

アダプタは、.rarファイル内のra.xmlファイルに加え、oc4j-ra.xmlテンプレート・ファイルをパッケージ化します。oc4j-ra.xmlファイルは、リソース・アダプタのConnectorFactoryオブジェクト(論理的なデプロイ)の定義に使用されます。このoc4j-ra.xmlファイルは、リソース・アダプタ用のOC4J固有のデプロイメント・ディスクリプタです。 このファイルには、リソース・アダプタをOC4Jにデプロイするためのデプロイ構成が含まれており、これには、リソース・アダプタのデプロイメント・ディスクリプタに指定されているバックエンド・アプリケーションの接続情報、使用するJava Naming and Directory Interface(JNDI)の名前、接続プーリング・パラメータ、リソース・プリンシパル・マッピング・メカニズムおよび構成が含まれます。

例 6-1    スタンドアロンOC4Jインストール

この例では、BPEL Process ManagerのスタンドアロンOC4Jインストールの一部として、テクノロジおよびOracleAS Adapter for Oracle Applicationsを物理的にデプロイする方法を示します。 スタンドアロンOC4Jインストールでは、次のコマンドを使用してJCA 1.5リソース・アダプタをデプロイします。

java -jar $ORACLE_
HOME/integration/orabpel/system/appserver/oc4j/j2ee/home/admin.jar
ormi://localhost oc4jadmin welcome1 -deployConnector -file myAdapter.rar -name
myAdapter

スタンドアロンOC4Jインストールでは、次のコマンドを使用してJCA 1.5リソース・アダプタを削除します。

java -jar $ORACLE_
HOME/integration/orabpel/system/appserver/oc4j/j2ee/home/admin.jar
ormi://localhost oc4jadmin welcome1 -undeployConnector -name myAdapter

MANIFEST.MFoc4j-ra.xmlおよびra.xmlファイルは、コネクタ・フォルダにも格納されます。

サンプルのoc4j-ra.xmlファイルを次に示します。


画像の説明


注意:

中間層インストールでは、dcmctlユーティリティを実行して、J2CA 1.5リソース・アダプタをデプロイします。次のコマンドを使用してください。

cd $ORACLE_HOME/dcm/bin
./dcmctl deployApplication -f myAdapter.rar -a myAdapter -co OC4J_
SOA

 

6.4 アダプタの論理的なデプロイ

アダプタの論理的なデプロイとは、oc4j-ra.xmlデプロイメント・ディスクリプタ・ファイルでのConnectionFactoryオブジェクトの作成を意味します。 接続情報を追加してJNDI名に割り当てるには、リソース・アダプタの対応するoc4j-ra.xmlファイルを編集します。 また、必要なアダプタのoc4j-ra.xmlファイルを手動で検索して編集する必要があります。 oc4j-ra.xmlファイルには、アダプタのランタイム接続パラメータが含まれています。

たとえば、OracleAs Adapter for Databaseを論理的にデプロイするには、次の場所にあるoc4j-ra.xmlファイルを編集します。

$ORACLE_HOME/integration/orabpel/system/appserver/oc4j/j2ee/home/application-deployments/d
efault/DbAdapter/oc4j-ra.xml.

6.5 アダプタ・ログの表示

次のOracle Application Serverアダプタのログを表示できます。

6.6 アダプタ・ヘッダーの使用

アダプタは、基礎となるバックエンド操作固有のプロパティをヘッダー要素として公開し、ビジネス・プロセス内でこれらの要素を操作できるようにします。たとえば、OracleAS Adapter for Advanced Queuingのヘッダー要素は、1つのビジネス・プロセス内に2つのAdvanced Queuingメッセージを関連付けるための相関IDやメッセージIDなど、ヘッダーのプロパティを公開します。

6.7 アダプタのトレース・レベルの設定

次のOracle Application Serverアダプタのトレース・レベルを設定します。

6.8 JDeveloper内のアダプタ・デプロイ検証

デプロイ中(JDevまたはobant)、J2CAバインディングを含むWSDLは、J2CA WSDL検証サービスにより精査されます。 WSDL検証サービスでは、J2CAバインディングを含むWSDLのみが選択されます。

検証ステップは次のように実施されます。

6.9 XML検証の有効化

BPELサーバー・ドメインのXML検証は、BPELコンソールを介して、またはPartnerLinkレベルで有効化できます。インバウンドおよびアウトバウンドのXML検証は、BPEL Process Managerで有効化できます。

6.10 XMLデータ構造の記述

Oracle Application Serverアダプタのレコード実装は、XMLRecordです。アダプタ相互作用はすべてXMLRecordで開始します。各JCAレコードは、oracle.tip.adapter.api.record.XMLRecordの実装であることが必要です。XMLRecordの各インスタンスには、1つまたは2つのRecordElementのインスタンス(1つは必須のペイロードRecordElement、もう1つはオプションのヘッダーRecordElement)があります。RecordElementsにはデータが格納されています。また、各RecordElementには、UTF-8エンコードのXML文字列または不透明(Opaque)なバイナリ・バイト・ストリームのBLOBデータが1つ含まれています。

XMLRecordは、次のメソッドで構成されます。

6.11 oc4j-ra.xmlでのパスワードの暗号化

orabpel¥binディレクトリのencryptコマンド(encrypt.shまたはencrypt.bat)を使用して、oc4j-ra.xmlファイルのパスワードを暗号化します。

各JCAリソース・アダプタ実装は、このパスワードを復号化するために、適切なアダプタ・フレームワークの復号化機能を使用する必要があります。 アダプタで復号化できないと、oc4j-ra.xmlエントリの暗号化が意味をなしません。

6.12 エラーの管理

アダプタおよびその基盤となっているアダプタ・フレームワーク(AF)・ライブラリでは、次のタイプの例外がスローされます。

6.13 接続エラーの処理

テクノロジおよびOracleAS Adapter for Oracle Applicationsのアダプタは、次の相互作用に対する接続エラーを処理できます。

6.14 アダプタ・データ・エラーの処理

次の相互作用の際に発生する可能性があるエラーを処理できます。

6.15 メッセージの順序の記述

メッセージの順序付けは、BPELプロセスを同期させることにより達成できます。これはBPELエンジンにメッセージをパブリッシュするリソース・アダプタのスレッドが、BPELインスタンス全体を実行するために使用されることを意味します。

非同期BPELプロセスでは、受信したメッセージはBPELエンジンのワーカー・スレッドのプールで処理されます。 この場合、メッセージの順序は保証されません。ほとんどの場合、BPELインスタンスの期間は他のBPELインスタンスの期間と異なるためです。

通常、JCAリソース・アダプタ・ウィザードでは、一方向(非同期)、つまり、入力メッセージのみを操作するWSDLが作成されます。 ウィザードで生成されたWSDLを手動で変更して、インプットおよびアウトプット・メッセージのあるリクエスト-レスポンス(同期)・タイプのWSDLにする必要があります。

次の例を考慮に入れて、通常は生成されないレスポンス(アウトプット)・メッセージ用のXMLスキーマ・タイプを作成してください。

<タイプ>
  <schema xmlns="http://www.w3.org/2001/XMLSchema"
          targetNamespace="http://acme.com/adapterService/">
    <import namespace="http://TargetNamespace.com/adapterService/type"
            schemaLocation="adapterTypes.xsd" />
.
.
.
      <element name="empty">
        <complexType/>
      </element>

XMLスキーマ・タイプを作成した後、次のようにWSDLメッセージを(アダプタWSDLファイル内に)定義します。

<message name="ignoreMessage">
  <part name="empty" element="tns:empty"/>
</message>

次に、例に示すように、インバウンドWSDL操作にアウトプット・メッセージを追加します。

<portType name="Receive_ptt">
  <operation name="Receive">
    <input message="tns:payloadMessage"/>
    <output message="tns:ignoreMessage"/>
  </operation>
</portType>

次に、例に示すように、バインディング・セクションにアウトプット要素を追加します。

<binding name="Receive_binding" type="tns:Receive_ptt">
  <pc:inbound_binding />
  <operation name="Receive">
    <jca:operation .../>
    <input/>
    <output/>
  </operation>
</binding>

WSDLはこれでOKです。

次に、例に示すように、BPELプロセスのビジネス・プロセス・ロジックの最後に再試行アクティビティを追加します。

<variables>
  <variable name="ignore" messageType="ns1:ignoreMessage"/>
  .
  .
  .
<sequence name="main">
  <receive partnerLink="ReceivePL" portType="ns1:Receive_ptt" 
           operation="Receive" 
           variable="Receive_1_Read_InputVariable" 
           createInstance="yes"/>
           .
           .
           .
           <!-- processing -->
  <invoke partnerLink="DB_Insert" portType="ns1:DB_Insert_ptt"
          operation="InsertCust" inputVariable="NewCust"/>
  
<reply partnerLink="ReceivePL" portType="ns1:Receive_ptt"
         operation="Receive" variable="ignore"/>
         .
         .
         .
         <!-- optionally more processing -->
</sequence>

前述の例でリソース・アダプタがマルチスレッド・インバウンドをサポートしている場合には、1つのスレッドのみを使用するように構成または調整する必要があります。複数スレッドでは、確率論的な期間によって、メッセージの順序が保証されなくなるためです。

6.16 メッセージ拒否ハンドラの記述

メッセージ拒否ハンドラは、次のことを行うように構成できます。

関連するPartnerLinkアクティビティ下でbpel.xmlファイル内にMessage Rejectionハンドラを指定します。 さらに、メッセージ拒否ハンドラをアクティブ化エージェント・プロパティの一部として定義する必要があります。 メッセージ拒否ハンドラの4つのタイプを次に示します。

6.17 アダプタでメッセージの欠落のないことを確認する方法の記述

この項では、アダプタでメッセージの欠落のないことを確認する方法、およびBPELデハイドレーション・ストアからメッセージをリカバリする方法を記述します。

BPELエンジンは常に配信を確認するよう構築されています。 デハイドレーション・ポイントは、reveive、pickおよびwaitの前と、replyおよびinvokeの後に、それぞれ設置されます。 デフォルトでは起動後のデハイドレーションは遅延しますが、チューニング・プロセス・パラメータを介して管理できます(BPELチューニング・ガイドのidempotent設定オプションを参照してください)。

JCAリソース・アダプタによって、BPELエンジンの及ぶ範囲が拡張され、配信保証も特定の方法により確実に維持されます。

トランザクション・アダプタにより、EISを1フェーズまたは2フェーズ・コミット(ローカル・トランザクション、あるいは、グローバルまたは分散トランザクション)に加えることができます。 これらのコミットは、アダプタ(インバウンド)またはBPELエンジン(アウトバウンド)により制御されます。 非トランザクション・アダプタには、トランザクション・セマンティクスを使用せずに配信を確実にするための独自のスキームが実装されています。

6.17.1 ローカル・トランザクションおよびグローバル(XA)・トランザクション

BPEL PM 10.1.3のトランザクション・アダプタでは、JCA 1.5 XA規約を介して、グローバル(2フェーズ・コミット)・トランザクションをサポートしています。 これには、Oracle Applications、Oracle Database、Advanced Queuing、JMSおよびMQSeries用のアダプタが含まれます。 非トランザクション・アダプタには、ファイル・アダプタおよびFTPアダプタが含まれます。

6.17.2 インバウンド・トランザクション

非同期BPELプロセスの場合、トランザクション・アダプタはグローバルJTAトランザクションを開始してからインバウンド・メッセージをBPELに送信します。 このインバウンド・メッセージは、BPELエンジンの配信サービスを介してデハイドレーション・ストアのキューに入ります。 制御がアダプタに戻ると、アダプタはJTAトランザクションをコミットします。このようにして、次の一連のアクションを最小の作業ユニットとして実行します。

  1. インバウンド・アダプタ・エンドポイントからのメッセージの削除をコミットします(表およびキューなど)。

  2. このメッセージのデハイドレーション・ストアへの挿入をコミットします。

この処理中に何らかの失敗があった場合、アクション1および2の両方がロールバックされることが保証されています。

アダプタからデハイドレーション・ストアへのメッセージ配信が成功した後は、そのインバウンド・メッセージは次のBPELプロセスのデハイドレーション・ポイントが発生するまで(たとえば、最初の起動まで)、ストア内に残ります。 次のデハイドレーション・ポイントで、受信アクティビティからのメッセージは配信サービスから削除されます。 これらのチェックポイント間のアクティビティはすべてJTA(グローバル)トランザクションの一部として扱われます。 2つのデハイドレーション・ポイント間でBPELサーバーに障害が発生した場合は、トランザクション全体がロールバックされて、状態が保証されます。 最新のメッセージは、次に使用可能となったBPELサーバーにより再実行されます。 これらはすべて表面的に見えることなく行われます。

同期プロセスの場合、アダプタにより開始されたグローバル・トランザクションでは、メッセージ配信およびBPELプロセスの実行が最初のリプライ・アクティビティ(通常プロセス・フローの最後に配置)までにわたります。

6.17.3 アウトバウンド・トランザクション

トランザクション・アダプタの場合、アウトバウンドJCA相互作用(invokeアクティビティ)は、グローバルBPEL JTA(ejb)トランザクションで精査されます。 これはJCAアダプタの起動を含むすべてのBPELアクティビティがグローバル・トランザクションの一部となることを意味し、そのため、すべてのアクティビティは、コミットされるか、またはエラーが発生した場合はロールバックされるかのどちらかになります。

たとえば、BPELプロセスでは、(データベース・アダプタを起動する)異なるinvokeアクティビティを介して、(異なるデータベース上の)複数の表にデータを挿入できます。 BPELインスタンスがほぼ終了すると、JTAトランザクションはコミットされます。 この時点でのみデータベースの挿入操作がコミットされます。 BPELインスタンスの実行中にエラーが生じた場合は、すべてのアクティビティ(およびデータベース操作)は最後のデハイドレーション・ポイントまでロールバックされます。

6.18 アダプタ内でのBPELクラスタ化サポート

アダプタ・フレームワークでは、インバウンド・アダプタ・サービスのアクティブ・フェイルオーバーがサポートされます。 これを実現するには、特定のJCAアクティブ化エージェントにプロパティを追加します(bpel.xml内)。次に例を示します。

<activationAgents>
  <activationAgent className="..." partnerLink="MyInboundAdapterPL">
    <property name="clusterGroupId">myBpelCluster</property>

クラスタ内の各BPEL PMサーバー(JVM)がTCP/IPのサブネットの境界を越えて配置されている場合は、属性clusterAcrossSubnet=trueを追加する必要があります。

クラスタ・グループ内では、同じアダプタ(ファイル・アダプタなど)のアクティブ化エージェントが(特定のパートナ・リンクについて)複数アクティブ化されると、そのクラスタ内でアクティブになっているアダプタ・フレームワークのすべてのインスタンスで、暗黙的かつ自動的に検出されます。 実際にメッセージの読取りまたはパブリッシュを開始するために許可されるアクティブ化は、1つのみです。 アダプタ・フレームワーク・インスタンスによって、複数あるアクティブ化のうち、どれをプライマリとするかについてはランダムに、1つが選択されます。 クラスタ内のその他のアクティブ化(インスタンス)は、JCAリソース・アダプタ上で実際にEndpointActivationを起動させずに、ホット・スタンバイ状態で開始されます。

プライマリのアクティブ化対象がいずれかのポイントで反応しなくなった場合、つまり、手動で非アクティブ化されたり、クラッシュまたは終了した場合は、クラスタ・グループの残りのアダプタ・フレームワーク・メンバーのうちの1つが即時にこれを検出し、プライマリのアクティブ化対象をスタンバイのアクティブ化エージェントのうちの1つに割り当てます。 この機能では、実装の基底部分でJGroupsのclusterGroupIdプロパティを使用しています。

6.19 アダプタ・サービスのデプロイ

アダプタ・サービスは、JDeveloperとBPELコンソールを使用して、2つの方法でデプロイできます。また、BPELプロセスをデプロイすることでもアダプタ・サービスがデプロイされます。アダプタ・サービスは、BPELコンソールを使用して削除できます。

6.20 バッチ化およびバッチ分割化のサポート

バッチ化およびバッチ分割化機能は、OracleAS Adapter for Files、OracleAS Adapter for FTPおよびOracleAS Adapter for Databasesのみでサポートされます。OracleAS Adapter for FilesおよびOracleAS Adapter for FTPは、単一の大きなファイルを複数のバッチに分割できるリーダーで構成されます。設計時の構成でバッチ・サイズを指定する必要があります。また、アダプタには、一連のメッセージを単一のファイルにバッチ化するライターが含まれています。

OracleAS Adapter for Databasesは、一連の表をポーリングしてイベントを検出するパブリッシュ・コンポーネントで構成されます。このコンポーネントは、一度に1つのレコードまたは一度に複数のレコードをBPELプロセスに呼び出すことができます。

6.21 リポジトリの移行

アダプタ構成ウィザードで生成されるすべてのアダプタ・サービスWSDLは、JNDI名への参照を持ちます。 この参照は、アダプタのデプロイメント・ディスクリプタであるoc4j-ra.xml内で、jca:address要素のロケーション属性を介して定義されます。 これが、開発環境から本番環境のためのテスト環境へ移行する際のキーとなります。 oc4j-ra.xmlファイルを更新して、開発、テストおよび本番の3つの環境すべてにおいて同じJNDI名を持つようにする必要があります。 再試行間隔や再試行回数など、デプロイ時のプロパティに対して値を指定し、その後、テスト環境や本番環境に再デプロイする必要があります。 oc4j-ra.xmlでは、エンドポイントが開発EIS、テストEISまたは本番EISとして識別されます。 たとえば、データベース・アダプタ・サービス・ウィザードを介して実行する場合に、createCustomerサービス用のJNDI名としてeis/DB/custStoreを指定したとします。 このアダプタ・サービスを使用してBPELプロセスをモデリングした後は、これを変更せずに開発、テストまたは本番環境にデプロイする必要があります。 ただし、これを実行する前に、各環境において、正しいEISインスタンスを示すeis/DB/custStoreに対応したJNDIエントリがあることを確認してください。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引