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

戻る
戻る
 
次へ
次へ
 

49 Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合

この章では、Spring Frameworkを使用して、Javaインタフェースを使用するコンポーネントをSOAコンポジット・アプリケーションに統合する方法について説明します。Oracle SOA Suiteでは、Oracle WebLogic ServerのWebLogic Service Component Architecture(SCA)で提供されるSpring Framework機能を使用します。また、この章では、Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントを同じSOAコンポジット・アプリケーション内に統合する方法についても説明します。

項目は次のとおりです。

Oracle SOA Suiteで使用するWebLogic SCA機能の詳細は、Oracle Fusion Middleware Oracle WebLogic ServerのためのWebLogic SCAアプリケーションの開発を参照してください。

49.1 Springサービス・コンポーネントの概要

Spring Frameworkは、様々なタイプのサービスを簡単に使用できるようにする軽量のコンテナです。この軽量のコンテナは、特定のタイプのコンポーネントではなく、すべてのJavaBeanを受け入れることができます。

WebLogic SCAによって、ユーザーはSpring Frameworkを使用して、plain old Java object(POJO)を使用するJavaアプリケーションを作成し、コンポーネントをSCAサービスおよび参照として公開できます。SCAの用語であるWebLogic Spring Framework SCAアプリケーションは、POJOに、複数のクラスをSCAサービスや参照にまとめて接続するSpring SCAコンテキスト・ファイルを加えた集合です。

Spring Frameworkを使用すると、サービス・コンポーネントを作成し、依存関係インジェクション機能を使用してSOAコンポジット・アプリケーション内に接続できます。Spring Framework機能は、SCAによって次のように拡張できます。

すべてのサービス・コンポーネントと同様に、SpringコンポーネントにもcomponentTypeファイルがあります。componentTypeファイルに定義されているインタフェースは、interface.java定義を使用してサービスおよび参照インタフェースを識別します。

サービスはBeanによって実装され、Springコンテキスト・ファイルでターゲット設定されます。参照は、実行時に暗黙的(または仮想的)なBeanとしてSpringコンテキスト・ファイルで提供されます。

Javaインタフェースを使用してEnterprise JavaBeansをSOAコンポジット・アプリケーションに統合することもできます(SDOパラメータは不要です)。詳細は、第36章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。

Spring Frameworkの詳細は、次のURLを参照してください。

http://www.osoa.org/display/Main/SCA+and+Spring+Framework

49.2 同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合

以前のリリースでは、SOAコンポジット・アプリケーション内のコンポーネントはすべてWSDLベースでした。このリリースからは、SOAコンポジット・エディタを使用して、Javaインタフェースを使用するコンポーネントとWSDLファイルを同じSOAコンポジット・アプリケーション内で統合できるようになりました。この統合によって、たとえば、Springサービス・コンポーネントでOracle BPEL Process Managerを起動したり、Oracle Mediatorサービス・コンポーネントでEnterprise JavaBeansを起動することができます。

次のタイプのコンポーネント統合がサポートされています。

49.2.1 JavaベースおよびWSDLベースの統合例

2つのサービス・コンポーネント(またはサービス・コンポーネントとバインディング・コンポーネント)を接続するときは、接続の両端にインタフェースを定義します。これらのインタフェースには、XMLを使用して同じWSDL定義を指定する必要があるため、composite.xmlファイルまたはcomponent.componentTypeファイルのinterface.wsdlを使用して定義します。

JAX-WSの観点からは、(interface.javaで定義された)JavaインタフェースをWSDLインタフェースに接続すると、2つのインタフェースは互換性があるとみなされます。通常、これはOracle JDeveloperで規定され自動化されます。


注意:

この項で説明するcomposite.xmlcomponentTypeおよびSpringコンテキスト・ファイルの作成と変更には、Oracle JDeveloperのみを使用します。これらのファイルは、「ソース」ビューで直接編集しないでください。次の各例は、JavaインタフェースとWSDLファイルをSOAコンポジット・アプリケーションに統合する方法を示しています。Oracle JDeveloperを使用してこの機能を実現する方法については、この章の後続の項で説明します。

たとえば、例49-1に示すように、サービスのJavaインタフェースがあるとします。

例49-1 サービスのJavaインタフェース

public interface PortfolioService {
  public double getPorfolioValue(String portfolioId);
}

実装では、別のコンポーネント(BPELプロセス、外部Webサービス、EJBなど)によって実装された追加のStockQuoteサービスを使用できるとします。例49-2に詳細を示します。

例49-2 サービスの追加のJavaインタフェース

public interface StockQuote {
  public double getQuote (String symbol);
}

Spring FrameworkのcomponentTypeファイルには、interface.java定義を使用してPortfolioServiceサービスとStockQuoteサービスがリストされます。例49-3に詳細を示します。

例49-3 componentTypeファイル

<componentType xmlns="http://xmlns.oracle.com/sca/1.0">
    <service name="PortfolioService ">
        <interface.java interface="com.bigbank.PortfolioService"/>
    </service>
    <reference name="StockService">
        <interface.java interface="com.bigbank.StockQuote"/>
    </reference>
</componentType>

実装クラスによって、サービス・インタフェースが実装され、参照インタフェースのセッターが提供されます。例49-4に詳細を示します。

例49-4 サービス・インタフェースの実装

public class PortfolioServiceImpl implements PortfolioService {
  StockQuote stockQuoteRef;

  public void setStockService (StockQuote ref) {
    stockQuoteRef = ref;
  }

  public double getPorfolioValue(String portfolioId) {
    //--  use stock service
    //--  return value
  }
}

Springコンテキスト・ファイルは、サービスおよび参照をコールアウトして実装にバインドします。例49-5に詳細を示します。

例49-5 Springコンテキストによるサービスおよび参照のコールアウト

<beans ...>
  <sca:service  name="PortfolioService" type="com.bigbank.PortfolioService"
 target="impl">
  </sca:service>

  <sca:reference  name="StockService" type="com.bigbank.StockQuote">
  </sca:reference>

  <bean id ="impl" class ="com.bigbank.PortfolioServiceImpl">
     <property name="stockService" ref="StockService"/>
  </bean>
</beans>

コンポジットのcomposite.xmlファイルには、コンポーネントと参照が定義されています。例49-6に詳細を示します。

例49-6 composite.xmlファイルでのコンポーネントと参照の定義

<composite ...>
    <import location="PortfolioService.wsdl" />
    <service name="PortfolioService">
        <interface.wsdl
 interface="http://bigbank.com/#wsdl.interface(PortfolioService)" />
        <binding.ws
 port="http://bigbank.com/#wsdl.endpoint(PortfolioService/PortfolioServicePort)"/>
    </service>
    <wire>
        <source.uri>PortfolioService</source.uri>
        <target.uri>PortfolioComp/PortfolioService</target.uri>
    </wire>
    <component name="PortfolioComp">
        <implementation.spring src="spring-context.xml"/>
    </component>
    <wire>
        <source.uri>PortfolioService/StockService</source.uri>
        <target.uri>StockService</target.uri>
    </wire>
    <reference name="StockService">
        <interface.java interface="com.bigbank.StockQuote"/>
        <binding.ejb uri="StockService#com.bigbank.StockQuote"/>
    </reference>
</composite>

49.2.2 Spring Frameworkでのコールバックの使用

Oracle SOA Suiteでは、interface.wsdlおよびinterface.javaの両方でコールバックを使用します。ただし、Spring Frameworkにはコールバックの概念が存在しません。Oracle SOA Suiteのサービスおよび参照の場合、コールバックは、interface.wsdlの2番目のポート・タイプ、またはinterface.javaの2番目のJava名として(メタデータに)指定されます。Springメタデータには、sca:servicesおよびsca:referencesのみが含まれ、コールバックを指定する方法がありません。

Springでコールバックを設計するには、特定の名前を指定したsca:servicesおよびsca:referencesを用意する必要があります。ネーミング規則のsomeServiceおよびsomeServiceCallbackを使用してsca:serviceおよびsca:referenceの両方を作成すると、Oracle SOA Suiteでは、このネーミング規則が認識され、コールバックがある単一のサービスまたは参照が作成されます。

たとえば、Oracle JDeveloperのSpringエディタを使用して、Springコンテキスト・ファイルに例49-7に示すような構文を作成するとします。

例49-7 Springサービス・コンポーネントでのコールバック

<sca:service  name="StockService"
 type="oracle.integration.platform.blocks.java.callback.StockService"
 target="impl" />
 <sca:reference  name="StockServiceCallback"
 type="oracle.integration.platform.blocks.java.callback.StockServiceReply" />

Oracle SOA Suiteでは、例49-8に示すように、単一のサービスをSpringのcomponentTypeファイルに自動的に作成します。

例49-8 単一のサービス

    <service name="StockService">
      <interface.java
 interface="oracle.integration.platform.blocks.java.callback.StockService"   
           callbackInterface="oracle.integration.platform.blocks.java.callback.StockServiceRe
ply"/>
    </service>

SOAコンポジット・エディタで、コールバック・インタフェースがあるSpringのinterface.javaをWSDLコンポーネント(Oracle BPEL Process Manager、Oracle Mediatorなど)にドラッグすると、2つのポート・タイプがあるWSDLが生成されます(技術的にはラッパーWSDLと呼ばれ、それぞれ単一のポート・タイプがある別の2つのWSDLをインポートするWSDLです)。

コールバックがあるWSDLインタフェースまたはJavaインタフェースをSpringサービス・コンポーネントにドラッグすると、SOAコンポジット・エディタには単一のインタフェースが表示されます。ただし、Springエディタには、同じネーミング規則(someServiceおよびsomeServiceCallback)を使用するsca:serviceおよびsca:referenceの両方が表示されます。

49.3 Oracle JDeveloperでのSpringサービス・コンポーネントの作成

この項では、Oracle JDeveloperでSpringサービス・コンポーネントを作成し、そのコンポーネントを次のように接続する方法について説明します。

Fusion Order DemoでのSpringサービス・コンポーネントの統合の概要は、第49.4項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

49.3.1 Oracle JDeveloperでのSpringサービス・コンポーネントの作成方法

Oracle JDeveloperでSpringサービス・コンポーネントを作成する手順は、次のとおりです。

  1. 図49-1に示すように、「コンポーネント・パレット」からSpringコンテキスト・サービス・コンポーネントをSOAコンポジット・エディタにドラッグします。

    図49-1 Springコンテキスト・サービス・コンポーネント

    図49-1の説明は次にあります。
    「図49-1 Springコンテキスト・サービス・コンポーネント」の説明

    「Springの作成」ダイアログが表示されます。

  2. 「名前」フィールドに、Springサービス・コンポーネントの名前を入力します。この名前は「新規コンテキストの作成」フィールドにも自動的に追加されます。図49-2に詳細を示します。

    既存のコンテキストの使用を選択し、「参照」をクリックして、既存のSpringファイルを選択することもできます。たとえば、Oracle JDeveloperで作成されたがOracle SOA Suiteの外部にあるSpringコンテキストをインポートできます。別のプロジェクトから参照して選択したSpringコンテキストは、SOAプロジェクトにコピーされます。

    図49-2 「Springの作成」ダイアログ

    図49-2の説明は次にあります。
    「図49-2 「Springの作成」ダイアログ」の説明


    注意:

    WebLogic SCAのスタンドアロンのSpringバージョンも使用可能です。通常、このバージョンはOracle SOA Suiteの外部で使用されます。このバージョンにアクセスするには、Springエディタ内での作業中に、「コンポーネント・パレット」からSpring 2.5 JEEを選択します。

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

    SOAコンポジット・エディタにSpringアイコンが表示されます。

  4. このアイコンをダブルクリックすると、SpringエディタにSpringコンテキストの内容が表示されます。

    <?xml version="1.0" encoding="windows-1252" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:util="http://www.springframework.org/schema/util"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xmlns:lang="http://www.springframework.org/schema/lang"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-2.5.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
     http://www.springframework.org/schema/jee
     http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
     http://www.springframework.org/schema/lang
     http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/tool
     http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
     http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
      <!--Spring Bean defintions go here-->
    </beans>
    
  5. 「コンポーネント・パレット」のドロップダウン・リストから、「WebLogic SCA」を選択します。

    リストがリフレッシュされ、図49-3に示すように、選択内容が表示されます。

    図49-3 「WebLogic SCA」メニュー

    図49-3の説明は次にあります。
    「図49-3 「WebLogic SCA」メニュー」の説明

  6. 「サービス」アイコンをSpringエディタにドラッグします。

    「サービスの挿入」ダイアログが表示されます。

  7. 表49-1に示すフィールドに入力して、ターゲットBeanおよびJavaインタフェースを定義します。

    表49-1 「サービスの挿入」ダイアログ

    フィールド 説明

    名前

    名前を入力します。

    ターゲット

    ターゲットBeanを入力します。このアクションにより、Beanをサービスとして公開できます。

    注意: このターゲットが存在していることを確認してください。このターゲットの存在をチェックする検証機能はサポートされていません。

    タイプ

    Javaインタフェースを入力します。


    完了すると、「サービスの挿入」ダイアログは図49-4のようになります。

    図49-4 「サービスの挿入」ダイアログ

    図49-4の説明は次にあります。
    「図49-4 「サービスの挿入」ダイアログ」の説明

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

    ターゲットBeanは、Springコンテキストでサービス・インタフェースになります。

    <?xml version="1.0" encoding="windows-1252" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:util="http://www.springframework.org/schema/util"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xmlns:lang="http://www.springframework.org/schema/lang"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-2.5.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
     http://www.springframework.org/schema/jee
     http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
     http://www.springframework.org/schema/lang
     http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/tool
     http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
     http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
      <!--Spring Bean defintions go here-->
      <sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
    </beans>
    

    Springエディタを閉じてSOAコンポジット・エディタに戻ると、図49-5に示すように、Springサービス・コンポーネントの左側にハンドルが追加されていることに注意してください。

    図49-5 サービス・ハンドル

    図49-5の説明は次にあります。
    「図49-5 サービス・ハンドル」の説明

  9. Springエディタに戻ります。

  10. 図49-3に示すリストから、「参照」アイコンをSpringエディタにドラッグします。

    「参照の挿入」ダイアログが表示されます。

  11. 表49-2に示すようにダイアログに入力して、「OK」をクリックします。

    表49-2 「参照の挿入」ダイアログ

    フィールド 説明

    名前

    名前を入力します。

    タイプ

    Javaインタフェースを入力します。


    完了すると、Springエディタに、Springコンテキストのサービスおよび参照が表示されます。

    <?xml version="1.0" encoding="windows-1252" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:util="http://www.springframework.org/schema/util"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xmlns:lang="http://www.springframework.org/schema/lang"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-2.5.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
     http://www.springframework.org/schema/jee
     http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
     http://www.springframework.org/schema/lang
     http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/tool
     http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
     http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
      <!--Spring Bean defintions go here-->
      <sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
      <sca:reference name="scaref1" type="external.bean.myInterface"/>
    </beans>
    
  12. 図49-6に示すように、Springコンテキスト・ファイルを閉じます。

    図49-6 Springコンテキスト・ファイル

    図49-6の説明は次にあります。
    「図49-6 Springコンテキスト・ファイル」の説明

    図49-7に示すように、Springサービス・コンポーネントの右側にハンドルが追加されていることに注意してください。

    図49-7 参照ハンドル

    図49-7の説明は次にあります。
    「図49-7 参照ハンドル」の説明

  13. 図49-8に示すように、左側のハンドルを「公開されたサービス」スイムレーンにドラッグして、サービス・バインディング・コンポーネントを作成します。

    図49-8 サービス・バインディング・コンポーネント

    図49-8の説明は次にあります。
    「図49-8 サービス・バインディング・コンポーネント」の説明

    図49-9に示すように、サービスをWebサービスとして公開するか、またはEJBサービスとして公開するかを選択するように求めるプロンプトが表示されます。

    図49-9 作成するサービス・タイプ

    図49-9の説明は次にあります。
    「図49-9 作成するサービス・タイプ」の説明

    • EJB: EJBサービスをJavaインタフェースから公開します。このオプションを選択した場合、WSDLファイルを使用する必要はありません。

    • Webサービス: WebサービスをSOAP WSDLインタフェースから公開します。このオプションを選択すると、Springサービス・コンポーネントとの互換性を維持するために、JavaインタフェースからWSDLが生成されます。

  14. このサービスをEJBサービスとして公開するか、またはWebサービスとして公開するかを選択します。「公開されたサービス」スイムレーンにサービスが自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図49-10に詳細を示します。

    図49-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント

    図49-10の説明は次にあります。
    「図49-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント」の説明

  15. EJBサービスをダブルクリックすると、図49-11に示すように、自動的に設定された構成が表示されます。この構成詳細は、手順7で「サービスの挿入」ダイアログに入力した値から作成されています。

    図49-11 「公開されたサービス」スイムレーンの「EJBサービス」ダイアログ

    図49-11の説明は次にあります。
    「図49-11 「公開されたサービス」スイムレーンの「EJBサービス」ダイアログ」の説明

  16. 自動的に生成されたデフォルトのJNDI名を、環境に適用可能な名前に置き換えます。

  17. ダイアログを閉じます。

  18. Springサービス・コンポーネントの右側のハンドルを「外部参照」スイムレーンにドラッグして、参照バインディング・コンポーネントを作成します。

    手順13で説明した内容と同じSpringタイプ・オプションのメッセージが表示されます。

  19. この参照を公開するオプションを選択します。「外部参照」スイムレーンに参照が自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図49-12に詳細を示します。

    図49-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント

    図49-12の説明は次にあります。
    「図49-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント」の説明

  20. EJB参照をダブルクリックすると、図49-13に示すように、自動的に設定された構成が表示されます。この構成詳細は、手順11で「参照の挿入」ダイアログに入力した値から作成されています。

    図49-13 「外部参照」スイムレーンの「EJB参照」ダイアログ

    図49-13の説明は次にあります。
    「図49-13 「外部参照」スイムレーンの「EJB参照」ダイアログ」の説明

  21. ダイアログを閉じて、図49-14に示すようにSOAコンポジット・エディタに戻ります。

    図49-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント

    図49-14の説明は次にあります。
    「図49-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント」の説明

  22. 図49-15に示すように、カーソルをサービスの右ハンドルに置き、次に、図49-16に示すように、Springサービス・コンポーネントの左ハンドルに置きます。Javaインタフェースが表示されます。

    図49-15 サービスのJavaインタフェース

    図49-15の説明は次にあります。
    「図49-15 サービスのJavaインタフェース」の説明

    図49-16 Springサービス・コンポーネントのJavaインタフェース

    図49-16の説明は次にあります。
    「図49-16 Springサービス・コンポーネントのJavaインタフェース」の説明

  23. Springサービス・コンポーネントの右ハンドル、および参照バインディング・コンポーネントの左ハンドルでも同様にカーソルを置いて、Javaインタフェースを表示します。

  24. 「アプリケーション・ナビゲータ」で、Springサービス・コンポーネントのcomponentTypeファイルを選択します。両方のコンポーネントのインタフェースは、interface.javaで定義されます。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- Generated by Oracle SOA Modeler version 1.0 at [2/27/10 1:13 PM]. -->
    <componentType
                   xmlns="http://xmlns.oracle.com/sca/1.0"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   xmlns:ui="http://xmlns.oracle.com/soa/designer/">
      <service name="scaserv1">
        <interface.java interface="oracle.mypackage.myinterface"/>
      </service>
      <reference name="scaref1">
        <interface.java interface="external.bean.myInterface"/>
      </reference>
    </componentType>
    
  25. 「アプリケーション・ナビゲータ」で、composite.xmlファイルを選択して同様の詳細を表示します。

     <service name="scaserv1">
        <interface.java interface="oracle.mypackage.myinterface"/>
        <binding.ejb uri="scaserv1_ejb_ep" ejb-version="EJB3"/>
      </service>
      <component name="MySpring">
        <implementation.spring src="MySpring.xml"/>
      </component>
      <reference name="scaref1">
        <interface.java interface="external.bean.myInterface"/>
        <binding.ejb uri="scaref1_ejb_ep" ejb-version="EJB3"/>
      </reference>
      <wire>
        <source.uri>orderprocessor_client_ep</source.uri>
        <target.uri>OrderProcessor/orderprocessor_client</target.uri>
      </wire>
      <wire>
        <source.uri>scaserv1</source.uri>
        <target.uri>MySpring/scaserv1</target.uri>
      </wire>
      <wire>
        <source.uri>MySpring/scaref1</source.uri>
        <target.uri>scaref1</target.uri>
      </wire>
    </composite>
    
  26. Springサービス・コンポーネントの右ハンドルを、Javaインタフェース・ベースのEJB参照ではなく、XMLベースのコンポーネント(Oracle Mediatorなど)に接続すると、互換性のあるWSDLファイルが生成されます。次の手順で詳細を説明します。

    1. 図49-17に示すように、Springサービス・コンポーネントの右ハンドルをOracle Mediatorにドラッグします。

      図49-17 Springサービス・コンポーネントとOracle Mediatorの統合

      図49-17の説明は次にあります。
      「図49-17 Springサービス・コンポーネントとOracle Mediatorの統合」の説明

    2. Oracle MediatorのWSDLファイルから互換性のあるインタフェースが作成されたことを確認するプロンプトが表示された場合は、「OK」をクリックします。

      図49-18 Oracle MediatorのWSDLファイルからのJavaファイル作成

      図49-18の説明は次にあります。
      「図49-18 Oracle MediatorのWSDLファイルからのJavaファイル作成」の説明

    3. 図49-19に示すように、カーソルをSpringサービス・コンポーネントの右ハンドルに置き、次に、図49-20に示すように、Oracle Mediatorの左ハンドルに置きます。

      図49-19 Springサービス・コンポーネントのインタフェース

      図49-19の説明は次にあります。
      「図49-19 Springサービス・コンポーネントのインタフェース」の説明

      図49-20 Oracle Mediatorのインタフェース

      図49-20の説明は次にあります。
      「図49-20 Oracle Mediatorのインタフェース」の説明

    4. Springサービス・コンポーネントをダブルクリックすると、SpringエディタにSpringコンテキスト・ファイルの内容が表示されます。

      <?xml version="1.0" encoding="windows-1252" ?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:util="http://www.springframework.org/schema/util"
             xmlns:jee="http://www.springframework.org/schema/jee"
             xmlns:lang="http://www.springframework.org/schema/lang"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              http://www.springframework.org/schema/util
              http://www.springframework.org/schema/util/spring-util-2.5.xsd
              http://www.springframework.org/schema/aop
              http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
              http://www.springframework.org/schema/jee
              http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
              http://www.springframework.org/schema/lang
              http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
              http://www.springframework.org/schema/tx
              http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
              http://www.springframework.org/schema/tool
              http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
              http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
        <!--Spring Bean defintions go here-->
        <sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
        <sca:reference type="mediator1.project1.application4.com.oracle.xmlns.Execute_
      ptt" name="Mediator1.Mediator1"/>
      </beans>
      

Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントを同じSOAコンポジット・アプリケーションに統合する方法の詳細は、第49.4項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

49.4 Fusion Order DemoでのSpringサービス・コンポーネントの統合

Fusion Order DemoのPartner Supplier Compositeアプリケーションは、Springサービス・コンポーネントを使用してパートナの倉庫から見積を取得する方法を提示します。図49-21に、このコンポジット・アプリケーションのSOAコンポジット・エディタを示します。

図49-21 Springサービス・コンポーネントを使用したPartner Supplier Composite

図49-21の説明は次にあります。
「図49-21 Springサービス・コンポーネントを使用したPartner Supplier Composite」の説明

IInternalPartnerSupplierは、外部クライアント・サービスとして「公開されたサービス」スイムレーンに公開されます。

Oracle Mediatorサービス・コンポーネントのPartnerSupplierMediatorは、見積金額に基づいてクライアント・リクエストを次のようにルーティングします。

図49-22に、この動作の概要を示します。

$2000以上$3000未満のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。「外部参照」スイムレーンでは、JavaインタフェースのIExternalPartnerSupplierServiceが外部EJBとして公開され、見積を取得します。

$3000以上のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorSimpleがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。内部JavaインタフェースのIExternalPartnerSupplierServiceMockを使用して、見積を取得します。「外部参照」スイムレーンのIExternalPartnerSupplierService参照は起動されません

「外部参照」スイムレーンでは、WriteQuoteRequest参照でWSDLベースのファイル・アダプタが使用され、Javaインタフェースはサポートされていないため、互換性のあるWSDLファイルが生成されます。

図49-22 Fusion Order DemoのSpringアーキテクチャ

図49-22の説明は次にあります。
「図49-22 Fusion Order DemoのSpringアーキテクチャ」の説明

例49-9に、IInternalPartnerSupplier.javaファイルを示します。IInternalPartnerSupplierInternalSupplierMediatorによって実装されます。

例49-9 IInternalPartnerSupplier.javaファイル

package com.otn.sample.fod.soa.internalsupplier;
import
 com.otn.sample.fod.soa.internalsupplier.exception.InternalSupplierException;
import java.util.List;
/**
 * The interface for the spring based service, with a typed list.
 * 
 *                 !!! ATTENTION !!!
 * This interface was used to generate the wsdl 
 *  (IInternalPartnerSupplierService.wsdl) - DO NOT MODIFY!
 *  
 * @author clemens utschig
 */
public interface 

IInternalPartnerSupplier 
{
    /**
     * Get a price for a list of orderItems
     * @param pOrderItems the list of orderitems
     * @return the price
     */
    public double getPriceForOrderItemList(List<Orderitem> pOrderItems)
        throws InternalSupplierException;
    
}

例49-10SpringPartnerSupplierMediator.componentTypeファイルは、図49-22に示すSpringサービス・コンポーネントに対して定義されたサービスおよび参照を示します。

例49-10 SpringPartnerSupplierMediator.componentTypeファイル

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 1.0 at [7/16/09 2:36 PM]. -->
<componentType
               xmlns="http://xmlns.oracle.com/sca/1.0"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:ui="http://xmlns.oracle.com/soa/designer/">
  <service name="IInternalPartnerSupplier">
    <interface.java
 interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
  </service>
  <service name="IInternalPartnerSupplierSimple">
    <interface.java
 interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
  </service>
  <reference name="IExternalPartnerSupplierService">
    <interface.java
 interface="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
  </reference>
  <reference name="WriteQuoteRequest">
    <interface.java
interface="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file
.adapter.pcbpel.com.oracle.xmlns.Write_ptt"/>
  </reference>
</componentType>

例49-11に、Springコンテキスト・ファイルのSpringPartnerSupplierMediator.xmlを示します。

例49-11 Springコンテキスト・ファイルのSpringPartnerSupplierMediator.xml

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca">
       
  <!--
    The below sca:service(s) corresponds to the services exposed by the 
    component type file: SpringPartnerSupplierMediator.componentType
  -->  
       
  <!-- expose the InternalPartnerSupplierMediator + EJB as service 
  
    <service name="IInternalPartnerSupplier">
      <interface.java
 interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
    </service>
  -->
  <sca:service name="IInternalPartnerSupplier"
        target="InternalPartnerSupplierMediator"
        type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
  <!-- expose the InternalPartnerSupplierMediator + Mock as service 
    <service name="IInternalPartnerSupplierSimple">
      <interface.java
 interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
    </service>
  
  -->
  <sca:service name="IInternalPartnerSupplierSimple"
        target="InternalPartnerSupplierMediatorSimple"
        type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
  <!-- the partner supplier mediator bean with the mock ep --> 
              
  <bean id="InternalPartnerSupplierMediatorSimple" 
        class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator" 
        scope="prototype">
        <!-- inject the external partner supplier bean -->
        <property name="externalPartnerSupplier" 
            ref="IExternalPartnerSupplierServiceMock"/>
        <!-- inject the quoteWriter -->   
        <property name="quoteWriter" ref="WriteQuoteRequest"/>
  </bean>      

  <!-- the partner supplier mediator bean with the ejb -->               
  <bean id="InternalPartnerSupplierMediator" 
        class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator" 
        scope="prototype">
        <!-- inject the external partner supplier bean -->
        <property name="externalPartnerSupplier" 
            ref="IExternalPartnerSupplierService"/>
        <!-- inject the quoteWriter -->   
        <property name="quoteWriter" ref="WriteQuoteRequest"/>
  </bean>      
  <!-- mock bean for the IExternalPartnerSupplierService -->
  <bean id="IExternalPartnerSupplierServiceMock"
       
 class="com.otn.sample.fod.soa.externalps.test.MockExternalPartnerSupplierTest"/>
        
  <!-- 
    Use a reference from the outside world based on the 
    IExternalPartnerSupplierService interface. 
    The below is specified on the SpringPartnerSupplierMediator.componentType - 
    and wired to an external EJB binding.
    
    <reference name="IExternalPartnerSupplierService">
      <interface.java
 interface="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
    </reference>  
  -->               
  <sca:reference name="IExternalPartnerSupplierService"
        type="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
        
  <!--
      <reference name="WriteQuoteRequest">
        <interface.java

interface="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file
.adapter.pcbpel.com.oracle.xmlns.Write_ptt"/>
      </reference>  
  -->
  <sca:reference type="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file.adap
ter.pcbpel.com.oracle.xmlns.Write_ptt"
                 name="WriteQuoteRequest"/>
</beans>

Fusion Order Demoのダウンロードとインストール方法、およびPartner Supplier Compositeの使用方法の詳細は、第3.2項「Fusion Order Demoアプリケーションの設定」を参照してください。

ダウンロードした後は、次のFusion Order Demoディレクトリで、Partner Supplier Compositeで使用するJavaコードのサンプルを参照してください。

CompositeServices\PartnerSupplierComposite\src\com\otn\sample\fod\soa 

49.4.1 Javaベクトル・タイプ・パラメータを使用したEJBの使用方法

Javaコードにはベクトルを含めることができます。ただし、コンテンツPOJOを宣言しないと、ベクトルをXMLにシリアライズできません。次の例では、この問題を解決して、Fusion Order Demoのコード・サンプルを使用する方法の概要を示します。

Javaベクトル・タイプ・パラメータを使用してEJBを使用する手順は、次のとおりです。

  1. 図49-23に示すように、Javaコードにベクトルが含まれているとします。

    図49-23 ベクトル

    図49-23の説明は次にあります。
    「図49-23 ベクトル」の説明

  2. Javaインタフェース・クラスおよびJNDI名に基づいて、EJBバインディング参照を作成します。図49-24に例を示します。

    図49-24 EJBバインディング参照の作成

    図49-24の説明は次にあります。
    「図49-24 EJBバインディング参照の作成」の説明

  3. 図49-25に示すように、EJB参照をSpringサービス・コンポーネントに接続します。

    図49-25 Springサービス・コンポーネントに接続されたEJB参照

    図49-25の説明は次にあります。
    「図49-25 Springサービス・コンポーネントに接続されたEJB参照」の説明

    新しい参照がSpringコンテキスト・ファイルに作成されます。図49-26に詳細を示します。

    図49-26 Springコンテキスト・ファイルへの参照の追加

    図49-26の説明は次にあります。
    「図49-26 Springコンテキスト・ファイルへの参照の追加」の説明

  4. IExternalPartnerSupplierServiceタイプのpublicメンバーを宣言してSpringを有効にし、参照をクラスに挿入します。図49-27に詳細を示します。

    図49-27 publicメンバーの宣言

    図49-27の説明は次にあります。
    「図49-27 publicメンバーの宣言」の説明

  5. メンバーの名前でプロパティをIExternalPartnerSupplierServiceに追加し、ExternalPartnerSupplier参照Beanを参照します。図49-28に詳細を示します。

    図49-28 メンバーの名前で追加したプロパティ

    図49-28の説明は次にあります。
    「図49-28 メンバーの名前で追加したプロパティ」の説明

    これによって、ベクトルがEJBパラメータに変換されます。

49.5 JAXBおよびOXMのサポート

Oracle Fusion Middlewareでは、JavaクラスをXMLデータにマップするために、Java Architecture for XML Binding(JAXB)およびEclipseLink O/X-Mapper(OXM)の使用がサポートされています。これによって、データを任意のXML形式でメモリーに保存および取得できるため、プログラムのクラス構造に対する一連の固有なXMLルーチンの実装は不要です。このサポートによって、次の操作を実行できます。

JAXBマッピング用の外部メタデータの設計情報は、次のURLを参照してください。

http://wiki.eclipse.org/EclipseLink/DesignDocs/277920

JAXB OXMおよびOXMマッピング・ファイル(eclipselink-oxm.xsd)の詳細は、次のURLを参照してください。

http://wiki.eclipse.org/EclipseLink/FAQ/WhatIsMOXy

http://wiki.eclipse.org/EclipseLink/Examples/MOXy

http://wiki.eclipse.org/Category:XML

Enterprise JavaBeansをSOAコンポジット・アプリケーションに統合する場合は、JavaクラスをXMLデータにマップすることもできます。詳細は、第36章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。

49.5.1 拡張されたマッピング・ファイル

Oracle SOA Suiteでは、拡張されたマッピング(EXM)ファイルを使用することにより、JAXBおよびOXMファイルのサポートが拡張されています。EXMファイルが設計時プロジェクトのクラスパス内に存在する場合は、そのファイルをJavaからWSDLへの変換に使用できます。EXMファイルには、次の場合のデータ・バインディング・メタデータが用意されています。

  • JAXB注釈をJavaソースに追加できず、個別に指定する必要がある場合

  • シナリオがJAXBの対象外である場合(例: メソッドなど最上位レベル要素がタイプまたはパラメータ・タイプを戻す場合)

外部JAXB注釈は、EXMファイルに直接指定するか、またはEXMファイルから参照可能な個別のTopLink JAXBマッピングOXMファイルに含めることができます。

Oracle SOA Suiteでは、設計時に、EXMファイルをソース・パス(SCA-INF/src)またはクラスパス(SCA-INF/classes、またはSCA-INF/libのJAR)のいずれかに配置できます。

EXMファイルをソース・パス(SCA-INF/src)に配置すると、Oracle JDeveloperを使用してEXMを編集できます(クラスパス内のファイルはOracle JDeveloperの「アプリケーション・ナビゲータ」に表示されません)。プロジェクトのコンパイルが完了すると、EXMファイル(およびインポートしたすべてのXMLファイル)がデプロイメント用にクラスパス(SCA-INF/classes)にコピーされます。ソース・パス内にあるEXMファイルは、対応する同じディレクトリ構造内に引き続き存在する必要があります。

例49-12および例49-13に、EXMファイルの例を示します。

例49-12 EXMサンプル・ファイル

<java-web-service-endpoint
           xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
           xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
           databinding="toplink.jaxb">

  <xml-schema-mapping>
       <toplink-oxm-file
 java-package="weblogic.wsee.databinding.internal.test.toplink" 
 file-path="./person-oxm.xml"/>
  </xml-schema-mapping>

<!--
  <web-service name="hello-ws" target-namespace="hello-ns"/>
  <java-methods>
  <java-method name="hello" oxm:xml-mixed="false">
     <oxm:xml-elements>
        <oxm:xml-element type="java.lang.Integer"/>
     </oxm:xml-elements>
     <web-result name="result"/>
     <java-params>
         <java-param oxm:xml-mixed="false">
            <oxm:xml-elements>
              <oxm:xml-element type="java.lang.String"/>
            </oxm:xml-elements>
            <web-param name="request"/>
         </java-param>
     </java-params>
  </java-method>
  </java-methods>
  -->
</java-web-service-endpoint>

例49-13 EXMサンプル・ファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java-wsdl-mapping
 name="weblogic.wsee.databinding.internal.test.toplink.CollectionMapExtTypeArg"
           xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
           xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
           databinding="toplink.jaxb">
  <soap-binding parameter-style="BARE"/>
  <java-methods>
  <java-method name="testListOfCustomer">
     <java-params>
         <java-param>
            <oxm:xml-element
 type="weblogic.wsee.databinding.internal.test.toplink.Customer"/>
         </java-param>
     </java-params>
  </java-method>

  <!-- Not implemented by EclipseLink yet
  <java-method name="testMapOfCustomer">
     <java-params>
         <java-param>
            <oxm:xml-element
 xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'>
              <xml-map>
                        <key type='java.lang.String'/>
                        <value
 type='weblogic.wsee.databinding.internal.test.toplink.Customer'/>
              </xml-map>
            </oxm:xml-element>
         </java-param>
     </java-params>
  </java-method>
  -->

  <java-method name="testMapOfCustomerAdapters">
     <oxm:xml-element
 xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'>
       <oxm:xml-java-type-adapter
 value='weblogic.wsee.databinding.internal.test.toplink.MapStringIntegerAdapter'/>
     </oxm:xml-element>
     <java-params>
         <java-param>
            <oxm:xml-element
 xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'>
              <oxm:xml-java-type-adapter
 value='weblogic.wsee.databinding.internal.test.toplink.MapStringCustomerAdapter'/>
            </oxm:xml-element>
         </java-param>
     </java-params>
  </java-method>

  <!-- Not implemented: Bare Multi-part -->
  <java-method name="test3Lists">
        <web-method exclude="true"/>
  </java-method>
  </java-methods>
</java-wsdl-mapping>

データ・バインディング・フレームワークに対する外部マッピング・メタデータのEXMスキーマ・ファイルは、次のURLから入手できます。

http://www.oracle.com/technology/weblogic/weblogic-wsee-databinding/1.1/weblogic-wsee-databinding.xsd

このデータによって、特定のJava Webサービス・エンドポイントの属性が定義されます。このスキーマでは、次の3タイプのXMLコンストラクトが定義されます。

  • JAX-WSまたはJSR-181に類似したコンストラクト。このコンストラクトは、サービス・エンドポイント・インタフェース(SEI)の属性、およびSEIのインタフェースで使用される値タイプのJAXB注釈を上書きまたは定義します。

  • 追加のマッピング仕様。この仕様は、標準のJAX-WSまたはJAXB注釈を使用する場合は使用不可で、主にjava.util.Collections APIで使用します。

  • Toplink OXMファイルから外部JAXBマッピング・メタデータへの参照。

コンストラクトがJAX-WS、JSR-181またはJAXB注釈に非常に類似している場合、スキーマ内のコメントには、次のような注釈が表示されます。

Corresponding Java annotation: javax.jws.WebParam.Mode