この章では、外部サービスとしてOracle BPEL Process Manager(Oracle BPEL PM)およびOracle Mediator(メディエータ)で動作する、Oracle JCA Adapter for Sockets(Oracleソケット・アダプタ)の使用方法について説明します。
この章には、次の項が含まれます。
Oracleソケット・アダプタはJCA 1.5準拠のアダプタであり、TCP/IPソケットを介した通信用の標準または非標準プロトコルのモデル化に使用されます。Oracleソケット・アダプタを使用すると、クライアントまたはサーバー・ソケットの作成や、接続の確立が可能です。テキストまたはバイナリのデータを転送できます。
この項には、次の項目が含まれます。
Oracleソケット・アダプタは、JCA 1.5アーキテクチャに基づいています。JCAでは、異機種間のエンタープライズ情報システム(EIS)の統合に標準アーキテクチャを提供します。Oracleソケット・アダプタのJCAバインディング・コンポーネントでは、基盤となるJCA相互作用がOracle BPEL PM統合のサービス(JCAバインディングを使用したWSDL
)として公開されています。図5-1に、Oracleソケット・アダプタのアーキテクチャを示します。Oracle JCAアダプタのアーキテクチャの詳細は、第1.2.1.1項「アーキテクチャ」を参照してください。
Oracleソケット・アダプタは、自動的にメディエータと統合されます。JDeveloperデザイナでOracle Socketサービスを作成すると、アダプタ構成ウィザードが起動します。このウィザードでOracleソケット・アダプタを構成できます。構成が完了すると、Oracle JDeveloper(JDeveloper)の「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。
Oracle JCAアダプタとメディエータの統合の詳細は、第3.2項「アダプタとOracle Fusion Middlewareの統合」を参照してください。
Oracleソケット・アダプタは、自動的にOracle BPEL PMと統合されます。JDeveloper BPELデザイナの「コンポーネント・パレット」から「ソケット・アダプタ」をドラッグ・アンド・ドロップすると、図5-2に示すように、アダプタ構成ウィザードが起動して「ようこそ」ページが表示されます。
このウィザードでOracleソケット・アダプタを構成できます。アダプタ構成ウィザードでは、図5-3に示すように、サービス名の入力を求められます。
構成が完了すると、JDeveloperの「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。
Oracle JCAアダプタとOracle BPEL PMの統合の詳細は、第3.2項「アダプタとOracle Fusion Middlewareの統合」を参照してください。
コンポジットは、設計されて単一アプリケーションにデプロイされるサービス、サービス・コンポーネント(Oracle BPEL PMおよびメディエータ)、ワイヤおよび参照のアセンブリです。コンポジットにより、メッセージに記述された情報が処理されます。コンポジットの詳細は、composite.xml
ファイルに格納されます。Oracleソケット・アダプタとSOAコンポジットの統合の詳細は、第3.2.4項「Oracle SOAコンポジットとアダプタの統合」を参照してください。
Oracleソケット・アダプタを使用すると、TCP/IPソケットを介してデータの読取りおよび書込みをするようにBPELプロセスまたはメディエータ・サービスを構成できます。次の特徴があります。
TCP/IPソケットを介した通信用の標準または非標準プロトコルのモデル化が可能
インバウンドとアウトバウンドの両方の通信をサポート
複雑なプロトコル・ハンドシェイクをXSLで宣言的にモデル化可能
プロトコル・ハンドシェイクのモデル化にカスタムJavaコードのプラグインを選択可能
アダプタがトランスレータ・インフラストラクチャ(NXSD)と統合されているため、ソケットを介したネイティブ・データの読取りおよび書込みをサポート
複数のキャラクタ・エンコーディングをサポート
この項では、Oracleソケット・アダプタの次の概念について説明します。
Oracleソケット・アダプタでは、ソケットを介したインバウンドおよびアウトバウンドの通信(単方向または双方向)をサポートしています。Oracleソケット・アダプタの通信モードは、次の各項で説明します。
インバウンド起動の一環として、Oracleソケット・アダプタはサーバー・ソケットを開き、着信接続を待機します。アダプタではサーバー・ソケットへの接続を使用し、リクエスト・メッセージを読み取ります。このメッセージはBPELまたはメディエータにパブリッシュされます。Oracleソケット・アダプタでは次に、同じ接続を使用してレスポンスを同期的に返信します。
図5-4に、インバウンド同期リクエスト/レスポンスのシナリオを示します。
アウトバウンド同期リクエスト/レスポンスの場合、リクエストはBPELまたはメディエータから行われます。Oracleソケット・アダプタはサーバー・ソケットに接続し、リクエスト・メッセージをサーバー・ソケットに出力ストリームで送信します。Oracleソケット・アダプタは次に、サーバー・ソケットからのレスポンスを入力ストリームでブロックし、レスポンスをBPELまたはメディエータに返信します。
図5-5に、アウトバウンド同期リクエスト/レスポンスのシナリオを示します。
インバウンド起動の一環として、Oracleソケット・アダプタはサーバー・ソケットを開き、着信接続を待機します。アダプタではサーバー・ソケットへの接続を使用し、リクエスト・メッセージを読み取ります。このメッセージはBPELまたはメディエータにパブリッシュされます。このシナリオでは、リプライは送信されません。
通信プロトコルまたはハンドシェイクは、認証手順、確認、状況に応じたデータの送受信など、異なる個別のステップで構成されます。Oracleソケット・アダプタでは、プロトコル・ハンドシェイクを定義する次の各メカニズムをサポートしています。
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を使用する拡張関数の使用方法を示しています。
入力および出力変数を定義するスキーマに注釈を付け、NXSD構成メンバーを使用して、次のメソッドでソケット・ストリームからの読取りおよび書込みを行います。
socketReadWithXlation():DocumentFragment
このメソッドを、入力用に構成されたスキーマおよびスキーマ要素を使用した、ソケットの入力ストリームからの読取りに使用できます。
socketWriteWithXlation(xml:NodeList)
このメソッドを、出力用に構成されたスキーマを使用した、ソケットの出力ストリームへの書込みに使用できます。
図5-7に示すXSDファイルは、NXSD構成メンバーを使用して、入力および出力変数を定義するスキーマに注釈を付け、拡張関数の使用方法を示しています。
スタイルシートを使用してハンドシェイクを定義するには、図5-8に示すように、「プロトコル」ページで「XSLTを使用してハンドシェイクを定義します」を選択し、参照してXSLファイルを選択する必要があります。
Oracleソケット・アダプタは、カスタムJavaコードのプラグインによって定義される、カスタマイズされたハンドシェイク・メカニズムを持つプロトコルを使用するように構成できます。このカスタムJavaコードは、ICustomParserインタフェースoracle.tip.pc.services.translation.util.ICustomParser
を実装する必要があります。このインタフェースはOracleソケット・アダプタで提供され、ハンドシェイクのカスタム実装を可能にします。
注意: ICustomParserインタフェース・ファイルは、
|
該当する通信パラダイムに基づき、次のメソッドを実装する必要があります。
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(); }
注意:
|
カスタムJavaコードを使用してハンドシェイクを定義するには、図5-9に示すように、「カスタムJavaコードを使用してハンドシェイクを定義します」を選択し、「Javaクラス」フィールドでハンドシェイクを実装するJavaクラスを指定する必要があります。
Oracleソケット・アダプタは、ソケットのI/Oストリームとの間の変換に関連するハンドシェイクを必要としないプロトコルを使用するように構成できます。
ハンドシェイクを必要としないプロトコルを使用するには、図5-10に示すように、「プロトコル」ページで「ハンドシェイクなし」を選択する必要があります。
「エンコーディング」プロパティはネイティブ・データの格納に使用されるキャラクタ・エンコーディングを表し、「バイト順」プロパティはネイティブ・データのバイト順(BIG_ENDIAN
またはLITTLE_ENDIAN
)です。
キャラクタ・エンコーディングとバイト順は、ネイティブ・フォーマット・ビルダー・ウィザードを使用してスキーマ・ファイル(NXSD)内で指定できます。また、使用するエンコーディングとバイト順をアダプタ構成ウィザードで指定することもできます。エンコーディングとバイト順を指定しない場合、デフォルト値はUS-ASCII
とBIG_ENDIAN
です。
変換を使用する場合にのみ適用可能なエンコーディングとバイト順の値を指定するには、アダプタ構成ウィザードの「プロトコル」ページで次の手順を実行する必要があります。
図5-11に示すように、「プロトコル」ページの「エンコーディング/バイト順」セクションで「エンコーディング/バイト順の指定」オプションを選択します。
次のいずれかのタスクを実行してエンコーディングを設定します。
スキーマ・ファイルで指定されたエンコーディングを使用するには、「エンコーディング」の選択を解除したままにします。
アダプタ構成ウィザードを使用してエンコーディングを指定するには、「エンコーディング」を選択し、「エンコーディング」リストからエンコーディング・タイプを選択します。
注意: 「エンコーディング」を選択した場合、アダプタ構成ウィザードを使用して指定したエンコーディング・タイプがNXSDファイル内で指定されているエンコーディング・タイプよりも優先されます。 |
次のいずれかのタスクを実行してバイト順を設定します。
スキーマ・ファイルで指定したバイト順を使用するには、「スキーマからバイト順の値を使用します」を選択します。
アダプタ構成ウィザードを使用してバイト順を指定するには、「バイト順」を選択し、「バイト順」リストからバイト順を選択します。
「終了」をクリックします。
「終了」をクリックした後で、構成ウィザードに、ソケット・アダプタの構成が完了したことを示すページが表示されます。
Oracleソケット・アダプタでは、次のパフォーマンス・チューニング機能がサポートされています。
パフォーマンス・チューニングの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』のOracleソケット・アダプタのチューニングに関する項を参照してください。
Oracleソケット・アダプタのパフォーマンスを最適化する方法の1つとして、接続プールの使用があります。接続先のソケット・サーバーが相互作用のたびにソケットを閉じないかぎり、接続プールを使用できます。接続プールを使用すると、ソケット接続を繰り返し使用でき、相互作用のたびに新規のソケットを作成するオーバーヘッドを回避できます。Oracleソケット・アダプタの接続プールは、Oracle WebLogic Serverコンソールを使用して構成する必要があります。
注意: 接続プール機能は、アウトバウンド相互作用にのみ適用されます。 |
Oracleソケット・アダプタの接続プーリングを構成する手順は、次のとおりです。
Oracle WebLogic Serverコンソールにログインします。コンソールにアクセスするには、http://
servername
:portnumber
/console
にナビゲートします。
「ドメイン構造」の左ペインで「デプロイメント」をクリックします。「デプロイメントの概要」ページが表示されます。
図5-12 Oracle WebLogic Serverコンソール: 「デプロイメントの概要」ページ
「SocketAdapter」をクリックします。「SocketAdapterの設定」ページが表示されます。
「構成」タブをクリックします。
「アウトバウンド接続プール」タブをクリックし、javax.resource.cci.ConnectionFactoryを開いて図5-13に示すように構成済のコネクション・ファクトリを表示します。
図5-13 Oracle WebLogic Serverコンソール: 「SocketAdapterの設定」ページ
「eis/socket/SocketAdapter」をクリックします。「javax.resource.cci.ConnectionFactoryの設定」ページが表示されます。
図5-14に示すように、KeepAlive
コネクション・ファクトリのプロパティをtrue
に設定します。Oracleソケット・アダプタの接続プール機能が有効になります。
図5-14 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ
「保存」をクリックします。図5-15に示すように、メッセージ「デプロイメント・プランが正常に更新されました。」
を含む「javax.resource.cci.ConnectionFactoryの設定」ページが表示されます。
図5-15 Oracle WebLogic Serverコンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ
注意: 接続プール・パラメータは、Oracle WebLogic Server管理コンソールの「接続プール」タブを使用して変更できます。 |
Oracleソケット・アダプタを構成するには、次のタスクを実行する必要があります。
Oracleソケット・アダプタの構成プランでのTCPポートの指定
Oracleソケット・アダプタを構成するには、表5-1にリストされているプロパティの値をweblogic-ra.xml
ファイルに指定する必要があります。これらのプロパティはOracle WebLogic Server管理コンソールから更新できます。詳細は、第2.18項「アダプタ・コネクション・ファクトリの追加」を参照してください。
プロパティ | 説明 |
---|---|
Host |
アウトバウンド相互作用の場合は、ソケット・サーバーが実行されていて、接続先となるシステム名。インバウンド相互作用の場合は、常に |
Port |
アウトバウンド相互作用の場合は、ソケット・サーバーが実行されていて、アダプタの接続先となるポート番号です。インバウンド相互作用の場合は、着信接続をソケット・アダプタがリスニングするポート番号です。 |
Timeout |
この値がゼロ以外のタイムアウト間隔に設定されている場合、このソケットに関連付けられているInputStreamに対する |
KeepAlive |
アウトバウンド相互作用の場合にのみ適用可能。接続プール機能を使用するには、 |
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>
注意: 接続プーリングを設定するには、 |
クライアントまたはサーバー・ソケットと接続をネゴシエートするには、ハンドシェイクが必要な場合があります。
アウトバウンド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>
インバウンド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>
Oracleソケット・アダプタの場合、XSLマッパー・ツールを使用してXSLファイルを設計できます。次の各項では、様々な通信シナリオに使用するXSLの設計手順について説明します。
この項では、XSLマッパー・ツールを使用してインバウンド同期リクエスト/リプライのシナリオのXSLを設計する手順について説明します。
注意: この使用例を実行するには、
Oracle SOA Sample Codeサイトで このファイルを |
SOAコンポジットの設計
SOAコンポジットを設計するには、第5.5.1.2項「SOAコンポジットの設計」で説明する手順を実行します。
インバウンドOracleソケット・アダプタ・サービスの作成
インバウンドOracleソケット・アダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにサービス名としてHelloWorld
を入力して「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
図5-16に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択し、「次へ」をクリックします。「ソケット接続」ページが表示されます。
図5-17に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapter
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-18に示すように、「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。
「OK」をクリックします。図5-19に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsdファイルが移入されます。
「次へ」をクリックします。図5-20に示すように、「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。図5-21に示すように、「入力」ダイアログが表示されます。
図5-21に示すように、XSLファイル名としてデフォルト値のrequest.xslを使用し、「OK」をクリックします。
「ReplyXslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。「入力」ダイアログが表示されます。
XSLファイル名としてデフォルト値のreply.xslを使用し、「OK」をクリックします。
「終了」をクリックします。request.xslおよびreply.xslファイルが作成されます。
図5-22に、「request.xsl」ページを示します。
注意: 「 インバウンド・リクエスト・シナリオの場合、Oracleソケット・アダプタはソケットが受信するネイティブ・データを読み取ってXMLフォーマットに変換します。つまり、ソース側にXMLファイルはありません。XSLTマッパーは常にソースおよびターゲットXSDファイルを必要とするため、マッパー・ツールにはダミーのXSDファイルが表示されます。 |
図5-23に、「reply.xsl」ページを示します。
注意: 「 |
インバウンド同期リクエスト/リプライ操作のリクエスト部分を次の手順で定義します。
図5-24に示すように、「request.xsl」ページで、「コンポーネント・パレット」の「Advanced Functions」リストからsocketReadを中央ペインにドラッグ・アンド・ドロップします。
socketRead拡張関数をダブルクリックします。「関数の編集 - socketRead」ダイアログが表示されます。
図5-25に示すように、「nxsdStyle」および「nxsdStyleAttributes」フィールドに関数パラメータを入力します。
注意:
|
「OK」をクリックします。「request.xsl」(XSLマッパー・ツール)ページが表示されます。
中央ペインにあるsockRead
関数を、右ペインにあるターゲットinput
ノードにリンクします。図5-26に示すように、XSLマッピングを示すrequest.xsl(XSLマッパー・ツール)が表示されます。
インバウンド同期リクエスト/リプライ操作のリプライ部分を次の手順で定義します。
「コンポーネント・パレット」リストから「拡張」を選択し、「Advanced Functions」を選択します。拡張関数のリストが表示されます。
「reply.xsl」ページで、「コンポーネント・パレット」の「Advanced Functions」リストからsocketWriteを中央ペインにドラッグ・アンド・ドロップします。
socketWrite拡張関数をダブルクリックします。「関数の編集 - socketWrite」ダイアログが表示されます。
図5-27に示すように、「valueToWrite」、「nxsdStyle」および「nxsdStyleAttributes」フィールドに関数パラメータを入力します。
注意:
|
「OK」をクリックします。「reply.xsl」(XSLマッパー・ツール)ページが表示されます。
中央ペインにあるsockWrite
関数を、右ペインにあるターゲットinput
ノードにリンクします。図5-28に示すように、XSLマッピングを示すreply.xsl(XSLマッパー・ツール)が表示されます。
「ファイル」、「すべて保存」を順番にクリックします。インバウンドOracleソケット・アダプタのrequest.xslおよびreply.xslファイルが作成されます。
この項では、XSLマッパー・ツールを使用してアウトバウンド同期リクエスト/リプライのシナリオのXSLを設計する手順について説明します。
注意: この使用例を実行するには、
Oracle SOA Sample Codeサイトで
|
SOAコンポジットの設計
SOAコンポジットを設計するには、第5.5.1.2項「SOAコンポジットの設計」で説明する手順を実行します。
アウトバウンドOracleソケット・アダプタ参照の作成
アウトバウンドOracleソケット・アダプタ参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにサービス名としてHelloWorld
を入力して「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
図5-16に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択し、「次へ」をクリックします。「ソケット接続」ページが表示されます。
「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapter
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-18に示すように、「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。
「OK」をクリックします。図5-19に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「新規XSLファイルを作成します」アイコンをクリックします。「入力」ダイアログが表示されます。
XSLファイル名としてデフォルト値のinvoke.xsl
を使用し、「OK」をクリックします。
「終了」をクリックします。図5-29に示すように、XSLマッパー・ツールにinvoke.xslファイルが表示されます。
ターゲット側で「HelloWorldProcessResponse」要素を右クリックします。図5-30に示すように、メニューが表示されます。
「変数の追加」をクリックします。図5-31に示すように、「変数の追加」ダイアログが表示されます。
「ローカル名」フィールドにvar1
と入力して「OK」をクリックします。var1変数がXSLマッパー・ツールのターゲット・ペインに追加されます。
「コンポーネント・パレット」リストから「拡張」を選択し、「Advanced Functions」を選択します。拡張関数のリストが表示されます。
アウトバウンド同期リクエスト/リプライ操作のリクエスト部分を、データをソケット・サーバーに書き込むように次の手順で定義します。
図5-32に示すように、「コンポーネント・パレット」の「Advanced Functions」リストからsocketWriteWithXlationを中央ペインにドラッグ・アンド・ドロップします。
var1ノードをsocketWriteWithXlation関数にドラッグします。図5-33に示すように、リンクが作成されます。
socketWriteWithXlation拡張関数をダブルクリックします。「関数の編集 - socketWriteWithXlation」ダイアログが表示されます。
図5-34に示すように、「NodeList」フィールドにドット1個(.)を入力します。
注意:
「NodeList」フィールドで指定したドット(.)は、HelloWorldProcessRequestを最上位ノードに書き込むことを示します。 |
「OK」をクリックします。「警告」ダイアログが表示されます。
「はい」をクリックします。「invoke.xsl」ページが表示されます。同期リクエスト/リプライ操作のリクエスト部分が定義されています。
アウトバウンド同期リクエスト/リプライ操作のリプライ部分を次の手順で定義します。
図5-35に示すように、「コンポーネント・パレット」の「Advanced Functions」リストからsocketReadWithXlationを中央ペインにドラッグ・アンド・ドロップします。
「コンポーネント・パレット」リストから「一般」を選択し、「XSLT Constructs」を選択します。XSLT構成メンバーのリストが表示されます。
「コンポーネント・パレット」から、copy-ofをターゲット・ペインのHelloWorldProcessResponseにドラッグします。図5-36に示すように、「copy-ofタイプ・ダイアログ」が表示されます。
図5-36 JDeveloper: 「copy-ofタイプ・ダイアログ」が表示されている「invoke.xsl」ページ
「OK」をクリックします。図5-37に示すように、copy-of XSLT構成メンバーがターゲット・ペインに追加された状態で「invoke.xsl」(XSLマッパー・ツール)ページが表示されます。
copy-of XSLT構成メンバーをsocketReadWithXlation関数にドラッグします。図5-38に示すように、リンクが作成されます。
「ファイル」、「すべて保存」を順番にクリックします。アウトバウンド同期リクエスト/リプライのハンドシェイクが定義されます。
Oracleソケット・アダプタの構成プランでTCPポートを指定するには、次の手順を実行します(<service-name>はサービス名です)。
<service-name>_tcp.jcaファイルにポート・プロパティを追加します。
<property name="Port" value="Port"/>
構成プランXMLファイルに次のコードを追加します。
<service_name=<XXXXXX"> <property> <property name="Port"> <replace>2222</replace> </property> <binding type'"jca"/> </service>
.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>
構成プランでコンポジットをデプロイします。
デプロイすると、Oracleソケット・アダプタは構成プランで指定されたポート2222でリスニングします。
構成プランなしでコンポジットをデプロイする場合、または構成プランでPortプロパティがオーバーライドされない場合、Oracleソケット・アダプタはcomposite.xmlファイルのデフォルトのPortプロパティで指定されたソケット(この例ではポート1111)でリスニングします。
この項には、Oracleソケット・アダプタの次の使用例が含まれます。
これは単純なHelloWorldの使用例であり、Oracleソケット・アダプタを使用した通信の同期インバウンド・リクエスト/レスポンス・モードと同期アウトバウンド・リクエスト/レスポンス・モードを示しています。HelloWorldビジネス・プロセスはOracleソケット・アダプタのインバウンド・サービスから入力文字列を取得し、メッセージをBPELプロセスにパブリッシュします。BPELプロセスはOracleソケット・アダプタのアウトバウンド・サービス(入力文字列に接頭辞?Hello?を追加して戻す単純なHelloWorldサーバー)を起動し、同期リプライを使用して受信した文字列を戻します。
この使用例には、次の項目が含まれます。
この使用例を実行するには、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
サンプルにアクセスできます。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
図5-39に示すように、「アプリケーション名」フィールドにhelloworld-socket
と入力して「次へ」をクリックします。「プロジェクトの名前付け」ページが表示されます。
「OK」をクリックします。「プロジェクトの名前付け」ダイアログが表示されます。
図5-40に示すように、「プロジェクト名」フィールドにHelloWorldComposite
と入力してから「プロジェクト・テクノロジ」の下で「SOA」を選択し、右矢印をクリックして「選択済」ボックスに移動します。
HelloWorldアプリケーションとHelloWorldCompositeプロジェクトが「アプリケーション・ナビゲータ」に表示されます。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
図5-41に示すように、「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成」ダイアログが表示されます。
図5-42に示すように、「名前」フィールドにHelloWorldFlow
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図5-43に示すように、HelloWorldアプリケーションとHelloWorldCompositeプロジェクトが設計領域に表示されます。
HelloWorld.xsd
ファイルをプロジェクトのxsdディレクトリにコピーします(このファイルの場所は、第5.5.1.1項「前提条件」を参照)。
request.xsl
、reply.xsl
およびinvoke.xsl
ファイルをプロジェクトのxslディレクトリにコピーします(これらのファイルの場所は、第5.5.1.1項「前提条件」を参照)。
次の手順に従ってインバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
図5-44に示すように、「サービス名」フィールドにHelloWorldClient
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
図5-45に示すように、「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
図5-46に示すように、「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
図5-47に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapter
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-48に示すように、「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。
「OK」をクリックします。図5-49に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
図5-50に示すように、ファイル名として「request.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。
「ReplyXslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
ファイル名として「reply.xsl」を選択して「OK」をクリックします。図5-51に示すように、「Xslt」フィールドに移入が行われます。
「終了」をクリックします。「composite.xml」ページが図5-52のように表示されます。
次の手順に従ってアウトバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにHelloWorldServer
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
図5-53に示すように、「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
図5-54に示すように、「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapter
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-48に示すように、「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessRequest」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「HelloWorld.xsd」および「HelloWorldProcessResponse」を順番にクリックします。
「OK」をクリックします。図5-49に示すように、「メッセージ」ページの「URL」フィールドにHelloWorld.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
図5-55に示すように、「ファイル名」として「invoke.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。
「終了」をクリックします。「composite.xml」ページが図5-56のように表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるHelloWorldClientの小さい三角形を、「コンポーネント」領域のHelloWorldFlow BPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるHelloWorldFlow BPELプロセス内の小さい三角形を、「外部参照」領域のHelloWorldServerに緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図5-57のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「HelloWorldFlow」をダブルクリックします。「BPELHelloWorld.bpel」ページが表示されます。
図5-58に示すように、「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
図5-59に示すように、「名前」フィールドにReceiveInput
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図5-60に示すように、「HelloWorldClient」を選択して「OK」をクリックします。
図5-61に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。図5-62に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。
invokeアクティビティの追加
図5-63に示すように、「コンポーネント・パレット」から、invokeアクティビティを設計領域にあるReceiveInputアクティビティの後にドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
図5-64に示すように、「名前」フィールドにWriteHelloWorld
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図5-65に示すように、「HelloWorldServer」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
同じ手順を繰り返して出力変数を選択します。図5-66に示すように、「Invoke」ダイアログが表示されます。
「OK」をクリックします。図5-67に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。
replyアクティビティの追加
図5-68に示すように、「コンポーネント・パレット」から設計領域にreplyアクティビティをドラッグ・アンド・ドロップします。
replyアクティビティをダブルクリックします。「Reply」ダイアログが表示されます。
「名前」フィールドにReply
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図5-60に示すように、「HelloWorldClient」を選択して「OK」をクリックします。
「Reply」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。図5-69に示すように、「変数」フィールドにデフォルトの変数名が移入されます。
「OK」をクリックします。図5-70に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「コピー操作」タブをクリックします。図5-71に示すように、「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
左ペインで、「ReceiveInput_InboundRequestReply_InputVariable」変数の下にある「ns3:input」を選択します。
図5-72に示すように、右ペインで「WriteHelloWorld_OutboundRequestReply_InputVariable」変数の下にある「ns3:input」を選択します。
「OK」をクリックします。「Assign」ダイアログが表示されます。
「OK」をクリックします。JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。
invokeアクティビティとreplyアクティビティの間に別のassignアクティビティを追加します。
assignアクティビティをダブルクリックします。
「コピー操作」タブをクリックして「コピー操作」を選択します。
左ペインで、「WriteHelloWorld_OutboundRequestReply_OutputVariable」の下にある「ns3:result」を選択します。
右ペインで、「Reply_InboundRequestReply_OutputVariable」の下にある「ns3:result」を選択して「OK」をクリックします。
「OK」をクリックします。図5-73に示すように、JDeveloperの「HelloWorldFlow.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ2でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。
フライト情報表示システムの使用例では、Oracleソケット・アダプタを使用してハンドシェイクを定義する際の各種モードについて説明します。フライト情報表示サーバー(FIDS)は、特定のソース(JFKまたはSFO)からのフライトに関してフライト・ステータス情報をリクエストするFIDSクライアントにより起動されます。起動したFIDSは、3つのエアライン(Airline1、Airline 2およびAirline 3)に関するフライト・データ・リクエストを起動します。次に、受信した情報を収集し、HTTPプロトコルを使用してFIDSクライアントにリプライします。
この使用例には、次の項目が含まれます。
この使用例を実行するには、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サイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにFIDSApp
と入力して「次へ」をクリックします。「プロジェクトの名前付け」ページが表示されます。
「OK」をクリックします。「プロジェクトの名前付け」ダイアログが表示されます。
「プロジェクト名」フィールドにFIDSComposite
と入力してから「プロジェクト・テクノロジ」の下で「SOA」を選択し、右矢印をクリックして「選択済」ボックスに移動します。
FIDSAppアプリケーションとFIDSCompositeプロジェクトが「アプリケーション・ナビゲータ」に表示されます。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成」ダイアログが表示されます。
「名前」フィールドにBPEL_FIDS
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図5-74に示すように、FIDSAppアプリケーションとFIDSCompositeプロジェクトが設計領域に表示されます。
Airline1.xsd
、Airline2.xsd
、Airline3.xsd
およびFIDS.xsd
ファイルをプロジェクトFIDSComposite
のFIDSComposite\xsd
にコピーします(これらのファイルの場所は、第5.5.2.1項「前提条件」を参照)。
invoke.xsl
、request.xsl
およびreply.xsl
をプロジェクトFIDSComposite
のFIDSComposite\xsl
にコピーします(これらのファイルの場所は、第5.5.2.1項「前提条件」を参照)。
次の手順を実行し、FIDSAppアプリケーションの公開に使用するインバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにFIDS
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「インバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
図5-75に示すように、「ソケット接続JNDI名」フィールドにeis/socket/InboundSocketAdapter
と入力し、「ホストおよびポートの指定」を選択します。
「ポート番号」フィールドに9000
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-76に示すように、「プロジェクトのスキーマ・ファイル」、「FIDS.xsd」および「FIDSProcessRequest」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにFIDS.xsdファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「FIDS.xsd」および「FIDSProcessReply」を順番にクリックします。
「OK」をクリックします。図5-77に示すように、「メッセージ」ページの「URL」フィールドにFIDS.xsdファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」アイコンをクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
ファイル名として「request.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。
「ReplyXslt」フィールドの端に表示される「参照してXSLファイルを選択します」アイコンをクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
ファイル名として「reply.xsl」を選択して「OK」をクリックします。図5-78に示すように、「Xslt」フィールドに移入が行われます。
「終了」をクリックします。「composite.xml」ページが図5-79のように表示されます。
次の手順に従って、Airline1サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAirline1
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
図5-80に示すように、「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapter
と入力し、「ホストおよびポートの指定」を選択します。
「ホスト名」フィールドにAirline1ソケット・サーバー・プログラムを実行する必要のあるシステムの名前を入力し、「ポート番号」フィールドに9001
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline1.xsd」および「Source」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline1.xsdファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline1.xsd」および「Flight-Details」を順番にクリックします。
「OK」をクリックします。図5-81に示すように、「メッセージ」ページの「URL」フィールドにAirline1.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「XSLTを使用してハンドシェイクを定義します」を選択します。
「Xslt」フィールドの端に表示される「参照してXSLファイルを選択します」をクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。
図5-82に示すように、「ファイル名」として「invoke.xsl」を選択して「OK」をクリックします。「Xslt」フィールドに移入が行われます。
「終了」をクリックします。「composite.xml」ページが図5-83のように表示されます。
次の手順に従って、Airline2サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAirline2
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapter
と入力して「ホストおよびポートの指定」を選択します。
「ホスト名」フィールドにAirline2ソケット・サーバー・プログラムを実行するシステムの名前を入力し、「ポート番号」フィールドに9002
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline2.xsd」および「Source」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline2.xsd
ファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline2.xsd」および「flight-details」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline2.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「ハンドシェイクなし」を選択します。
「終了」をクリックします。「composite.xml」ページが図5-84のように表示されます。
次の手順に従って、Airline3サーバー・ソケットのアウトバウンドOracleソケット・アダプタ・サービスを作成します。
「コンポーネント・パレット」から、「ソケット・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAirline3
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「操作タイプ」として「アウトバウンド同期リクエスト/リプライ」を選択します。
「次へ」をクリックします。「ソケット接続」ページが表示されます。
「ソケット接続JNDI名」フィールドにeis/socket/OutboundSocketAdapter
と入力して「ホストおよびポートの指定」を選択します。
「ホスト名」フィールドにAirline3ソケット・サーバー・プログラムを実行するシステムの名前を入力し、「ポート番号」フィールドに9003
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「メッセージ・スキーマのリクエスト」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline3.xsd」および「src」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline3.xsd
ファイルが移入されます。
「メッセージ・スキーマのリプライ」ボックスの「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「Airline3.xsd」および「airline」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAirline3.xsd
ファイルが移入されます。
「次へ」をクリックします。「プロトコル」ページが表示されます。
「カスタムJavaコードを使用してハンドシェイクを定義します」を選択します。
「Javaクラス」フィールドにcom.oracle.socket.fids.custom.Airline3Custom
と入力します。
「終了」をクリックします。「composite.xml」ページが図5-85のように表示されます。
作成したコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるFIDSクライアント内の小さい三角形を、「コンポーネント」領域のBPEL_FIDSプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPEL_FIDSプロセス内の小さい三角形を、「外部参照」領域のAirline1、Airline2およびAirline3サーバー内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlファイルが図5-86のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPEL_FIDS」をダブルクリックします。「BPELFIDS.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドでデフォルト名のReceive_1
を保持します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図5-87に示すように、「FIDS」を選択して「OK」をクリックします。
図5-88に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。図5-89に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。
replyアクティビティの追加
図5-90に示すように、「コンポーネント・パレット」から設計領域にreplyアクティビティをドラッグ・アンド・ドロップします。
replyアクティビティをダブルクリックします。「Reply」ダイアログが表示されます。
「名前」フィールドでデフォルト名のReply_1
を保持します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図5-87に示すように、「FIDS」を選択して「OK」をクリックします。
「Reply」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。図5-91に示すように、「変数」フィールドにデフォルトの変数名が移入されます。
「OK」をクリックします。図5-92に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。
flowアクティビティの追加
図5-93に示すように、「コンポーネント・パレット」から、flowアクティビティを設計領域のreceiveアクティビティとreplyアクティビティの間にドラッグ・アンド・ドロップします。
Flow_1アクティビティを開きます。シーケンスの作成画面が表示されます。
Airline1サーバーのフローの設計
図5-94に示すように、「コンポーネント・パレット」からSequence_1にswitchアクティビティをドラッグ・アンド・ドロップします。
switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。
図5-95に示すように、「<case>
」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。
ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。
図5-96に示すように、式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline1')
と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。
注意: この式により、Airline1の情報がリクエストされた場合にのみ、このフローが確実に実行されます。 |
「<case>」セクションにinvokeアクティビティを追加します。
invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「Airline1」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。
「OK」をクリックします。図5-97に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。
「<case>」セクションにassignアクティビティを追加します。
「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのInvoke_1アクティビティの前にドラッグ・アンド・ドロップします。
Assign_1アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図5-98に示すように、Receive_1アクティビティの入力変数のソースとInvoke_1アクティビティの入力変数のソースの間にコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
「OK」をクリックします。
図5-99に示すように、「BPEL_FIDS.bpel」ページが表示されます。
「<case>」セクションにtransformアクティビティを追加します。
transformアクティビティを「<case>」セクションのInvoke_1アクティビティの後にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。
「トランスフォーメーション」タブをクリックします。
「作成... (Alt + N)」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」リストから「Invoke_1_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。
「ターゲット変数」リストから「Reply_1_InboundRequestReply_OutputVariable」を選択します。
「OK」をクリックします。XSLマッパー・ツールが表示されます。
左ペインのソースから、「tns:Flight
」ノードを右ペインにあるターゲットの「FlightDetails
」ノードにリンクします。「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。図5-100に示すように、「Transformation_1.xsl」(XSLマッパー・ツール)が表示されます。
「ファイル」、「すべて保存」を順番にクリックします。図5-101に示すように、Airline1サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。
Airline2サーバーのフローの設計
空のsequenceアクティビティをダブルクリックし、「名前」フィールドにSequence_2
と入力します。
「コンポーネント・パレット」からSequence_2にswitchアクティビティをドラッグ・アンド・ドロップします。
switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。
「<case>
」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。
ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。
式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline2')
と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。
注意: この式により、Airline2の情報がリクエストされた場合にのみ、このフローが確実に実行されます。 |
「<case>」セクションにinvokeアクティビティを追加します。
invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。
Invoke_2アクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「Airline2」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「入力変数」および「出力変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。
「OK」をクリックします。invokeアクティビティがJDeveloperの「BPEL_FIDS.bpel」ページのSequence_2の下に追加されます。
「<case>」セクションにassignアクティビティを追加します。
「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのinvokeアクティビティの前にドラッグ・アンド・ドロップします。
Assign_2アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図5-102に示すように、Receive_1アクティビティの入力変数のソースとInvoke_2アクティビティの入力変数のソースの間にコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
「OK」をクリックします。
一時変数を作成し、「<case>」セクションにtransformアクティビティを追加します。
注意: 一時変数は、Airline2サーバーからのフライト詳細の格納に使用されます。この情報は後でリプライ変数に追加されます。 |
(x)で表された「変数」アイコンをクリックします。図5-103に示すように、「変数」ダイアログが表示されます。
「作成」アイコンをクリックします。図5-104に示すように、「変数の作成」ダイアログが表示されます。
変数タイプとして「メッセージ・タイプ」を選択します。
「メッセージ・タイプ」フィールドの端にある「メッセージ・タイプの参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-105に示すように、「メッセージ・タイプ」、「パートナ・リンク」、「FIDS」、「FIDS.wsdl」、「メッセージ・タイプ」および「FIDSProcessReply_msg_reply」を順番にクリックします。
「OK」をクリックします。「変数の作成」ダイアログの「メッセージ・タイプ」フィールドにFIDSProcessReply_msg_replyパートナ・リンクが移入されます。
「OK」をクリックします。「変数」ダイアログの「変数」リストに「メッセージ・タイプ」タイプの変数Variable_1が追加されます。
「OK」をクリックして「BPEL_FIDS.bpel」ページに戻ります。
transformアクティビティを「<case>」セクションのInvoke_2アクティビティの後にドラッグ・アンド・ドロップします。
Transform_2アクティビティをダブルクリックします。
「トランスフォーメーション」タブをクリックします。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」リストから「Invoke_2_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。
「ターゲット変数」リストで「Variable_1」を選択します。
「OK」をクリックします。XSLマッパー・ツールが表示されます。
左ペインのソースから、「tns:flight
」ノードを右ペインの「FlightDetails
」ノードにリンクします。図5-106に示すように、「自動マップ・プリファレンス」ダイアログが表示されます。
図5-106 「自動マップ・プリファレンス」ダイアログが表示されている「Transformation_2.xsl」ページ
「OK」をクリックします。XSLマッピングを含むTransformation_2.xsl(XSLマッパー・ツール)ファイルが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
図5-107に示すように、Airline2サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。
Airline3サーバーのフローの設計
Flow_1アクティビティを右クリックします。メニューから「シーケンスの追加」をクリックします。Sequence_3
が追加されます。
「コンポーネント・パレット」からSequence_3にswitchアクティビティをドラッグ・アンド・ドロップします。
switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。
「<case>
」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。
ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。
式としてboolean(bpws:getVariableData('Receive_1_InboundRequestReply_InputVariable','FIDSProcessRequest','/ns5:FIDSProcessRequest/ns5:AirlineName')='Airline3')
と入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。
注意: この式により、Airline3の情報がリクエストされた場合にのみ、このフローが確実に実行されます。 |
「<case>」セクションにinvokeアクティビティを追加します。
invokeアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。
Invoke_3アクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「Airline3」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力」および「出力」変数フィールドの右にある「入力変数の自動作成」および「出力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「入力変数」および「出力変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。
「OK」をクリックします。invokeアクティビティがJDeveloperの「BPEL_FIDS.bpel」ページのSequence_3の下に追加されます。
「<case>」セクションにassignアクティビティを追加します。
「コンポーネント・パレット」から、assignアクティビティを「<case>」セクションのinvokeアクティビティの前にドラッグ・アンド・ドロップします。
Assign_3アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図5-108に示すように、Receive_1アクティビティの入力変数のソースとInvoke_3アクティビティの入力変数のソースの間にコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
「OK」をクリックします。
一時変数を作成し、「<case>」セクションにtransformアクティビティを追加します。
注意: 一時変数は、Airline3サーバーからのフライト詳細の格納に使用されます。この情報は後でリプライ変数に追加されます。 |
(x)で表された「変数」アイコンをクリックします。図5-109に示すように、「変数」ダイアログが表示されます。
「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
変数タイプとして「メッセージ・タイプ」を選択します。
「メッセージ・タイプ」フィールドの端にある「メッセージ・タイプの参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。
図5-105に示すように、「メッセージ・タイプ」、「パートナ・リンク」、「FIDS」、「FIDS.wsdl」、「メッセージ・タイプ」および「FIDSProcessReply_msg_reply」を順番にクリックします。
「OK」をクリックします。「変数の作成」ダイアログの「メッセージ・タイプ」フィールドにFIDSProcessReply_msg_replyパートナ・リンクが移入されます。
「OK」をクリックします。「変数」ダイアログの「変数」リストに「メッセージ・タイプ」タイプの変数Variable_2が追加されます。
「OK」をクリックして「BPEL_FIDS.bpel」ページに戻ります。
transformアクティビティを「<case>」セクションのInvoke_3アクティビティの後にドラッグ・アンド・ドロップします。
Transform_3アクティビティをダブルクリックします。
「トランスフォーメーション」タブをクリックします。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」リストから「Invoke_3_OutboundRequestReply_OutputVariable」を選択し、「OK」をクリックします。
「ターゲット変数」リストで「Variable_2」を選択します。
「OK」をクリックします。XSLマッパー・ツールが表示されます。
左ペインのソースから、「tns:flight
」ノードを右ペインの「FlightDetails
」ノードにリンクします。「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。図5-110に示すように、XSLマッピングを含むTransformation_3.xsl(XSLマッパー・ツール)ファイルが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。図5-111に示すように、Airline3サーバーのフローが定義された状態で「BPEL_FIDS.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreplyアクティビティとreceiveアクティビティの間にドラッグ・アンド・ドロップします。
Assign_4アクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「コピー操作」タブをクリックします。図5-112に示すように、「Assign」ダイアログが表示されます。
「追加操作」を選択します。「追加操作の作成」ダイアログが表示されます。
図5-113に示すように、一時変数Variable_1
に格納されている情報をリプライ変数Reply_1_InboundRequestReply_OutputVariable
に追加する追加操作を作成します。
「OK」をクリックします。「Assign」ダイアログが表示されます。
「追加操作」を選択します。「追加操作の作成」ダイアログが表示されます。
図5-114に示すように、一時変数Variable_2
に格納されている情報をリプライ変数Reply_1_InboundRequestReply_OutputVariable
に追加する、別の追加操作を作成します。
「OK」をクリックします。「Assign」ダイアログが表示されます。
「OK」をクリックします。図5-115に示すように、JDeveloperの「BPEL_FIDS.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
ServerおよびClient Javaプログラムを実行して、アプリケーションをテストする必要があります。詳細は、関連するREADMEファイルを参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ2でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。