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