ヘッダーをスキップ
Oracle Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1(11.1.1)
B56238-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

37 直接バインディング起動APIの使用

この章では、直接バインディング起動APIについて説明し、この起動APIを使用してSOAコンポジット・アプリケーションを起動する方法について説明します。

項目は次のとおりです。

37.1 直接バインディングの概要

通常、コンポジットの起動にはSOAP over HTTPを使用します。このためには、Webサービス・バインディングを使用してコンポジットのSOAPサービスを作成する必要があります。これに対して、直接バインディングを使用すると、より緊密な統合を作成できます。Javaクライアントは、直接バインディングを使用してコンポジット・サービスを直接起動できるため、Webサービス・バインディングで必要なXMLへの中間変換が不要になります。

直接バインディングでは、次の2種類の起動スタイルがあります。

直接バインディングは、interface句、およびcallbackInterface句(オプション)を提供するinterface.wsdlに関連付けられている必要があります。また、コンポジットには、関連するWSDLがインポートされている必要があります。

サービス・バインディング・コンポーネントは、直接バインディングを広告するWSDLの変更済バージョンも公開します。

直接サービス・バインディング・コンポーネント

例37-1に、直接サービス・バインディング・コンポーネントを使用するサンプル構成を示します。

例37-1 直接サービス・バインディング・コンポーネント

<service name="direct2">
      <interface.wsdl
interface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(asyncNonConvD
ocLit)"
callbackInterface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(async
NonConvDocLitCallback)" xmlns:ns="http://xmlns.oracle.com/sca/1.0"/>
      <binding.direct/>
</service>

直接参照バインディング・コンポーネント

直接参照バインディング・コンポーネントでは、ユーザー指定のSOAインボーカに接続するために次の情報が必要です。

例37-2に、サンプル構成を示します。

例37-2 サンプル構成

<reference name="HelloReference" ui:wsdlLocation="HelloService.wsdl">
  <interface.wsdl
 interface="http://hello.demo.oracle/#wsdl.interface(HelloInterface)"/>
  <binding.direct connection-factory="oracle.soa.api.JNDIDirectConnectionFactory"
   addressingVersion="http://www.w3.org/2005/08/addressing"
   address="soadirect://syncOut"
   useSSLForCallback="false">
  <property
 name="oracle.soa.api.invocation.direct.bean">MyDirectTestServiceBean#directEjb.Tes
tInvoker</property>
  <property
 name="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</property
>
 <property name="java.naming.provider.url">t3://@host:@port</property>
 </binding.direct>
</reference>

直接バインディング・コンポーネントでは、同期および非同期の両方の起動パターンがサポートされています。図37-1で同期起動パターンのサンプルを、図37-2で非同期起動パターンのサンプルを説明します。

図37-1 同期起動パターンのサンプル

同期のサンプル
「図37-1 同期起動パターンのサンプル」の説明

図37-2 非同期起動パターンのサンプル

非同期のサンプル
「図37-2 非同期起動パターンのサンプル」の説明

37.2 直接バインディング起動APIの概要

次に、直接バインディング起動APIで使用する各種パッケージを示します。

Facade APIの詳細は、Oracle Fusion Middleware Oracle SOA Suiteインフラストラクチャ管理Java APIリファレンスを参照してください。

37.2.1 同期直接バインディング起動

直接バインディングでは、メソッドを使用した同期直接起動もサポートされています。

<T> Message<T> request(String operationName, Message<T> message) throws InvocationException, FaultException

37.2.2 非同期直接バインディング起動

非同期起動は、メッセージ・インスタンスに設定されているWS-Addressingヘッダーに依存します。すべてのヘッダーはWS-Addressing仕様に準拠している必要があります。

直接バインディング起動APIを使用すると、クライアントはWS-AddressingのReplyTo SOAPヘッダーを指定し、宛先と通信してレスポンスを受信できます。


注意:

サポートされているアドレッシング・バージョンは次のとおりです。

例37-7に、非同期起動に使用されるWS-Addressingヘッダーの例を示します。

例37-7 WS-Addressingヘッダー

<wsa:MessageID>D6202742-D9D9-4023-8167-EF0AB81042EC</wsa:MessageID>
   <wsa:ReplyTo xmlns:wsa="http://www.w3.org/2005/08/addressing">
     <wsa:Address>sb://testserver:9001/callback</wsa:Address>
      <wsa:ReferenceParameters>
        <soa:callback xmlns:soa="http://xmlns.oracle.com/soa/direct"
           connection-factory="mytest.MyDirectionConnectionFactory">
        <soa:property name="oracle.soa.api.invocation.direct.bean"
           value="myTest.MyDirectConnectionBean"/>
        <soa:property name="java.naming.provider.url" value="t3://test:8001"/>
        <soa:property name="java.naming.factory.initial"
           value="weblogic.jndi.WLInitialContextFactory"/>
        </soa:callback>
      </wsa:ReferenceParameters>
   </wsa:ReplyTo>

注意:

コールバックとそのプロパティ要素は、soa directネームスペースを使用して正しく修飾する必要があります。

直接バインディング・コンポーネントは、メッセージ・インスタンスに設定されたAddressingヘッダーの解析を担当します。この例には、wsa:MessageIDおよびwsa:ReplyToの2つのヘッダーがあります。サービス・バインディング・コンポーネントでは、内部SOAコンポーネントに対して次のプロパティが使用可能になります。

  • tracking.conversationId = D6202742-D9D9-4023-8167-EF0AB81042E

  • replyToAddress = sb://testserver:9001/callback

  • replyToReferenceParameter : WSAの要素: ReferenceParameters

37.2.3 SOA直接アドレス構文

SOA直接バインディング起動APIで使用するサービス・パスは、SOA直接アドレス・パターンに従います。

  • soadirect:/CompositeDN/serviceNameCompositeDNはコンポジット識別名)

SOA直接アドレスでは、CompositeDNの形式は次のとおりです。

domainName/compositeName[!compositeVersion[*label]]

37.2.4 SOAトランザクション伝播

直接バインディングでは、SOAトランザクション伝播機能がサポートされています。この機能は、次の2つの方法でクライアントから起動できます。

  • クライアントからJavaトランザクションを開始し、すべてのデータベース操作を実行した後にコミットします。データベース操作は、クライアント側からの正常なコミットの後にコミットする必要があります。

  • クライアント側からJavaトランザクションを開始します。SOAコンポジットで操作中にフォルトがスローされた場合は、クライアント側からトランザクションをロールバックします。これで、すべてのデータベース操作がロールバックされます。

37.3 起動APIを使用したSOAコンポジット・アプリケーションの起動

図37-3に示すように、Oracle JDeveloperの「直接バインディング」コンポーネントでは、RMIでのSOAとのSOAメッセージ交換がサポートされています。

図37-3 「直接バインディング」オプション

「直接バインディング」オプション
「図37-3 「直接バインディング」オプション」の説明

Oracle JDeveloperでは、Oracle Service Busまたは別のSOAコンポジットのいずれかを起動する直接サービス・バインディングと直接参照バインディングの作成がサポートされています。


注意:

クライアントが直接バインディングを使用してコンポジット・サービスを起動するには、そのクラスパスにsoa-infra-mgmt.jaroracle-soa-client-api.jarの両方が含まれている必要があります。

直接バインディング起動APIの詳細は、第37.2項「直接バインディング起動APIの概要」を参照してください。

37.3.1 インバウンド直接バインディング・サービスの作成方法

SOAコンポジット・アプリケーションは、Oracle JDeveloperの「直接バインディング」オプションを使用して起動できます。

インバウンド直接バインディング・サービスを作成する手順は、次のとおりです。

  1. Oracle JDeveloperを開きます。

  2. 「コンポーネント・パレット」から「SOA」を選択します。

  3. 「サービス・コンポーネント」リストから、「直接バインディング」コンポーネントを「公開されたサービス」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。

  4. 表37-1に記載されている詳細を入力します。

    表37-1 「直接バインディング・サービス」ダイアログのフィールドと値

    フィールド

    名前

    名前を入力します。

    タイプ

    リストから「サービス」を選択します。

    WSDL URL

    WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。それ以外の場合は、「スキーマからWSDLを生成します。」をクリックします。

    ポート・タイプ

    WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。

    コールバック・ポート・タイプ

    非同期プロセスのコールバック・ポート・タイプ。

    参照バインディングの詳細


    アドレス

    WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

    プロバイダURL

    WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

    WSDLとその依存アーティファクトをプロジェクトにコピー。

    このチェック・ボックスの選択を解除します。このチェック・ボックスを選択した場合は、WSDLファイルをローカルでコピーすると、リモートWSDLの更新時に同期の問題が発生する可能性があります。


    完了すると、図37-4に示すように、「直接バインディングの作成」ダイアログが表示されます。

    図37-4 「直接バインディングの作成」ダイアログ

    「直接バインディングの作成」ダイアログ
    「図37-4 「直接バインディングの作成」ダイアログ」の説明

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

    図37-5に示すように、直接バインディング・サービスがデザイナに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング・サービス・コンポーネントであることを示します。

    図37-5 直接バインディング・サービス

    直接バインディング・サービス
    「図37-5 直接バインディング・サービス」の説明

37.3.2 アウトバウンド直接バインディング参照の作成方法

Oracle JDeveloperの「直接バインディング」オプションを使用してアウトバウンド直接バインディング参照を作成し、コンポジット・アプリケーションまたはOracle Service Busを起動できます。

アウトバウンド直接バインディング参照を作成する手順は、次のとおりです。

  1. Oracle JDeveloperを開きます。

  2. 「コンポーネント・パレット」から「SOA」を選択します。

  3. 「サービス・コンポーネント」リストから、「直接バインディング」コンポーネントを「外部参照」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。

  4. 表37-2に記載されている詳細を入力します。

    表37-2 「直接バインディング・サービス」ダイアログのフィールドと値

    フィールド

    名前

    名前を入力します。

    タイプ

    リストから「参照」を選択します。

    参照ターゲット

    SOAを外部参照ターゲットとして使用するには「Oracle SOAコンポジット」を選択し、Oracle Service Busを外部参照ターゲットとして使用するには「Oracle Service Bus」を選択します。

    WSDL URL

    WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。

    ポート・タイプ

    WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。この例では、値execute_pttがフィールドに表示されています。

    参照バインディングの詳細


    アドレス

    具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

    プロバイダURL

    具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

    WSDLとその依存アーティファクトをプロジェクトにコピー。

    このチェック・ボックスの選択を解除します。このチェック・ボックスを選択した場合は、WSDLファイルをローカルでコピーすると、リモートWSDLの更新時に同期の問題が発生する可能性があります。


    完了すると、図37-6に示すように、「直接バインディングの作成」ダイアログが表示されます。Oracle SOA SuiteのサービスをOracle Service Busで使用する方法の詳細は、『Oracle Fusion Middleware Oracle Service Bus開発者ガイド』のOracle SOA Suiteのトランスポート(SOA-DIRECT)に関する項を参照してください。

    図37-6 「直接バインディングの作成」ダイアログ

    「直接バインディングの作成」ダイアログ
    「図37-6 「直接バインディングの作成」ダイアログ」の説明

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

    図37-5に示すように、直接バインディング参照がデザイナに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング参照コンポーネントであることを示します。

    図37-7 直接バインディング参照

    直接バインディング参照
    「図37-7 直接バインディング参照」の説明

37.4 直接バインディング起動APIの使用例

例37-8から例37-10に、このAPIの使用例を示します。この項では、接続パラメータを設定し、直接バインディングによってSOAコンポジット・アプリケーションを起動する方法、および直接バインディング起動を起動するようにメッセージ・オブジェクトを変更する方法を示します。

例37-8 接続パラメータの使用例

// The JNDIDirectConnectionFactory can be used to establish SOA instance
 connections for exchanging messages over the direct binding.
DirectConnectionFactory dcFactory = JNDIDirectConnectionFactory.newInstance();
// Connections are created based on the configuration, which is a map of standard
// naming properties, which will be used for the underlying connection lookup.
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
 "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://HOST:PORT");
DirectConnection conn =
    dcFactory.createConnection("soadirect:/default/MyComposite!1.0/MyService",
 properties);

例37-9 メッセージの使用例

//Messages are created using the MessageFactory 
Message<Element> request = XMLMessageFactory.getInstance().createMessage();

//Message objects are then modified to be used for an invocation 
Map<String, Element> partData; // Define a Map of WSDL part names to matching XML
 Element objects
Payload<Element> payload = PayloadFactory.createXMLPayload(partData);
request.setPayload(payload);
// One-way invocation
conn.post("onewayoperation", request);
// Request-reply invocation
Message<Element> response = conn.request("requestreplyoperation", request);

例37-10 LocatorFactoryの使用例

//A Sample Java Code
Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, "t3://" + hostname + ':' + portname +
 "/soa-infra");
jndiProps.put(Context.INITIAL_CONTEXT
-FACTORY,"weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL,"weblogic"); 
jndiProps.put(Context.SECURITY_CREDENTIALS,"welcome1");
jndiProps.put("dedicated.connection","true");
Locator locator = LocatorFactory.createLocator(jndiProps);
CompositeDN compositedn = new CompositeDN(domainName, compositename, version);
String serviceName = "HelloEntry";
return locator.createDirectConnection(compositedn, serviceName);