ヘッダーをスキップ
Oracle® Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド
11g リリース1 (11.1.1.5.0)
B55918-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 Oracle JCA Adapter for Sockets

この章では、外部サービスとしてOracle BPEL Process Manager(Oracle BPEL PM)およびOracle Mediator(メディエータ)で動作する、Oracle JCA Adapter for Sockets(Oracleソケット・アダプタ)の使用方法について説明します。

この章には、次の項が含まれます。

5.1 Oracleソケット・アダプタの概要

Oracleソケット・アダプタはJCA 1.5準拠のアダプタであり、TCP/IPソケットを介した通信用の標準または非標準プロトコルのモデル化に使用されます。Oracleソケット・アダプタを使用すると、クライアントまたはサーバー・ソケットの作成や、接続の確立が可能です。テキストまたはバイナリのデータを転送できます。

この項には、次の項目が含まれます。

5.1.1 Oracleソケット・アダプタのアーキテクチャ

Oracleソケット・アダプタは、JCA 1.5アーキテクチャに基づいています。JCAでは、異機種間のエンタープライズ情報システム(EIS)の統合に標準アーキテクチャを提供します。Oracleソケット・アダプタのJCAバインディング・コンポーネントでは、基盤となるJCA相互作用がOracle BPEL PM統合のサービス(JCAバインディングを使用したWSDL)として公開されています。図5-1に、Oracleソケット・アダプタのアーキテクチャを示します。Oracle JCAアダプタのアーキテクチャの詳細は、第1.2.1.1項「アーキテクチャ」を参照してください。

図5-1 Oracleソケット・アダプタのアーキテクチャ

図5-1の説明が続きます
「図5-1 Oracleソケット・アダプタのアーキテクチャ」の説明

5.1.2 Oracleソケット・アダプタとメディエータの統合

Oracleソケット・アダプタは、自動的にメディエータと統合されます。JDeveloperデザイナでOracle Socketサービスを作成すると、アダプタ構成ウィザードが起動します。このウィザードでOracleソケット・アダプタを構成できます。構成が完了すると、Oracle JDeveloper(JDeveloper)の「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。

アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。

Oracle JCAアダプタとメディエータの統合の詳細は、第3.2項「アダプタとOracle Fusion Middlewareの統合」を参照してください。

5.1.3 Oracleソケット・アダプタとBPEL PMの統合

Oracleソケット・アダプタは、自動的にOracle BPEL PMと統合されます。JDeveloper BPELデザイナの「コンポーネント・パレット」から「ソケット・アダプタ」をドラッグ・アンド・ドロップすると、図5-2に示すように、アダプタ構成ウィザードが起動して「ようこそ」ページが表示されます。

図5-2 「アダプタ構成ウィザード - ようこそ」ページ

図5-2の説明が続きます
「図5-2 「アダプタ構成ウィザード - ようこそ」ページ」の説明

このウィザードでOracleソケット・アダプタを構成できます。アダプタ構成ウィザードでは、図5-3に示すように、サービス名の入力を求められます。

図5-3 「アダプタ構成ウィザード - サービス名」ページ

図5-3の説明が続きます
「図5-3 「アダプタ構成ウィザード - サービス名」ページ」の説明

構成が完了すると、JDeveloperの「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。

アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。

Oracle JCAアダプタとOracle BPEL PMの統合の詳細は、第3.2項「アダプタとOracle Fusion Middlewareの統合」を参照してください。

5.1.4 Oracleソケット・アダプタとSOAコンポジットの統合

コンポジットは、まとめて設計されて単一アプリケーションにデプロイされるサービス、サービス・コンポーネント(Oracle BPEL PMおよびメディエータ)、ワイヤおよび参照のアセンブリです。コンポジットにより、メッセージに記述された情報が処理されます。コンポジットの詳細は、composite.xmlファイルに格納されます。Oracleソケット・アダプタとSOAコンポジットの統合の詳細は、第3.2.4項「Oracle SOAコンポジットとアダプタの統合」を参照してください。

5.2 Oracleソケット・アダプタの機能

Oracleソケット・アダプタを使用すると、TCP/IPソケットを介してデータの読取りおよび書込みをするようにBPELプロセスまたはメディエータ・サービスを構成できます。次の特徴があります。

5.3 Oracleソケット・アダプタの概念

この項では、Oracleソケット・アダプタの次の概念について説明します。

5.3.1 通信モード

Oracleソケット・アダプタでは、ソケットを介したインバウンドおよびアウトバウンドの通信(単方向または双方向)をサポートしています。Oracleソケット・アダプタの通信モードは、次の各項で説明します。

5.3.1.1 インバウンド同期リクエスト/レスポンス

インバウンド起動の一環として、Oracleソケット・アダプタはサーバー・ソケットを開き、着信接続を待機します。アダプタではサーバー・ソケットへの接続を使用し、リクエスト・メッセージを読み取ります。このメッセージはBPELまたはメディエータにパブリッシュされます。Oracleソケット・アダプタでは次に、同じ接続を使用してレスポンスを同期的に返信します。

図5-4に、インバウンド同期リクエスト/レスポンスのシナリオを示します。

図5-4 インバウンド同期リクエスト/レスポンスのBPELシナリオ

図5-4の説明が続きます
「図5-4 インバウンド同期リクエスト/レスポンスのBPELシナリオ」の説明

5.3.1.2 アウトバウンド同期リクエスト/レスポンス

アウトバウンド同期リクエスト/レスポンスの場合、リクエストはBPELまたはメディエータから行われます。Oracleソケット・アダプタはサーバー・ソケットに接続し、リクエスト・メッセージをサーバー・ソケットに出力ストリームで送信します。Oracleソケット・アダプタは次に、サーバー・ソケットからのレスポンスを入力ストリームでブロックし、レスポンスをBPELまたはメディエータに返信します。

図5-5に、アウトバウンド同期リクエスト/レスポンスのシナリオを示します。

図5-5 アウトバウンド同期リクエスト/レスポンスのBPELシナリオ

図5-5の説明が続きます
「図5-5 アウトバウンド同期リクエスト/レスポンスのBPELシナリオ」の説明

5.3.1.3 インバウンド受信

インバウンド起動の一環として、Oracleソケット・アダプタはサーバー・ソケットを開き、着信接続を待機します。アダプタではサーバー・ソケットへの接続を使用し、リクエスト・メッセージを読み取ります。このメッセージはBPELまたはメディエータにパブリッシュされます。このシナリオでは、リプライは送信されません。

5.3.1.4 アウトバウンド起動

アウトバウンドの一方向の起動シナリオの場合、リクエストはBPELまたはメディエータから行われます。Oracleソケット・アダプタはサーバー・ソケットに接続し、リプライを期待せずに、リクエスト・メッセージをサーバー・ソケットに出力ストリームで送信します。

5.3.2 プロトコル定義メカニズム

通信プロトコルまたはハンドシェイクは、認証手順、確認、状況に応じたデータの送受信など、異なる個別のステップで構成されます。Oracleソケット・アダプタでは、プロトコル・ハンドシェイクを定義する次の各メカニズムをサポートしています。

5.3.2.1 スタイルシートを使用したハンドシェイク・メカニズムを持つプロトコル

Oracleソケット・アダプタは、アダプタによって公開されるXPath拡張関数を使用するスタイルシートで定義される、ハンドシェイク・メカニズムで設計されたプロトコルを使用するように構成できます。ソケットのI/Oストリーム上、またはストリームの最後までの細かい読取りおよび書込み操作が可能です。これらの関数によって、データの読取りおよび書込みにネイティブ・フォーマットの構成メンバーを使用することも可能になります。このハンドシェイク・メカニズムでは、XSLT構成メンバーを使用して割当て、検証、制御フローなどの操作を定義します。

XPath拡張関数はトランスレータ・インフラストラクチャで次のように使用できます。

  • NXSDフレームワークで公開されるStyleReaderを使用して、次のメソッドでソケット・ストリームからの読取りおよび書込みを行います。

    • socketRead(nxsdStyle:String, nxsdStyleAttributes:String):String

      このメソッドを、ソケットの入力ストリームからの読取りに使用できます。

    • socketWrite(value:String, nxsdStyle:String, nxsdStyleAttributes:String):String

      このメソッドを、ソケットの出力ストリームへの書込みに使用できます。

    図5-6に示すXSLTは、StyleReaderを使用する拡張関数の使用方法を示しています。

    図5-6 StyleReaderを使用する拡張関数を利用したXSLT

    図5-6の説明が続きます
    「図5-6 StyleReaderを使用する拡張関数を利用したXSLT」の説明

  • 入力および出力変数を定義するスキーマに注釈を付け、NXSD構成メンバーを使用して、次のメソッドでソケット・ストリームからの読取りおよび書込みを行います。

    • socketReadWithXlation():DocumentFragment

      このメソッドを、入力用に構成されたスキーマおよびスキーマ要素を使用した、ソケットの入力ストリームからの読取りに使用できます。

    • socketWriteWithXlation(xml:NodeList)

      このメソッドを、出力用に構成されたスキーマを使用した、ソケットの出力ストリームへの書込みに使用できます。

    図5-7に示すXSDファイルは、NXSD構成メンバーを使用して、入力および出力変数を定義するスキーマに注釈を付け、拡張関数の使用方法を示しています。

    図5-7 StyleReaderを使用しない拡張関数を利用したXSD

    図5-7の説明が続きます
    「図5-7 StyleReaderを使用しない拡張関数を利用したXSD」の説明

スタイルシートを使用してハンドシェイクを定義するには、図5-8に示すように、「プロトコル」ページで「XSLTを使用してハンドシェイクを定義します」を選択し、参照してXSLファイルを選択する必要があります。

図5-8 スタイルシートを使用したハンドシェイク・メカニズムを持つプロトコルの定義

図5-8の説明が続きます
「図5-8 スタイルシートを使用したハンドシェイク・メカニズムを持つプロトコルの定義」の説明

5.3.2.2 カスタムJavaコードを使用したハンドシェイク・メカニズムを持つプロトコル

Oracleソケット・アダプタは、カスタムJavaコードのプラグインによって定義される、カスタマイズされたハンドシェイク・メカニズムを持つプロトコルを使用するように構成できます。このカスタムJavaコードは、ICustomParserインタフェースoracle.tip.pc.services.translation.util.ICustomParserを実装する必要があります。このインタフェースはOracleソケット・アダプタで提供され、ハンドシェイクのカスタム実装を可能にします。


注意:

ICustomParserインタフェース・ファイルは、bpm-infra.jarファイル内にあります。このjarファイルは、次のディレクトリにあります。

$SOA_ORACLE_HOME/soa/modules/oracle.soa.fabric_11.1.1


該当する通信パラダイムに基づき、次のメソッドを実装する必要があります。

  • public Element executeOutbound(InputStream in, OutputStream out, Element payLoad) throws Exception;

    アウトバウンド・ハンドシェイクはこのメソッドを実装する必要があります。

    例:

    public Element executeOutbound(InputStream in, OutputStream out, Element payLoad) throws Exception {
        BufferedReader in1 = new BufferedReader(new InputStreamReader(in));
        PrintWriter out1 = new PrintWriter(new OutputStreamWriter(out));
     
        out1.println(payLoad.getFirstChild().getNodeValue());
          
        String retVal = in1.readLine();
      
        StringBuffer strBuf = new StringBuffer();
        strBuf.append("<?xml version='1.0' encoding='" + enc + "' ?>"
                + "<out xmlns='http://xmlns.oracle.com/EchoServer/'>");
            strBuf.append(retVal + "</out>");
     
        DOMParser parser = new DOMParser();
        parser.setValidationMode(DOMParser.NONVALIDATING);
            Element elem = (Element) parser.getDocument().getElementsByTagName(
                "out").item(0);
     
        return elem;
    }
    
  • public Element executeInboundRequest(InputStream in) throws Exception;

    インバウンド・リクエストはこのメソッドを実装する必要があります。

    例:

    public Element executeInboundRequest(InputStream in) throws Exception {
        BufferedReader in1 = new BufferedReader(new InputStreamReader(in));
     
        String input = in1.readLine();
      
        StringBuffer strBuf = new StringBuffer();
        strBuf.append("<?xml version='1.0' encoding='" + enc + "' ?>"
                + "<EchoClientProcessRequest xmlns='http://xmlns.oracle.com/EchoClient'>");
     
            strBuf.append("<input>" + input + "</input></EchoClientProcessRequest>");
     
        DOMParser parser = new DOMParser();
        parser.setValidationMode(DOMParser.NONVALIDATING);
        parser.parse(new InputSource(new StringReader(strBuf.toString())));
        Element elem = (Element) parser.getDocument().getElementsByTagName(
                "EchoClientProcessRequest").item(0);
     
        return elem;
    }
    
  • public void executeInboundReply(Element payLoad, OutputStream out) throws Exception;

    インバウンド・リプライはこのメソッドを実装する必要があります。

    例:

    public void executeInboundReply(Element payLoad, OutputStream out) throws Exception {
        PrintWriter out1 = new PrintWriter(new OutputStreamWriter(out));
       
        NodeList list = payLoad.getChildNodes();
        String retVal = null;
        for(int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            NodeList list1 = node.getChildNodes();
            for(int j = 0; j < list1.getLength(); j++) {
                Node node1 = list1.item(j);
                if(node1.getNodeType() == Node.TEXT_NODE) {
                        retVal = node1.getNodeValue();
                }
            }
        }
        out1.println(retVal);
        out1.flush();
    }
    

注意:

inはソケットの入力ストリームへのハンドルで、outはソケットの出力ストリームへのハンドルです。

カスタムJavaコードを使用してハンドシェイクを定義するには、図5-9に示すように、「カスタムJavaコードを使用してハンドシェイクを定義します」を選択し、「Javaクラス」フィールドでハンドシェイクを実装するJavaクラスを指定する必要があります。

図5-9 カスタムJavaコードを使用したハンドシェイク・メカニズムを持つプロトコルの定義

図5-9の説明が続きます
「図5-9 カスタムJavaコードを使用したハンドシェイク・メカニズムを持つプロトコルの定義」の説明

5.3.2.3 ハンドシェイク・メカニズムを持たないプロトコル

Oracleソケット・アダプタは、ソケットのI/Oストリームとの間の変換に関連するハンドシェイクを必要としないプロトコルを使用するように構成できます。

ハンドシェイクを必要としないプロトコルを使用するには、図5-10に示すように、「プロトコル」ページで「ハンドシェイクなし」を選択する必要があります。

図5-10 ハンドシェイク・メカニズムを持たないプロトコルの定義

図5-10の説明が続きます
「図5-10 ハンドシェイク・メカニズムを持たないプロトコルの定義」の説明

5.3.3 キャラクタ・エンコーディングとバイト順

「エンコーディング」プロパティはネイティブ・データの格納に使用されるキャラクタ・エンコーディングを表し、「バイト順」プロパティはネイティブ・データのバイト順(BIG_ENDIANまたはLITTLE_ENDIAN)です。

キャラクタ・エンコーディングとバイト順は、ネイティブ・フォーマット・ビルダー・ウィザードを使用してスキーマ・ファイル(NXSD)内で指定できます。また、使用するエンコーディングとバイト順をアダプタ構成ウィザードで指定することもできます。エンコーディングとバイト順を指定しない場合、デフォルト値はUS-ASCIIBIG_ENDIANです。

変換を使用する場合にのみ適用可能なエンコーディングとバイト順の値を指定するには、アダプタ構成ウィザードの「プロトコル」ページで次の手順を実行する必要があります。

  1. 図5-11に示すように、「プロトコル」ページの「エンコーディング/バイト順」セクションで「エンコーディング/バイト順の指定」オプションを選択します。

    図5-11 「アダプタ構成ウィザード - プロトコル」ページ

    図5-11の説明が続きます
    「図5-11 「アダプタ構成ウィザード - プロトコル」ページ」の説明

  2. 次のいずれかのタスクを実行してエンコーディングを設定します。

    1. スキーマ・ファイルで指定されたエンコーディングを使用するには、「エンコーディング」の選択を解除したままにします。

    2. アダプタ構成ウィザードを使用してエンコーディングを指定するには、「エンコーディング」を選択し、「エンコーディング」リストからエンコーディング・タイプを選択します。


      注意:

      「エンコーディング」を選択した場合、アダプタ構成ウィザードを使用して指定したエンコーディング・タイプがNXSDファイル内で指定されているエンコーディング・タイプよりも優先されます。

  3. 次のいずれかのタスクを実行してバイト順を設定します。

    1. スキーマ・ファイルで指定したバイト順を使用するには、「スキーマからバイト順の値を使用します」を選択します。

    2. アダプタ構成ウィザードを使用してバイト順を指定するには、「バイト順」を選択し、「バイト順」リストからバイト順を選択します。

  4. 「終了」をクリックします。
    「終了」をクリックした後で、構成ウィザードに、ソケット・アダプタの構成が完了したことを示すページが表示されます。

5.3.4 パフォーマンス・チューニング

Oracleソケット・アダプタでは、次のパフォーマンス・チューニング機能がサポートされています。

パフォーマンス・チューニングの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』のOracleソケット・アダプタのチューニングに関する項を参照してください。

5.3.4.1 Oracleソケット・アダプタの接続プーリングの構成

Oracleソケット・アダプタのパフォーマンスを最適化する方法の1つとして、接続プールの使用があります。接続先のソケット・サーバーが相互作用のたびにソケットを閉じないかぎり、接続プールを使用できます。接続プールを使用すると、ソケット接続を繰り返し使用でき、相互作用のたびに新規のソケットを作成するオーバーヘッドを回避できます。Oracleソケット・アダプタの接続プールは、Oracle WebLogic Serverコンソールを使用して構成する必要があります。


注意:

接続プール機能は、アウトバウンド相互作用にのみ適用されます。

Oracleソケット・アダプタの接続プーリングを構成する手順は、次のとおりです。

  1. Oracle WebLogic Serverコンソールにログインします。コンソールにアクセスするには、http://servername:portnumber/consoleにナビゲートします。

  2. 「ドメイン構造」の左ペインで「デプロイメント」をクリックします。「デプロイメントの概要」ページが表示されます。

    図5-12 Oracle WebLogic Serverコンソール: 「デプロイメントの概要」ページ

    図5-12の説明が続きます
    「図5-12 Oracle WebLogic Serverコンソール: 「デプロイメントの概要」ページ」の説明

  3. 「SocketAdapter」をクリックします。「SocketAdapterの設定」ページが表示されます。

  4. 「構成」タブをクリックします。

  5. 「アウトバウンド接続プール」タブをクリックし、javax.resource.cci.ConnectionFactoryを開いて図5-13に示すように構成済のコネクション・ファクトリを表示します。

    図5-13 Oracle WebLogic Serverコンソール: 「SocketAdapterの設定」ページ

    図5-13の説明が続きます
    「図5-13 Oracle WebLogic Serverコンソール: 「SocketAdapterの設定」ページ」の説明

  6. 「eis/socket/SocketAdapter」をクリックします。「javax.resource.cci.ConnectionFactoryの設定」ページが表示されます。

  7. 図5-14に示すように、KeepAliveコネクション・ファクトリのプロパティをtrueに設定します。Oracleソケット・アダプタの接続プール機能が有効になります。

    図5-14 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ

    図5-14の説明が続きます
    「図5-14 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ」の説明

  8. 「保存」をクリックします。図5-15に示すように、メッセージ「デプロイメント・プランが正常に更新されました。」を含む「javax.resource.cci.ConnectionFactoryの設定」ページが表示されます。

    図5-15 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ

    図5-15の説明が続きます
    「図5-15 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ」の説明


注意:

接続プール・パラメータは、Oracle WebLogic Server管理コンソールの「接続プール」タブを使用して変更できます。

5.4 Oracleソケット・アダプタの構成

Oracleソケット・アダプタを構成するには、次のタスクを実行する必要があります。

5.4.1 weblogic-ra.xmlファイルの変更

Oracleソケット・アダプタを構成するには、表5-1にリストされているプロパティの値をweblogic-ra.xmlファイルに指定する必要があります。これらのプロパティはOracle WebLogic Server管理コンソールから更新できます。詳細は、第2.19項「アダプタ・コネクション・ファクトリの追加」を参照してください。

表5-1 Oracleソケット・アダプタの構成プロパティ

プロパティ 説明

Host

アウトバウンド相互作用の場合は、ソケット・サーバーが実行されていて、接続先となるシステム名。インバウンド相互作用の場合は、常にlocalhostです。

Port

アウトバウンド相互作用の場合は、ソケット・サーバーが実行されていて、アダプタの接続先となるポート番号です。インバウンド相互作用の場合は、着信接続をソケット・アダプタがリスニングするポート番号です。

Timeout

この値がゼロ以外のタイムアウト間隔に設定されている場合、このソケットに関連付けられているInputStreamに対するread()コールは、このプロパティで指定された時間のみブロックされます。タイムアウト間隔に達すると、ソケットはまだ有効であっても、java.net.SocketTimeoutExceptionが発生します。このオプションは、ブロック操作が有効になる前に有効にする必要があります。タイムアウト間隔は0より大きい値を指定する必要があります。タイムアウト間隔に0を指定すると、無限タイムアウトと解釈されます。値はミリ秒単位です。

KeepAlive

アウトバウンド相互作用の場合にのみ適用可能。接続プール機能を使用するには、trueに設定する必要があります。

BacklogQueue

インバウンド相互作用の場合に適用可能。この値は、着信接続指示(接続リクエスト)の最大キュー長さを示します。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。


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

<wls:connection-instance>
                <wls:description>Socket Adapter</wls:description>
                <wls:jndi-name>eis/socket/SocketAdapter</wls:jndi-name>
                <wls:connection-properties>
                    <wls:pool-params>
                        <wls:initial-capacity>0</wls:initial-capacity>
                        <wls:max-capacity>200</wls:max-capacity>
                        <wls:capacity-increment>5</wls:capacity-increment>
                        <wls:shrinking-enabled>true</wls:shrinking-enabled>
                        <wls:shrink-frequency-seconds>60</wls:shrink-frequency-seconds>
                        <wls:connection-creation-retry-frequency-seconds>2</wls:connection-creation-retry-frequency-seconds>
                        <wls:connection-reserve-timeout-seconds>5</wls:connection-reserve-timeout-seconds>
                        <wls:match-connections-supported>true</wls:match-connections-supported>
                        <wls:use-first-available>true</wls:use-first-available>
                    </wls:pool-params>
                    <wls:transaction-support>NoTransaction</wls:transaction-support>
                    <wls:reauthentication-support>true</wls:reauthentication-support>
                    <wls:properties>
                        <wls:property>
                            <wls:name>Host</wls:name>
                            <wls:value>localhost</wls:value>
                        </wls:property>
                        <wls:property>
                            <wls:name>Port</wls:name>
                            <wls:value>12110</wls:value>
                        </wls:property>
                        <wls:property>
                            <wls:name>Timeout</wls:name>
                            <wls:value>10000</wls:value>
                        </wls:property>
                        <wls:property>
                            <wls:name>BacklogQueue</wls:name>
                            <wls:value>0</wls:value>
                        </wls:property>
                        <wls:property>
                            <wls:name>KeepAlive</wls:name>
                            <wls:value>True</wls:value>
                        </wls:property>
                    </wls:properties>
                    <wls:res-auth>Application</wls:res-auth>
                </wls:connection-properties>
            </wls:connection-instance>

注意:

接続プーリングを設定するには、KeepAliveプロパティをtrueに設定する必要があります。

5.4.2 ハンドシェイクのモデル化

クライアントまたはサーバー・ソケットと接続をネゴシエートするには、ハンドシェイクが必要な場合があります。

5.4.2.1 アウトバウンド・ハンドシェイクのモデル化

アウトバウンドXSLTでは、起動されたメッセージに対応する入力を使用します。アウトバウンドXSLTでは、拡張関数を使用してソケットの出力ストリームに書き込みます。この出力は、単方向通信ではダミーであり、双方向通信ではレスポンスになります。

次の例は、同期リクエスト/レスポンス通信パラダイムのモデル化を示しています。

<xsl:stylesheet 
...
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" />
xmlns:request="http://www.TragetNameSpace.com/Request" >
 
  <xsl:template match="/">
 
    <!–- Write the entire content of "books" element using translator -->
    <xsl:variable name="username" select="socket:socketWriteWithXlation(.)" />
 
    <!–- Read the stream using translator -->
    <xsl:copy-of select="socket:socketReadWithXlation()" />
    
  </xsl:template>
</xsl:stylesheet>

5.4.2.2 インバウンド・ハンドシェイクのモデル化

インバウンドXSLTでは、ダミー入力を使用し、拡張関数を通じてソケットの入力ストリームを読み取り、パブリッシュするXMLレコードを作成します。

次の例は、クライアントが、カンマ(,)で終了するユーザーIDとセミコロン(;)で終了するパスワードを検証用に送信してから、メッセージ・ペイロードを送信するハンドシェイクを示しています。

<xsl:stylesheet 
...
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" />
  <xsl:template match="/">
    <!-- Read the user name -->
    <xsl:variable name="username" select="socket:socketRead('terminated','terminatedBy=,')" />   
    <!-- Read password if user name is correct -->
    <xsl:if test="normalize-space($username)='user'">
      <xsl:variable name="password" select="socket:socketRead('terminated','terminatedBy=;')" />
      <!-- If password is correct proceed to read the payload using translator -->
      <xsl:if test="normalize-space($password)='password'">
        <!--  Send an OK -->
        <xsl:variable name="ack1" select="socket:socketWrite('001','','')" />

        <output>
<!--  Wait for the payload -->
          <xsl:copy-of select="socket:socketReadWithXlation()" />
        </output>
 
      </xsl:if>
      <!--  Send an error -->
      <xsl:else><xsl:variable name="ack2" select="socket:socketWrite('000','','')" /></xsl:else>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

5.4.3 XSLマッパー・ツールを使用したXSLファイルの設計

Oracleソケット・アダプタの場合、XSLマッパー・ツールを使用してXSLファイルを設計できます。次の各項では、様々な通信シナリオに使用するXSLの設計手順について説明します。

5.4.3.1 インバウンド同期リクエスト/リプライに使用するXSLの設計

この項では、XSLマッパー・ツールを使用してインバウンド同期リクエスト/リプライのシナリオのXSLを設計する手順について説明します。


注意:

この使用例を実行するには、Adapters-101SocketAdapterHelloWorldサンプルに含まれているartifacts.zipファイルの次のファイルが必要です。
  • artifacts/schemas/HelloWorld.xsd

Oracle SOA Sample CodeサイトでAdapters-101SocketAdapterHelloWorldサンプルにアクセスできます。

このファイルをHelloWorldCompositeプロジェクトのHelloWorldComposite\xsdフォルダにコピーします。


SOAコンポジットの設計

SOAコンポジットを設計するには、第5.5.1.2項「SOAコンポジットの設計」で説明する手順を実行します。


注意:

第5.5.1.2項「SOAコンポジットの設計」の手順は、Oracle BPEL PMを使用するコンポジットに適用可能です。または、メディエータでコンポジットを作成することもできます。

インバウンドOracleソケット・アダプタ・サービスの作成

インバウンドOracleソケット・アダプタ・サービスを作成する手順は、次のとおりです。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにサービス名としてHelloWorldを入力して「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  4. 図5-16に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

    図5-16 「アダプタ構成ウィザード - アダプタ・インタフェース」ページ

    図5-16の説明が続きます
    「図5-16 「アダプタ構成ウィザード - アダプタ・インタフェース」ページ」の説明

  5. 「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択し、「次へ」をクリックします。「ソケット接続」ページが表示されます。

  6. 図5-17に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapterと入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

    図5-17 「アダプタ構成ウィザード - ソケット接続」ページ

    図5-17の説明が続きます
    「図5-17 「アダプタ構成ウィザード - ソケット接続」ページ」の説明

  7. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  8. 図5-18に示すように、「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。

    図5-18 「タイプ・チューザ」ダイアログ

    図5-18の説明が続きます
    「図5-18 「タイプ・チューザ」ダイアログ」の説明

  9. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  10. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。

  12. 「OK」をクリックします。図5-19に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

    図5-19 「アダプタ構成ウィザード - メッセージ」ページ

    図5-19の説明が続きます
    「図5-19 「アダプタ構成ウィザード - メッセージ」ページ」の説明

  13. 「次へ」をクリックします。図5-20に示すように、「プロトコル」ページが表示されます。

    図5-20 「アダプタ構成ウィザード - プロトコル」ページ

    図5-20の説明が続きます
    「図5-20 「アダプタ構成ウィザード - プロトコル」ページ」の説明

  14. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  15. 「Xslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。図5-21に示すように、「入力」ダイアログが表示されます。

    図5-21 「プロトコル」ページの「入力」ダイアログ

    図5-21の説明が続きます
    「図5-21 「プロトコル」ページの「入力」ダイアログ」の説明

  16. 図5-21に示すように、XSLファイル名としてデフォルト値のrequest.xslを使用し、「OK」をクリックします。

  17. 「ReplyXslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。「入力」ダイアログが表示されます。

  18. XSLファイル名としてデフォルト値のreply.xslを使用し、「OK」をクリックします。

  19. 「終了」をクリックします。request.xslおよびreply.xslファイルが作成されます。

    図5-22に、「request.xsl」ページを示します。

    図5-22 JDeveloper: 「request.xsl」ページ

    図5-22の説明が続きます
    「図5-22 JDeveloper: 「request.xsl」ページ」の説明


    注意:

    request.xsl」ページの左側にある「ソース」ペインにはdummy.xsdファイルが表示され、これがXSLマッパー・ツールのソースとして使用されます。

    インバウンド・リクエスト・シナリオの場合、Oracleソケット・アダプタはソケットが受信するネイティブ・データを読み取ってXMLフォーマットに変換します。つまり、ソース側にXMLファイルはありません。XSLTマッパーは常にソースおよびターゲットXSDファイルを必要とするため、マッパー・ツールにはダミーのXSDファイルが表示されます。


    図5-23に、「reply.xsl」ページを示します。

    図5-23 JDeveloper: 「reply.xsl」ページ

    図5-23の説明が続きます
    「図5-23 JDeveloper: 「reply.xsl」ページ」の説明


    注意:

    reply.xsl」ページの右側にあるターゲット・ペインには、dummy.xsdファイルが表示されます。このdummy.xsdファイルは、XSLマッパー・ツールのターゲットとして使用されます。

  20. インバウンド同期リクエスト/リプライ操作のリクエスト部分を次の手順で定義します。

    1. 図5-24に示すように、「request.xsl」ページで、「コンポーネント・パレット」の「Advanced Functions」リストからsocketReadを中央ペインにドラッグ・アンド・ドロップします。

      図5-24 JDeveloper: 「request.xsl」ページ

      図5-24の説明が続きます
      「図5-24 JDeveloper: 「request.xsl」ページ」の説明

    2. socketRead拡張関数をダブルクリックします。「関数の編集 - socketRead」ダイアログが表示されます。

    3. 図5-25に示すように、「nxsdStyle」および「nxsdStyleAttributes」フィールドに関数パラメータを入力します。

      図5-25 「関数の編集 - socketRead」ダイアログ

      図5-25の説明が続きます
      「図5-25 「関数の編集 - socketRead」ダイアログ」の説明


      注意:

      socketRead関数は、NXSDフレームワークで公開されているStyleReaderを使用してソケットの入力ストリームから読み取ります。

    4. 「OK」をクリックします。「request.xsl」(XSLマッパー・ツール)ページが表示されます。

    5. 中央ペインにあるsockRead関数を、右ペインにあるターゲットinputノードにリンクします。図5-26に示すように、XSLマッピングを示すrequest.xsl(XSLマッパー・ツール)が表示されます。

      図5-26 JDeveloper: 「request.xsl」ページ

      図5-26の説明が続きます
      「図5-26 JDeveloper: 「request.xsl」ページ」の説明

  21. インバウンド同期リクエスト/リプライ操作のリプライ部分を次の手順で定義します。

    1. 「コンポーネント・パレット」リストから「拡張」を選択し、「Advanced Functions」を選択します。拡張関数のリストが表示されます。

    2. 「reply.xsl」ページで、「コンポーネント・パレット」の「Advanced Functions」リストからsocketWriteを中央ペインにドラッグ・アンド・ドロップします。

    3. socketWrite拡張関数をダブルクリックします。「関数の編集 - socketWrite」ダイアログが表示されます。

    4. 図5-27に示すように、「valueToWrite」「nxsdStyle」および「nxsdStyleAttributes」フィールドに関数パラメータを入力します。

      図5-27 「関数の編集 - socketWrite」ダイアログ

      図5-27の説明が続きます
      「図5-27 「関数の編集 - socketWrite」ダイアログ」の説明


      注意:

      socketWrite関数は、NXSDフレームワークで公開されているStyleReaderを使用してソケットの出力ストリームに書き込みます。

    5. 「OK」をクリックします。「reply.xsl」(XSLマッパー・ツール)ページが表示されます。

    6. 中央ペインにあるsockWrite関数を、右ペインにあるターゲットinputノードにリンクします。図5-28に示すように、XSLマッピングを示すreply.xsl(XSLマッパー・ツール)が表示されます。

      図5-28 JDeveloper: 「reply.xsl」ページ

      図5-28の説明が続きます
      「図5-28 JDeveloper: 「reply.xsl」ページ」の説明

  22. 「ファイル」「すべて保存」を順番にクリックします。インバウンドOracleソケット・アダプタのrequest.xslおよびreply.xslファイルが作成されます。

5.4.3.2 アウトバウンド同期リクエスト/リプライに使用するXSLの設計

この項では、XSLマッパー・ツールを使用してアウトバウンド同期リクエスト/リプライのシナリオのXSLを設計する手順について説明します。


注意:

この使用例を実行するには、Adapters-101SocketAdapterHelloWorldサンプルに含まれているartifacts.zipファイルの次のファイルが必要です。
  • artifacts/schemas/HellowWorld.xsd

Oracle SOA Sample CodeサイトでAdapters-101SocketAdapterHelloWorldサンプルにアクセスできます。

HelloWorld.xsdファイルをHelloWorldCompositeプロジェクトのHelloWorldComposite\xsdにコピーします。


SOAコンポジットの設計

SOAコンポジットを設計するには、第5.5.1.2項「SOAコンポジットの設計」で説明する手順を実行します。


注意:

第5.5.1.2項「SOAコンポジットの設計」の手順は、Oracle BPEL PMを使用するコンポジットに適用可能です。または、メディエータでコンポジットを作成することもできます。

アウトバウンドOracleソケット・アダプタ参照の作成

アウトバウンドOracleソケット・アダプタ参照を作成する手順は、次のとおりです。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにサービス名としてHelloWorldを入力して「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  4. 図5-16に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  5. 「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択し、「次へ」をクリックします。「ソケット接続」ページが表示されます。

  6. 「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapterと入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

  7. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  8. 図5-18に示すように、「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。

  9. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  10. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。

  12. 「OK」をクリックします。図5-19に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  13. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  14. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  15. 「Xslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。「入力」ダイアログが表示されます。

  16. XSLファイル名としてデフォルト値のinvoke.xslを使用し、「OK」をクリックします。

  17. 「終了」をクリックします。図5-29に示すように、XSLマッパー・ツールにinvoke.xslファイルが表示されます。

    図5-29 JDeveloper: 「invoke.xsl」ページ

    図5-29の説明が続きます
    「図5-29 JDeveloper: 「invoke.xsl」ページ」の説明

  18. ターゲット側で「HelloWorldProcessResponse」要素を右クリックします。図5-30に示すように、メニューが表示されます。

    図5-30 JDeveloper: 「invoke.xsl」ページ

    図5-30の説明が続きます
    「図5-30 JDeveloper: 「invoke.xsl」ページ」の説明

  19. 「変数の追加」をクリックします。図5-31に示すように、「変数の追加」ダイアログが表示されます。

    図5-31 「変数の追加」ダイアログ

    図5-31の説明が続きます
    「図5-31 「変数の追加」ダイアログ」の説明

  20. 「ローカル名」フィールドにvar1と入力して「OK」をクリックします。var1変数がXSLマッパー・ツールのターゲット・ペインに追加されます。

  21. 「コンポーネント・パレット」リストから「拡張」を選択し、「Advanced Functions」を選択します。拡張関数のリストが表示されます。

  22. アウトバウンド同期リクエスト/リプライ操作のリクエスト部分を、データをソケット・サーバーに書き込むように次の手順で定義します。

    1. 図5-32に示すように、「コンポーネント・パレット」の「Advanced Functions」リストからsocketWriteWithXlationを中央ペインにドラッグ・アンド・ドロップします。

      図5-32 JDeveloper: 「invoke.xsl」ページ

      図5-32の説明が続きます
      「図5-32 JDeveloper: 「invoke.xsl」ページ」の説明

    2. var1ノードをsocketWriteWithXlation関数にドラッグします。図5-33に示すように、リンクが作成されます。

      図5-33 JDeveloper: 「invoke.xsl」ページ

      図5-33の説明が続きます
      「図5-33 JDeveloper: 「invoke.xsl」ページ」の説明

    3. socketWriteWithXlation拡張関数をダブルクリックします。「関数の編集 - socketWriteWithXlation」ダイアログが表示されます。

    4. 図5-34に示すように、「NodeList」フィールドにドット1個(.)を入力します。

      図5-34 「関数の編集 - socketWriteWithXlation」ダイアログ

      図5-34の説明が続きます
      「図5-34 「関数の編集 - socketWriteWithXlation」ダイアログ」の説明


      注意:

      socketWriteWithXlation関数は、出力用に構成されたスキーマを使用してソケットの出力ストリームに書き込みます。

      「NodeList」フィールドで指定したドット(.)は、HelloWorldProcessRequestを最上位ノードに書き込むことを示します。


    5. 「OK」をクリックします。「警告」ダイアログが表示されます。

    6. 「はい」をクリックします。「invoke.xsl」ページが表示されます。同期リクエスト/リプライ操作のリクエスト部分が定義されています。

  23. アウトバウンド同期リクエスト/リプライ操作のリプライ部分を次の手順で定義します。

    1. 図5-35に示すように、「コンポーネント・パレット」の「Advanced Functions」リストからsocketReadWithXlationを中央ペインにドラッグ・アンド・ドロップします。

      図5-35 JDeveloper: 「invoke.xsl」ページ

      図5-35の説明が続きます
      「図5-35 JDeveloper: 「invoke.xsl」ページ」の説明

    2. 「コンポーネント・パレット」リストから「一般」を選択し、「XSLT Constructs」を選択します。XSLT構成メンバーのリストが表示されます。

    3. 「コンポーネント・パレット」から、copy-ofをターゲット・ペインのHelloWorldProcessResponseにドラッグします。図5-36に示すように、「copy-ofタイプ・ダイアログ」が表示されます。

      図5-36 JDeveloper: 「copy-ofタイプ・ダイアログ」が表示されている「invoke.xsl」ページ

      図5-36の説明が続きます
      「図5-36 JDeveloper: 「copy-ofタイプ・ダイアログ」が表示されている「invoke.xsl」ページ」の説明

    4. 「OK」をクリックします。図5-37に示すように、copy-of XSLT構成メンバーがターゲット・ペインに追加された状態で「invoke.xsl」(XSLマッパー・ツール)ページが表示されます。

      図5-37 JDeveloper: 「invoke.xsl」ページ

      図5-37の説明が続きます
      「図5-37 JDeveloper: 「invoke.xsl」ページ」の説明

    5. copy-of XSLT構成メンバーをsocketReadWithXlation関数にドラッグします。図5-38に示すように、リンクが作成されます。

      図5-38 JDeveloper: 「invoke.xsl」ページ

      図5-38の説明が続きます
      「図5-38 JDeveloper: 「invoke.xsl」ページ」の説明

  24. 「ファイル」「すべて保存」を順番にクリックします。アウトバウンド同期リクエスト/リプライのハンドシェイクが定義されます。

5.4.4 Oracleソケット・アダプタの構成プランでのTCPポートの指定

Oracleソケット・アダプタの構成プランでTCPポートを指定するには、次の手順を実行します(<service-name>はサービス名です)。

  1. <service-name>_tcp.jcaファイルにポート・プロパティを追加します。

    <property name="Port" value="Port"/>
    
  2. 構成プランXMLファイルに次のコードを追加します。

    <service_name=<XXXXXX">
     <property>
      <property name="Port">
       <replace>2222</replace>
     </property>
     <binding type'"jca"/>
    </service>
    
  3. .xmlファイルのサービス要素の下にポート・プロパティを追加し、デフォルト値(この例では1111)を指定します

    <service name="XXXXX" ui:wsdlLocation
      <interface.wsdl.interface="..."/>
      <binding.jca config="XXXX_tcp.jca"/>
        <property name="Port" type=xs:string" many="false"  override="may">1111</property>
    </service>
    
  4. 構成プランでコンポジットをデプロイします。

デプロイすると、Oracleソケット・アダプタは構成プランで指定されたポート2222でリスニングします。

構成プランなしでコンポジットをデプロイする場合、または構成プランでPortプロパティがオーバーライドされない場合、Oracleソケット・アダプタはcomposite.xmlファイルのデフォルトのPortプロパティで指定されたソケット(この例ではポート1111)でリスニングします。

5.5 Oracleソケット・アダプタの使用例

この項には、Oracleソケット・アダプタの次の使用例が含まれます。

5.5.1 Oracleソケット・アダプタHello World

これは単純なHelloWorldの使用例であり、Oracleソケット・アダプタを使用した通信の同期インバウンド・リクエスト/レスポンス・モードと同期アウトバウンド・リクエスト/レスポンス・モードを示しています。HelloWorldビジネス・プロセスはOracleソケット・アダプタのインバウンド・サービスから入力文字列を取得し、メッセージをBPELプロセスにパブリッシュします。BPELプロセスはOracleソケット・アダプタのアウトバウンド・サービス(入力文字列に接頭辞?Hello?を追加して戻す単純なHelloWorldサーバー)を起動し、同期リプライを使用して受信した文字列を戻します。

この使用例には、次の項目が含まれます。

5.5.1.1 前提条件

この使用例を実行するには、Adapters-101SocketAdapterHelloWorldサンプルに含まれているartifacts.zipファイルの次のファイルが必要です。

  • artifacts/schemas/HelloWorld.xsd

  • artifacts/xsl/request.xsl

  • artifacts/xsl/reply.xsl

  • artifacts/xsl/invoke.xsl

Oracle SOA Sample CodeサイトでAdapters-101SocketAdapterHelloWorldサンプルにアクセスできます。

5.5.1.2 SOAコンポジットの設計

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。

  1. JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。

  2. 図5-39に示すように、「アプリケーション名」フィールドにhelloworld-socketと入力して「次へ」をクリックします。「プロジェクトの名前付け」ページが表示されます。

    図5-39 「SOAアプリケーションの作成」ダイアログ

    図5-39の説明が続きます
    「図5-39 「SOAアプリケーションの作成」ダイアログ」の説明

  3. 「OK」をクリックします。「プロジェクトの名前付け」ダイアログが表示されます。

  4. 図5-40に示すように、「プロジェクト名」フィールドにHelloWorldCompositeと入力してから「プロジェクト・テクノロジ」の下で「SOA」を選択し、右矢印をクリックして「選択済」ボックスに移動します。

    HelloWorldアプリケーションとHelloWorldCompositeプロジェクトが「アプリケーション・ナビゲータ」に表示されます。

    図5-40 「プロジェクトの作成」ダイアログ

    図5-40の説明が続きます
    「図5-40 「プロジェクトの作成」ダイアログ」の説明

  5. 「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。

  6. 図5-41に示すように、「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成」ダイアログが表示されます。

    図5-41 「SOA設定の設定」ダイアログ

    図5-41の説明が続きます
    「図5-41 「SOA設定の設定」ダイアログ」の説明

  7. 図5-42に示すように、「名前」フィールドにHelloWorldFlowと入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。

    図5-42 「BPELプロセスの作成」ダイアログ

    図5-42の説明が続きます
    「図5-42 「BPELプロセスの作成」ダイアログ」の説明

  8. 「OK」をクリックします。図5-43に示すように、HelloWorldアプリケーションとHelloWorldCompositeプロジェクトが設計領域に表示されます。

    図5-43 JDeveloper: composite.xml

    図5-43の説明が続きます
    「図5-43 JDeveloper: composite.xml」の説明

  9. HelloWorld.xsdファイルをプロジェクトのxsdディレクトリにコピーします(このファイルの場所は、第5.5.1.1項「前提条件」を参照)。

  10. request.xslreply.xslおよびinvoke.xslファイルをプロジェクトのxslディレクトリにコピーします(これらのファイルの場所は、第5.5.1.1項「前提条件」を参照)。

5.5.1.3 インバウンドOracleソケット・アダプタ・サービスの作成

次の手順に従ってインバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 図5-44に示すように、「サービス名」フィールドにHelloWorldClientと入力します。

    図5-44 「アダプタ構成ウィザード - サービス名」ページ

    図5-44の説明が続きます
    「図5-44 「アダプタ構成ウィザード - サービス名」ページ」の説明

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 図5-45に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

    図5-45 「アダプタ構成ウィザード - アダプタ・インタフェース」ページ

    図5-45の説明が続きます
    「図5-45 「アダプタ構成ウィザード - アダプタ・インタフェース」ページ」の説明

  6. 図5-46に示すように、「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択します。

    図5-46 「アダプタ構成ウィザード - 操作」ページ

    図5-46の説明が続きます
    「図5-46 「アダプタ構成ウィザード - 操作」ページ」の説明

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 図5-47に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapterと入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

    図5-47 「アダプタ構成ウィザード - ソケット接続」ページ

    図5-47の説明が続きます
    「図5-47 「アダプタ構成ウィザード - ソケット接続」ページ」の説明

  9. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  10. 図5-48に示すように、「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。

    図5-48 「タイプ・チューザ」ダイアログ

    図5-48の説明が続きます
    「図5-48 「タイプ・チューザ」ダイアログ」の説明

  11. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  12. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  13. 「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。

  14. 「OK」をクリックします。図5-49に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

    図5-49 「アダプタ構成ウィザード - メッセージ」ページ

    図5-49の説明が続きます
    「図5-49 「アダプタ構成ウィザード - メッセージ」ページ」の説明

  15. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  16. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  17. 「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  18. 図5-50に示すように、ファイル名として「request.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。

    図5-50 「SOAリソース・ブラウザ」ダイアログ

    図5-50の説明が続きます
    「図5-50 「SOAリソース・ブラウザ」ダイアログ」の説明

  19. 「ReplyXslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  20. ファイル名として「reply.xsl」を選択して「OK」をクリックします。図5-51に示すように、「Xslt」フィールドに移入が行われます。

    図5-51 「アダプタ構成ウィザード - プロトコル」ページ

    図5-51の説明が続きます
    「図5-51 「アダプタ構成ウィザード - プロトコル」ページ」の説明

  21. 「終了」をクリックします。「composite.xml」ページが図5-52のように表示されます。

    図5-52 JDeveloper: 「composite.xml」ページ

    図5-52の説明が続きます
    「図5-52 JDeveloper: 「composite.xml」ページ」の説明

5.5.1.4 アウトバウンドOracleソケット・アダプタ・サービスの作成

次の手順に従ってアウトバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにHelloWorldServerと入力します。

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  6. 図5-53に示すように、「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。

    図5-53 「アダプタ構成ウィザード - 操作タイプ」ページ

    図5-53の説明が続きます
    「図5-53 「アダプタ構成ウィザード - 操作タイプ」ページ」の説明

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 図5-54に示すように、「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapterと入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

    図5-54 「アダプタ構成ウィザード - ソケット接続」ページ

    図5-54の説明が続きます
    「図5-54 「アダプタ構成ウィザード - ソケット接続」ページ」の説明

  9. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  10. 図5-48に示すように、「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。

  11. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  12. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  13. 「プロジェクトのスキーマ・ファイル」「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。

  14. 「OK」をクリックします。図5-49に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。

  15. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  16. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  17. 「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  18. 図5-55に示すように、「ファイル名」として「invoke.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。

    図5-55 「SOAリソース・ブラウザ」ダイアログ

    図5-55の説明が続きます
    「図5-55 「SOAリソース・ブラウザ」ダイアログ」の説明

  19. 「終了」をクリックします。「composite.xml」ページが図5-56のように表示されます。

    図5-56 JDeveloper: 「composite.xml」ページ

    図5-56の説明が続きます
    「図5-56 JDeveloper: 「composite.xml」ページ」の説明

5.5.1.5 サービスとアクティビティのワイヤリング

作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。

  1. 「公開されたサービス」領域にあるHelloWorldClientの小さい三角形を、「コンポーネント」領域のHelloWorldFlow BPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

  2. 「コンポーネント」領域にあるHelloWorldFlow BPELプロセス内の小さい三角形を、「外部参照」領域のHelloWorldServerに緑の三角形として表示されるドロップ・ゾーンにドラッグします。

    JDeveloperのcomposite.xmlが図5-57のように表示されます。

    図5-57 JDeveloper: composite.xml

    図5-57の説明が続きます
    「図5-57 JDeveloper: composite.xml」の説明

  3. 「ファイル」「すべて保存」を順番にクリックします。

receiveアクティビティの追加

  1. 「HelloWorldFlow」をダブルクリックします。「BPELHelloWorld.bpel」ページが表示されます。

  2. 図5-58に示すように、「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。

    図5-58 JDeveloper: HelloWorldFlow.bpel

    図5-58の説明が続きます
    「図5-58 JDeveloper: HelloWorldFlow.bpel」の説明

  3. receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。

  4. 図5-59に示すように、「名前」フィールドにReceiveInputと入力します。

    図5-59 「Receive」ダイアログ

    図5-59の説明が続きます
    「図5-59 「Receive」ダイアログ」の説明

  5. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

  6. 図5-60に示すように、「HelloWorldClient」を選択して「OK」をクリックします。

    図5-60 「パートナ・リンク・チューザ」ダイアログ

    図5-60の説明が続きます
    「図5-60 「パートナ・リンク・チューザ」ダイアログ」の説明

  7. 図5-61に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    図5-61 「Receive」ダイアログ

    図5-61の説明が続きます
    「図5-61 「Receive」ダイアログ」の説明

  8. デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。

  9. 「インスタンスの作成」を選択して「OK」をクリックします。図5-62に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。

    図5-62 JDeveloper: HelloWorldFlow.bpel

    図5-62の説明が続きます
    「図5-62 JDeveloper: HelloWorldFlow.bpel」の説明

invokeアクティビティの追加

  1. 図5-63に示すように、「コンポーネント・パレット」から、invokeアクティビティを設計領域にあるReceiveInputアクティビティの後にドラッグ・アンド・ドロップします。

    図5-63 JDeveloper: HelloWorldFlow.bpel

    図5-63の説明が続きます
    「図5-63 JDeveloper: HelloWorldFlow.bpel」の説明

  2. invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。

  3. 図5-64に示すように、「名前」フィールドにWriteHelloWorldと入力します。

    図5-64 JDeveloper: HelloWorldFlow.bpel

    図5-64の説明が続きます
    「図5-64 JDeveloper: HelloWorldFlow.bpel」の説明

  4. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

  5. 図5-65に示すように、「HelloWorldServer」を選択して「OK」をクリックします。

    図5-65 「パートナ・リンク・チューザ」ダイアログ

    図5-65の説明が続きます
    「図5-65 「パートナ・リンク・チューザ」ダイアログ」の説明

  6. 「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

  7. デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。

  8. 同じ手順を繰り返して出力変数を選択します。図5-66に示すように、「Invoke」ダイアログが表示されます。

    図5-66 「Invoke」ダイアログ

    図5-66の説明が続きます
    「図5-66 「Invoke」ダイアログ」の説明

  9. 「OK」をクリックします。図5-67に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。

    図5-67 JDeveloper: HelloWorldFlow.bpel

    図5-67の説明が続きます
    「図5-67 JDeveloper: HelloWorldFlow.bpel」の説明

replyアクティビティの追加

  1. 図5-68に示すように、「コンポーネント・パレット」から設計領域にreplyアクティビティをドラッグ・アンド・ドロップします。

    図5-68 JDeveloper: HelloWorldFlow.bpel

    図5-68の説明が続きます
    「図5-68 JDeveloper: HelloWorldFlow.bpel」の説明

  2. replyアクティビティをダブルクリックします。「Reply」ダイアログが表示されます。

  3. 「名前」フィールドにReplyと入力します。

  4. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

  5. 図5-60に示すように、「HelloWorldClient」を選択して「OK」をクリックします。

  6. 「Reply」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

  7. デフォルトの変数名を選択して「OK」をクリックします。図5-69に示すように、「変数」フィールドにデフォルトの変数名が移入されます。

    図5-69 「Reply」ダイアログ

    図5-69の説明が続きます
    「図5-69 「Reply」ダイアログ」の説明

  8. 「OK」をクリックします。図5-70に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。

    図5-70 JDeveloper: HelloWorldFlow.bpel

    図5-70の説明が続きます
    「図5-70 JDeveloper: HelloWorldFlow.bpel」の説明

assignアクティビティの追加

  1. 「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。

  2. assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

  3. 「コピー操作」タブをクリックします。図5-71に示すように、「Assign」ダイアログが表示されます。

    図5-71 「Assign」ダイアログ: 「コピー操作」タブ

    図5-71の説明が続きます
    「図5-71 「Assign」ダイアログ: 「コピー操作」タブ」の説明

  4. 「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。

  5. 左ペインで、「ReceiveInput_InboundRequestReply_InputVariable」変数の下にある「ns3:input」を選択します。

  6. 図5-72に示すように、右ペインで「WriteHelloWorld_OutboundRequestReply_InputVariable」変数の下にある「ns3:input」を選択します。

    図5-72 「コピー操作の作成」ダイアログ

    図5-72の説明が続きます
    「図5-72 「コピー操作の作成」ダイアログ」の説明

  7. 「OK」をクリックします。「Assign」ダイアログが表示されます。

  8. 「OK」をクリックします。JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。

  9. invokeアクティビティとreplyアクティビティの間に別のassignアクティビティを追加します。

  10. assignアクティビティをダブルクリックします。

  11. 「コピー操作」タブをクリックして「コピー操作」を選択します。

  12. 左ペインで、「WriteHelloWorld_OutboundRequestReply_OutputVariable」の下にある「ns3:result」を選択します。

  13. 右ペインで、「Reply_InboundRequestReply_OutputVariable」の下にある「ns3:result」を選択して「OK」をクリックします。

  14. 「OK」をクリックします。図5-73に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。

    図5-73 JDeveloper: HelloWorldFlow.bpel

    図5-73の説明が続きます
    「図5-73 JDeveloper: HelloWorldFlow.bpel」の説明

  15. 「ファイル」「すべて保存」を順番にクリックします。

5.5.1.6 JDeveloperを使用したデプロイ

前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。

  1. アプリケーション・サーバー接続を作成します。詳細は、第2.7項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。

  2. アプリケーションをデプロイします。詳細は、第2.8項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。

5.5.1.7 Oracle Enterprise Manager Fusion Middleware Controlコンソール(Fusion Middleware Controlコンソール)を使用した監視

Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。

  1. http://servername:portnumber/emにナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。

  2. デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。

    「最新のインスタンス」領域で「インスタンスID」の値をメモします。

  3. 「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。

  4. ステップ2でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。

  5. BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。

  6. ペイロード・ノードを開いてペイロード詳細を確認します。

  7. プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。

5.5.2 フライト情報表示システム

フライト情報表示システムの使用例では、Oracleソケット・アダプタを使用してハンドシェイクを定義する際の各種モードについて説明します。フライト情報表示サーバー(FIDS)は、特定のソース(JFKまたはSFO)からのフライトに関してフライト・ステータス情報をリクエストするFIDSクライアントにより起動されます。起動したFIDSは、3つのエアライン(Airline1、Airline 2およびAirline 3)に関するフライト・データ・リクエストを起動します。次に、受信した情報を収集し、HTTPプロトコルを使用してFIDSクライアントにリプライします。

この使用例には、次の項目が含まれます。

5.5.2.1 前提条件

この使用例を実行するには、Adapters-102SocketAdapterFlightInformationDisplaySystemサンプルに含まれているartifacts.zipファイルの次のファイルが必要です。

  • artifacts/schemas/Airline1.xsd

  • artifacts/schemas/Airline2.xsd

  • artifacts/schemas/Airline3.xsd

  • artifacts/schemas/FIDS.xsd

  • artifacts/xsl/request.xsl

  • artifacts/xsl/reply.xsl

  • artifacts/xsl/invoke.xsl

Adapters-102SocketAdapterFlightInformationDisplaySystemサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスし、「Adapters」タブを選択します。

5.5.2.2 SOAコンポジットの設計

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。

  1. JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。

  2. 「アプリケーション名」フィールドにFIDSAppと入力して「次へ」をクリックします。「プロジェクトの名前付け」ページが表示されます。

  3. 「OK」をクリックします。「プロジェクトの名前付け」ダイアログが表示されます。

  4. 「プロジェクト名」フィールドにFIDSCompositeと入力してから「プロジェクト・テクノロジ」の下で「SOA」を選択し、右矢印をクリックして「選択済」ボックスに移動します。

    FIDSAppアプリケーションとFIDSCompositeプロジェクトが「アプリケーション・ナビゲータ」に表示されます。

  5. 「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。

  6. 「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成」ダイアログが表示されます。

  7. 「名前」フィールドにBPEL_FIDSと入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。

  8. 「OK」をクリックします。図5-74に示すように、FIDSAppアプリケーションとFIDSCompositeプロジェクトが設計領域に表示されます。

    図5-74 JDeveloper: composite.xml

    図5-74の説明が続きます
    「図5-74 JDeveloper: composite.xml」の説明

  9. Airline1.xsdAirline2.xsdAirline3.xsdおよびFIDS.xsdファイルをプロジェクトFIDSCompositeFIDSComposite\xsdにコピーします(これらのファイルの場所は、第5.5.2.1項「前提条件」を参照)。

  10. invoke.xslrequest.xslおよびreply.xslをプロジェクトFIDSCompositeFIDSComposite\xslにコピーします(これらのファイルの場所は、第5.5.2.1項「前提条件」を参照)。

5.5.2.3 インバウンドOracleソケット・アダプタ・サービスの作成

次の手順を実行し、FIDSAppアプリケーションの公開に使用するインバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにFIDSと入力します。

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  6. 「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択します。

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 図5-75に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapterと入力し、「ホストおよびポートの指定」を選択します。

    図5-75 「アダプタ構成ウィザード - ソケット接続」ページ

    図5-75の説明が続きます
    「図5-75 「アダプタ構成ウィザード - ソケット接続」ページ」の説明

  9. 「ポート番号」フィールドに9000と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

  10. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 図5-76に示すように、「プロジェクトのスキーマ・ファイル」「FIDS.xsd」および「FIDSProcessRequest」を順番にクリックします。

    図5-76 「タイプ・チューザ」ダイアログ

    図5-76の説明が続きます
    「図5-76 「タイプ・チューザ」ダイアログ」の説明

  12. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにFIDS.xsdファイルが移入されます。

  13. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  14. 「プロジェクトのスキーマ・ファイル」「FIDS.xsd」および「FIDSProcessReply」を順番にクリックします。

  15. 「OK」をクリックします。図5-77に示すように、「メッセージ」ページの「URL」フィールドにFIDS.xsdファイルが移入されます。

    図5-77 「アダプタ構成ウィザード - メッセージ」ページ

    図5-77の説明が続きます
    「図5-77 「アダプタ構成ウィザード - メッセージ」ページ」の説明

  16. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  17. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  18. 「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」アイコンをクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  19. ファイル名として「request.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。

  20. 「ReplyXslt」フィールドの端に表示される「参照してXSLファイルを選択します」アイコンをクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  21. ファイル名として「reply.xsl」を選択して「OK」をクリックします。図5-78に示すように、「Xslt」フィールドに移入が行われます。

    図5-78 「アダプタ構成ウィザード - プロトコル」ページ

    図5-78の説明が続きます
    「図5-78 「アダプタ構成ウィザード - プロトコル」ページ」の説明

  22. 「終了」をクリックします。「composite.xml」ページが図5-79のように表示されます。

    図5-79 JDeveloper: 「composite.xml」ページ

    図5-79の説明が続きます
    「図5-79 JDeveloper: 「composite.xml」ページ」の説明

5.5.2.4 アウトバウンドOracleソケット・アダプタ・サービスの作成

次の手順に従って、Airline1サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにAirline1と入力します。

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  6. 「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 図5-80に示すように、「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapterと入力し、「ホストおよびポートの指定」を選択します。

    図5-80 「アダプタ構成ウィザード - ソケット接続」ページ

    図5-80の説明が続きます
    「図5-80 「アダプタ構成ウィザード - ソケット接続」ページ」の説明

  9. 「ホスト名」フィールドにAirline1ソケット・サーバー・プログラムを実行する必要のあるシステムの名前を入力し、「ポート番号」フィールドに9001と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

  10. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「Airline1.xsd」および「Source」を順番にクリックします。

  12. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline1.xsdファイルが移入されます。

  13. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  14. 「プロジェクトのスキーマ・ファイル」「Airline1.xsd」および「Flight-Details」を順番にクリックします。

  15. 「OK」をクリックします。図5-81に示すように、「メッセージ」ページの「URL」フィールドにAirline1.xsdファイルが移入されます。

    図5-81 「アダプタ構成ウィザード - メッセージ」ページ

    図5-81の説明が続きます
    「図5-81 「アダプタ構成ウィザード - メッセージ」ページ」の説明

  16. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  17. 「XSLTを使用してハンドシェイクを定義します」を選択します。

  18. 「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

  19. 図5-82に示すように、「ファイル名」として「invoke.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。

    図5-82 「SOAリソース・ブラウザ」ダイアログ

    図5-82の説明が続きます
    「図5-82 「SOAリソース・ブラウザ」ダイアログ」の説明

  20. 「終了」をクリックします。「composite.xml」ページが図5-83のように表示されます。

    図5-83 JDeveloper: 「composite.xml」ページ

    図5-83の説明が続きます
    「図5-83 JDeveloper: 「composite.xml」ページ」の説明

次の手順に従って、Airline2サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにAirline2と入力します。

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  6. 「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapterと入力して「ホストおよびポートの指定」を選択します。

  9. 「ホスト名」フィールドにAirline2ソケット・サーバー・プログラムを実行するシステムの名前を入力し、「ポート番号」フィールドに9002と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

  10. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「Airline2.xsd」および「Source」を順番にクリックします。

  12. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline2.xsdファイルが移入されます。

  13. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  14. 「プロジェクトのスキーマ・ファイル」「Airline2.xsd」および「flight-details」を順番にクリックします。

  15. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline2.xsdファイルが移入されます。

  16. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  17. 「ハンドシェイクなし」を選択します。

  18. 「終了」をクリックします。「composite.xml」ページが図5-84のように表示されます。

    図5-84 JDeveloper: 「composite.xml」ページ

    図5-84の説明が続きます
    「図5-84 JDeveloper: 「composite.xml」ページ」の説明

次の手順に従って、Airline3サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。

  1. 「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「次へ」をクリックします。「サービス名」ページが表示されます。

  3. 「サービス名」フィールドにAirline3と入力します。

  4. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  5. 「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。

  6. 「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。

  7. 「次へ」をクリックします。「ソケット接続」ページが表示されます。

  8. 「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapterと入力して「ホストおよびポートの指定」を選択します。

  9. 「ホスト名」フィールドにAirline3ソケット・サーバー・プログラムを実行するシステムの名前を入力し、「ポート番号」フィールドに9003と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。

  10. 「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「Airline3.xsd」および「src」を順番にクリックします。

  12. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline3.xsdファイルが移入されます。

  13. 「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。

  14. 「プロジェクトのスキーマ・ファイル」「Airline3.xsd」および「airline」を順番にクリックします。

  15. 「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline3.xsdファイルが移入されます。

  16. 「次へ」をクリックします。「プロトコル」ページが表示されます。

  17. 「カスタムJavaコードを使用してハンドシェイクを定義します」を選択します。

  18. 「Javaクラス」フィールドにcom.oracle.socket.fids.custom.Airline3Customと入力します。

  19. 「終了」をクリックします。「composite.xml」ページが図5-85のように表示されます。

    図5-85 JDeveloper: 「composite.xml」ページ

    図5-85の説明が続きます
    「図5-85 JDeveloper: 「composite.xml」ページ」の説明

5.5.2.5 サービスとアクティビティのワイヤリング

作成したコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。

  1. 「公開されたサービス」領域にあるFIDSクライアント内の小さい三角形を、「コンポーネント」領域のBPEL_FIDSプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

  2. 「コンポーネント」領域にあるBPEL_FIDSプロセス内の小さい三角形を、「外部参照」領域のAirline1、Airline2およびAirline3サーバー内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

    JDeveloperのcomposite.xmlファイルが図5-86のように表示されます。

    図5-86 JDeveloper: composite.xml

    図5-86の説明が続きます
    「図5-86 JDeveloper: composite.xml」の説明

  3. 「ファイル」「すべて保存」を順番にクリックします。

receiveアクティビティの追加

  1. 「BPEL_FIDS」をダブルクリックします。「BPELFIDS.bpel」ページが表示されます。

  2. 「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。

  3. receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。

  4. 「名前」フィールドでデフォルト名のReceive_1を保持します。

  5. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

  6. 図5-87に示すように、「FIDS」を選択して「OK」をクリックします。

    図5-87 「パートナ・リンク・チューザ」ダイアログ

    図5-87の説明が続きます
    「図5-87 「パートナ・リンク・チューザ」ダイアログ」の説明

  7. 図5-88に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    図5-88 「Receive」ダイアログ

    図5-88の説明が続きます
    「図5-88 「Receive」ダイアログ」の説明

  8. デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。

  9. 「インスタンスの作成」を選択して「OK」をクリックします。図5-89に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。

    図5-89 JDeveloper: BPEL_FIDS.bpel

    図5-89の説明が続きます
    「図5-89 JDeveloper: BPEL_FIDS.bpel」の説明

replyアクティビティの追加

  1. 図5-90に示すように、「コンポーネント・パレット」から設計領域にreplyアクティビティをドラッグ・アンド・ドロップします。

    図5-90 JDeveloper: BPEL_FIDS.bpel

    図5-90の説明が続きます
    「図5-90 JDeveloper: BPEL_FIDS.bpel」の説明

  2. replyアクティビティをダブルクリックします。「Reply」ダイアログが表示されます。

  3. 「名前」フィールドでデフォルト名のReply_1を保持します。

  4. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

  5. 図5-87に示すように、「FIDS」を選択して「OK」をクリックします。

  6. 「Reply」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

  7. デフォルトの変数名を選択して「OK」をクリックします。図5-91に示すように、「変数」フィールドにデフォルトの変数名が移入されます。

    図5-91 「Reply」ダイアログ

    図5-91の説明が続きます
    「図5-91 「Reply」ダイアログ」の説明

  8. 「OK」をクリックします。図5-92に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。

    図5-92 JDeveloper: BPEL_FIDS.bpel

    図5-92の説明が続きます
    「図5-92 JDeveloper: BPEL_FIDS.bpel」の説明

flowアクティビティの追加

  1. 図5-93に示すように、「コンポーネント・パレット」から、flowアクティビティを設計領域のreceiveアクティビティとreplyアクティビティの間にドラッグ・アンド・ドロップします。

    図5-93 JDeveloper: BPEL_FIDS.bpel

    図5-93の説明が続きます
    「図5-93 JDeveloper: BPEL_FIDS.bpel」の説明

  2. Flow_1アクティビティを開きます。シーケンスの作成画面が表示されます。

Airline1サーバーのフローの設計

  1. 図5-94に示すように、「コンポーネント・パレット」からSequence_1にswitchアクティビティをドラッグ・アンド・ドロップします。

    図5-94 JDeveloper: 「BPEL_FIDS.bpel」ページ

    図5-94の説明が続きます
    「図5-94 JDeveloper: 「BPEL_FIDS.bpel」ページ」の説明

  2. switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。

  3. 図5-95に示すように、「<case>」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。

    図5-95 JDeveloper: 「BPEL_FIDS.bpel」ページ

    図5-95の説明が続きます
    「図5-95 JDeveloper: 「BPEL_FIDS.bpel」ページ」の説明

  4. ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。

  5. 図5-96に示すように、式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline1')と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。


    注意:

    この式により、Airline1の情報がリクエストされた場合にのみ、このフローが確実に実行されます。

    図5-96 「式ビルダー」ダイアログ

    図5-96の説明が続きます
    「図5-96 「式ビルダー」ダイアログ」の説明

  6. 「<case>」セクションにinvokeアクティビティを追加します。

    1. invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。

    2. invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。

    3. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

    4. 「Airline1」を選択して「OK」をクリックします。

    5. 「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    6. デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。

    7. 「OK」をクリックします。図5-97に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。

    図5-97 JDeveloper: BPEL_FIDS.bpel

    図5-97の説明が続きます
    「図5-97 JDeveloper: BPEL_FIDS.bpel」の説明

  7. 「<case>」セクションにassignアクティビティを追加します。

    1. 「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのInvoke_1アクティビティの前にドラッグ・アンド・ドロップします。

    2. Assign_1アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

    3. 「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。

    4. 「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。

    5. 図5-98に示すように、Receive_1アクティビティの入力変数のソースとInvoke_1アクティビティの入力変数のソースの間にコピー操作を作成します。

      図5-98 「コピー操作の作成」ダイアログ

      図9-58の説明が続きます
      「図5-98 「コピー操作の作成」ダイアログ」の説明

    6. 「コピー操作の作成」ダイアログで「OK」をクリックします。

    7. 「OK」をクリックします。

    図5-99に示すように、「BPEL_FIDS.bpel」ページが表示されます。

    図5-99 JDeveloper: BPELFIDS.bpel

    図9-58の説明が続きます
    「図5-99 JDeveloper: BPELFIDS.bpel」の説明

  8. 「<case>」セクションにtransformアクティビティを追加します。

    1. transformアクティビティを「<case>」セクションのInvoke_1アクティビティの後にドラッグ・アンド・ドロップします。

    2. transformアクティビティをダブルクリックします。

    3. 「トランスフォーメーション」タブをクリックします。

    4. 「作成... (Alt + N)」アイコンをクリックします。「ソース変数」ダイアログが表示されます。

    5. 「ソース変数」リストから「Invoke_1_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。

    6. 「ターゲット変数」リストから「Reply_1_InboundRequestReply_OutputVariable」を選択します。

    7. 「OK」をクリックします。XSLマッパー・ツールが表示されます。

    8. 左ペインのソースから、「tns:Flight」ノードを右ペインにあるターゲットの「FlightDetails」ノードにリンクします。「自動マップ・プリファレンス」ダイアログが表示されます。

    9. 「OK」をクリックします。図5-100に示すように、「Transformation_1.xsl」(XSLマッパー・ツール)が表示されます。

      図5-100 JDeveloper: 「Transformation_1.xsl」ページ

      図5-100の説明が続きます
      「図5-100 JDeveloper: 「Transformation_1.xsl」ページ」の説明

  9. 「ファイル」「すべて保存」を順番にクリックします。図5-101に示すように、Airline1サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。

    図5-101 JDeveloper: BPEL_FIDS.bpel

    図9-58の説明が続きます
    「図5-101 JDeveloper: BPEL_FIDS.bpel」の説明

Airline2サーバーのフローの設計

  1. 空のsequenceアクティビティをダブルクリックし、「名前」フィールドにSequence_2と入力します。

  2. 「コンポーネント・パレット」からSequence_2にswitchアクティビティをドラッグ・アンド・ドロップします。

  3. switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。

  4. <case>」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。

  5. ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。

  6. 式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline2')と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。


    注意:

    この式により、Airline2の情報がリクエストされた場合にのみ、このフローが確実に実行されます。

  7. 「<case>」セクションにinvokeアクティビティを追加します。

    1. invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。

    2. Invoke_2アクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。

    3. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

    4. 「Airline2」を選択して「OK」をクリックします。

    5. 「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    6. デフォルトの変数名を選択して「OK」をクリックします。「入力変数」および「出力変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。

    7. 「OK」をクリックします。invokeアクティビティがJDeveloperの「BPEL_FIDS.bpel」ページのSequence_2の下に追加されます。

  8. 「<case>」セクションにassignアクティビティを追加します。

    1. 「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのinvokeアクティビティの前にドラッグ・アンド・ドロップします。

    2. Assign_2アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

    3. 「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。

    4. 「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。

    5. 図5-102に示すように、Receive_1アクティビティの入力変数のソースとInvoke_2アクティビティの入力変数のソースの間にコピー操作を作成します。

      図5-102 「コピー操作の作成」ダイアログ

      図9-58の説明が続きます
      「図5-102 「コピー操作の作成」ダイアログ」の説明

    6. 「コピー操作の作成」ダイアログで「OK」をクリックします。

    7. 「OK」をクリックします。

  9. 一時変数を作成し、「<case>」セクションにtransformアクティビティを追加します。


    注意:

    一時変数は、Airline2サーバーからのフライト詳細の格納に使用されます。この情報は後でリプライ変数に追加されます。

    1. (x)で表された「変数」アイコンをクリックします。図5-103に示すように、「変数」ダイアログが表示されます。

      図5-103 「変数」ダイアログ

      図5-103の説明が続きます
      「図5-103 「変数」ダイアログ」の説明

    2. 「作成」アイコンをクリックします。図5-104に示すように、「変数の作成」ダイアログが表示されます。

      図5-104 「変数の作成」ダイアログ

      図5-104の説明が続きます
      「図5-104 「変数の作成」ダイアログ」の説明

    3. 変数タイプとして「メッセージ・タイプ」を選択します。

    4. 「メッセージ・タイプ」フィールドの端にある「メッセージ・タイプの参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。

    5. 図5-105に示すように、「メッセージ・タイプ」「パートナ・リンク」「FIDS」「FIDS.wsdl」「メッセージ・タイプ」および「FIDSProcessReply_msg_reply」を順番にクリックします。

      図5-105 「タイプ・チューザ」ダイアログ

      図5-105の説明が続きます
      「図5-105 「タイプ・チューザ」ダイアログ」の説明

    6. 「OK」をクリックします。「変数の作成」ダイアログの「メッセージ・タイプ」フィールドにFIDSProcessReply_msg_replyパートナ・リンクが移入されます。

    7. 「OK」をクリックします。「変数」ダイアログの「変数」リストに「メッセージ・タイプ」タイプの変数Variable_1が追加されます。

    8. 「OK」をクリックして「BPEL_FIDS.bpel」ページに戻ります。

    9. transformアクティビティを「<case>」セクションのInvoke_2アクティビティの後にドラッグ・アンド・ドロップします。

    10. Transform_2アクティビティをダブルクリックします。

    11. 「トランスフォーメーション」タブをクリックします。

    12. 「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。

    13. 「ソース変数」リストから「Invoke_2_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。

    14. 「ターゲット変数」リストで「Variable_1」を選択します。

    15. 「OK」をクリックします。XSLマッパー・ツールが表示されます。

    16. 左ペインのソースから、「tns:flight」ノードを右ペインにあるターゲットの「FlightDetails」ノードにリンクします。図5-106に示すように、「自動マップ・プリファレンス」ダイアログが表示されます。

      図5-106 「自動マップ・プリファレンス」ダイアログが表示されている「Transformation_2.xsl」ページ

      図5-106の説明が続きます
      「図5-106 「自動マップ・プリファレンス」ダイアログが表示されている「Transformation_2.xsl」ページ」の説明

    17. 「OK」をクリックします。XSLマッピングを含むTransformation_2.xsl(XSLマッパー・ツール)ファイルが表示されます。

  10. 「ファイル」「すべて保存」を順番にクリックします。

    図5-107に示すように、Airline2サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。

    図5-107 JDeveloper: BPEL_FIDS.bpel

    図9-58の説明が続きます
    「図5-107 JDeveloper: BPEL_FIDS.bpel」の説明

Airline3サーバーのフローの設計

  1. Flow_1アクティビティを右クリックします。メニューから「シーケンスの追加」をクリックします。Sequence_3が追加されます。

  2. 「コンポーネント・パレット」からSequence_3にswitchアクティビティをドラッグ・アンド・ドロップします。

  3. switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。

  4. <case>」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。

  5. ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。

  6. 式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline3')と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。


    注意:

    この式により、Airline3の情報がリクエストされた場合にのみ、このフローが確実に実行されます。

  7. 「<case>」セクションにinvokeアクティビティを追加します。

    1. invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。

    2. Invoke_3アクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。

    3. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。

    4. 「Airline3」を選択して「OK」をクリックします。

    5. 「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    6. デフォルトの変数名を選択して「OK」をクリックします。「入力変数」および「出力変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。

    7. 「OK」をクリックします。invokeアクティビティがJDeveloperの「BPEL_FIDS.bpel」ページのSequence_3の下に追加されます。

  8. 「<case>」セクションにassignアクティビティを追加します。

    1. 「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのinvokeアクティビティの前にドラッグ・アンド・ドロップします。

    2. Assign_3アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

    3. 「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。

    4. 「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。

    5. 図5-108に示すように、Receive_1アクティビティの入力変数のソースとInvoke_3アクティビティの入力変数のソースの間にコピー操作を作成します。

      図5-108 「コピー操作の作成」ダイアログ

      図9-58の説明が続きます
      「図5-108 「コピー操作の作成」ダイアログ」の説明

    6. 「コピー操作の作成」ダイアログで「OK」をクリックします。

    7. 「OK」をクリックします。

  9. 一時変数を作成し、「<case>」セクションにtransformアクティビティを追加します。


    注意:

    一時変数は、Airline3サーバーからのフライト詳細の格納に使用されます。この情報は後でリプライ変数に追加されます。

    1. (x)で表された「変数」アイコンをクリックします。図5-109に示すように、「変数」ダイアログが表示されます。

      図5-109 「変数」ダイアログ

      図5-109の説明が続きます
      「図5-109 「変数」ダイアログ」の説明

    2. 「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    3. 変数タイプとして「メッセージ・タイプ」を選択します。

    4. 「メッセージ・タイプ」フィールドの端にある「メッセージ・タイプの参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。

    5. 図5-105に示すように、「メッセージ・タイプ」「パートナ・リンク」「FIDS」「FIDS.wsdl」「メッセージ・タイプ」および「FIDSProcessReply_msg_reply」を順番にクリックします。

    6. 「OK」をクリックします。「変数の作成」ダイアログの「メッセージ・タイプ」フィールドにFIDSProcessReply_msg_replyパートナ・リンクが移入されます。

    7. 「OK」をクリックします。「変数」ダイアログの「変数」リストに「メッセージ・タイプ」タイプの変数Variable_2が追加されます。

    8. 「OK」をクリックして「BPEL_FIDS.bpel」ページに戻ります。

    9. transformアクティビティを「<case>」セクションのInvoke_3アクティビティの後にドラッグ・アンド・ドロップします。

    10. Transform_3アクティビティをダブルクリックします。

    11. 「トランスフォーメーション」タブをクリックします。

    12. 「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。

    13. 「ソース変数」リストから「Invoke_3_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。

    14. 「ターゲット変数」リストで「Variable_2」を選択します。

    15. 「OK」をクリックします。XSLマッパー・ツールが表示されます。

    16. 左ペインのソースから、「tns:flight」ノードを右ペインの「FlightDetails」ノードにリンクします。「自動マップ・プリファレンス」ダイアログが表示されます。

    17. 「OK」をクリックします。図5-110に示すように、XSLマッピングを含むTransformation_3.xsl(XSLマッパー・ツール)ファイルが表示されます。

      図5-110 「Transformation_3.xsl」ページ

      図5-110の説明が続きます
      「図5-110 「Transformation_3.xsl」ページ」の説明

  10. 「ファイル」「すべて保存」を順番にクリックします。図5-111に示すように、Airline3サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。

    図5-111 JDeveloper: BPEL_FIDS.bpel

    図9-58の説明が続きます
    「図5-111 JDeveloper: BPEL_FIDS.bpel」の説明

assignアクティビティの追加

  1. 「コンポーネント・パレット」から、assignアクティビティを設計領域のreplyアクティビティとreceiveアクティビティの間にドラッグ・アンド・ドロップします。

  2. Assign_4アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

  3. 「コピー操作」タブをクリックします。図5-112に示すように、「Assign」ダイアログが表示されます。

    図5-112 「Assign」ダイアログ: 「コピー操作」タブ

    図5-112の説明が続きます
    「図5-112 「Assign」ダイアログ: 「コピー操作」タブ」の説明

  4. 「追加操作」を選択します。「追加操作の作成」ダイアログが表示されます。

  5. 図5-113に示すように、一時変数Variable_1に格納されている情報をリプライ変数Reply_1_InboundRequestReply_OutputVariableに追加する追加操作を作成します。

    図5-113 「追加操作の作成」ダイアログ

    図9-58の説明が続きます
    「図5-113 「追加操作の作成」ダイアログ」の説明

  6. 「OK」をクリックします。「Assign」ダイアログが表示されます。

  7. 「追加操作」を選択します。「追加操作の作成」ダイアログが表示されます。

  8. 図5-114に示すように、一時変数Variable_2に格納されている情報をリプライ変数Reply_1_InboundRequestReply_OutputVariableに追加する、別の追加操作を作成します。

    図5-114 「追加操作の作成」ダイアログ

    図9-58の説明が続きます
    「図5-114 「追加操作の作成」ダイアログ」の説明

  9. 「OK」をクリックします。「Assign」ダイアログが表示されます。

  10. 「OK」をクリックします。図5-115に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。

    図5-115 JDeveloper: HelloWorldFlow.bpel

    図5-115の説明が続きます
    「図5-115 JDeveloper: HelloWorldFlow.bpel」の説明

  11. 「ファイル」「すべて保存」を順番にクリックします。

5.5.2.6 JDeveloperを使用したデプロイ

前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。

  1. アプリケーション・サーバー接続を作成します。詳細は、第2.7項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。

  2. アプリケーションをデプロイします。詳細は、第2.8項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。

ServerおよびClient Javaプログラムを実行して、アプリケーションをテストする必要があります。詳細は、関連するREADMEファイルを参照してください。

5.5.2.7 Fusion Middleware Controlコンソールを使用した監視

Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。

  1. http://servername:portnumber/emにナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。

  2. デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。

    「最新のインスタンス」領域で「インスタンスID」の値をメモします。

  3. 「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。

  4. ステップ2でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。

  5. BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。

  6. ペイロード・ノードを開いてペイロード詳細を確認します。

  7. プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。