ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド
11gリリース1 (11.1.1.7)
B56238-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

この章では、Spring Frameworkを使用して、Javaインタフェースを使用するコンポーネントをSOAコンポジット・アプリケーションに統合する方法について説明します。Oracle SOA Suiteでは、Oracle WebLogic ServerのWebLogic Service Component Architecture (SCA)で提供されるSpring Framework機能を使用します。また、この章では、Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントを同じSOAコンポジット・アプリケーション内に統合する方法についても説明します。また、JavaクラスをXMLデータにマップするための、Java Architecture for XML Binding (JAXB)およびEclipseLink O/X-Mapper (OXM)の使用についても説明します。

この章では、次の項目について説明します。

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

Spring Frameworkの使用方法の例は、Oracle SOA Suiteのサンプルのサイトを参照してください。

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

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

WebLogic SCAによって、ユーザーはSpring Frameworkを使用して、plain old Java object (POJO)を使用するJavaアプリケーションを作成し、コンポーネントをSCAサービスおよび参照として公開できます。SCAの観点では、WebLogic Spring Framework SCAアプリケーションは、各クラスをSCAサービスおよび参照と結び付けるSpring SCA コンテキスト・ファイルとPOJOの集合です。

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

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

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

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

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

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

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

52.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を使用してこの機能を実現する方法については、この章の後続の項で説明します。


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

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

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

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

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

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

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

例52-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>

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

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

例52-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ファイルには、コンポーネントと参照が定義されています。例52-6に詳細を示します。

例52-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>

52.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コンテキスト・ファイルに例52-7に示すような構文を作成するとします。

例52-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では、例52-8に示すように、単一のサービスをSpringのcomponentTypeファイルに自動的に作成します。

例52-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の両方が表示されます。

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

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

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

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

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

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

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

    図52-1の説明が続きます
    「図52-1 「Springコンテキスト」サービス・コンポーネント」の説明

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

  2. 「名前」フィールドに、Springサービス・コンポーネントの名前を入力します。この名前は、コンポーネント名とSpringコンテキスト・ファイル名の両方になります。図52-2に詳細を示します。

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

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

    図52-2の説明が続きます
    「図52-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」を選択します。

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

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

    図52-3の説明が続きます
    「図52-3 「WebLogic SCA」メニュー」の説明

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

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

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

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

    フィールド 説明

    名前

    名前を入力します。

    ターゲット

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

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

    タイプ

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


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

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

    図52-4の説明が続きます
    「図52-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コンポジット・エディタに戻ると、図52-5に示すように、Springサービス・コンポーネントの左側にハンドルが追加されています。

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

    図52-5の説明が続きます
    「図52-5 サービス・ハンドル」の説明

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

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

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

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

    表52-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. 図52-6に示すように、Springコンテキスト・ファイルを閉じます。

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

    図52-6の説明が続きます
    「図52-6 Springコンテキスト・ファイル」の説明

    図52-7に示すように、Springサービス・コンポーネントの右側にハンドルが追加されています。

    図52-7 参照ハンドル

    図52-7の説明が続きます
    「図52-7 参照ハンドル」の説明

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

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

    図52-8の説明が続きます
    「図52-8 サービス・バインディング・コンポーネント」の説明

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

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

    図52-9の説明が続きます
    「図52-9 作成するサービス・タイプ」の説明

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

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

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

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

    図52-10の説明が続きます
    「図52-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント」の説明

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

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

    図52-11の説明が続きます
    「図52-11 「公開されたサービス」スイムレーンの「EJBサービス」ダイアログ」の説明

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

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

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

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

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

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

    図52-12の説明が続きます
    「図52-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント」の説明

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

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

    図52-13の説明が続きます
    「図52-13 「外部参照」スイムレーンの「EJB参照」ダイアログ」の説明

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

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

    図52-14の説明が続きます
    「図52-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント」の説明

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

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

    図52-15の説明が続きます
    「図52-15 サービスのJavaインタフェース」の説明

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

    図52-16の説明が続きます
    「図52-16 Springサービス・コンポーネントのJavaインタフェース」の説明

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

  24. componentTypeファイル内のSpringサービス・コンポーネントのインタフェースを表示する場合は、アプリケーション・ナビゲータでこのファイルを選択します。両方のコンポーネントのインタフェースは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. 図52-17に示すように、Springサービス・コンポーネントの右ハンドルをOracle Mediatorにドラッグします。

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

      図52-17の説明が続きます
      「図52-17 Springサービス・コンポーネントとOracle Mediatorの統合」の説明

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

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

      図52-18の説明が続きます
      「図52-18 Oracle MediatorのWSDLファイルからのJavaファイル作成」の説明

      JavaインタフェースとWSDLベース・コンポーネント間の接続をドラッグすると、(Javaインタフェース名に基づく)デフォルト名のWSDLファイルがすでに存在する場合、4つのオプションがプロンプトされます。接続の作成を取り消すには、「取消」をクリックします。図52-19に詳細を示します。

      図52-19 既存のWSDLファイル

      図52-19の説明が続きます
      「図52-19 既存のWSDLファイル」の説明

    3. 互換性のあるインタフェースを表示するには、図52-20に示すように、カーソルをSpringサービス・コンポーネントの右ハンドルに置き、次に、図52-21に示すように、Oracle Mediatorの左ハンドルに置きます。

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

      図52-20の説明が続きます
      「図52-20 Springサービス・コンポーネントのインタフェース」の説明

      図52-21 Oracle Mediatorのインタフェース

      図52-21の説明が続きます
      「図52-21 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コンポジット・アプリケーションに統合する方法の詳細は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。


注意:

  • Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントとをSOAコンポジット・エディタで統合する際、インタフェース・クラスがクラスパスになく、ソース・ファイルがSOAプロジェクトに存在する場合は、現行のローダーのSCA-INF/libディレクトリにあるJARファイルが、インタフェース・クラスを見つけるために自動的にリフレッシュされます。

  • Javaインタフェースを使用するサービスとのBPELプロセスのパートナ・リンクを作成することもできます。パートナ・リンクの作成時に、「サービス・エクスプローラ」ダイアログでこのサービスのタイプを選択します。詳細は、第4.3項「パートナ・リンクの概要」を参照してください。


52.3.2 JavaからWSDLへの変換時のJavaクラス・エラーに関する必知事項

JavaからWSDLへの変換が不正なJavaクラスにより失敗し、問題に対処するためJavaコードを変更した場合は、Oracle JDeveloperを再起動する必要があります。そうしないと、新規クラスが再ロードされないためにJavaからWSDLへの変換が失敗します。

52.4 グローバルSpringコンテキストを介したカスタムSpring Beanの定義

カスタムSpring Beanは、グローバルSpringコンテキスト定義を介して定義できます。この構成では、グローバル・レベルで1回のみ、これらのBeanを定義できます。

52.4.1 グローバルSpringコンテキストを介したカスタムSpring Beanの定義方法

グローバルSpringコンテキストを介してカスタムSpring Beanを定義する方法は、次のとおりです。

  1. カスタムSpring Bean定義を次のファイルに追加します。

    SOA_HOME/soa/modules/oracle.soa.ext_11.1.1/classes/
    springse-extension-global-beans.xml
    
  2. 対応するクラスをlibディレクトリ(JARファイルとして)またはクラス・ディレクトリ(JARファイルの抽出ファイルとして)に追加します。

    SOA_HOME/soa/modules/oracle.soa.ext_11.1.1/lib | classes
    

詳細は、次のディレクトリにあるreadme.txtファイルを参照してください。

SOA_HOME/soa/modules/oracle.soa.ext_11.1.1

注意:

新しく追加されたSpring Beanを使用するにはサーバーを再起動する必要があります。


52.5 事前定義済のSpring Beanの使用

Oracle SOA Suiteには、次の事前定義済のSpring Beanがあります。

事前定義済のSpring Beanは、Springサービス・コンポーネントに自動的に挿入されます。ただし、Springコンテキスト・ファイル内にそのBeanへの参照を挿入することで事前定義済のSpring BeanをSOAコンポジット・アプリケーションに明示的に統合する必要があります。

Springコンテキスト・ファイル内のloggerBeanおよびheaderHelperBeanの参照方法の例は、第52.5.4項「Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法」を参照してください。

52.5.1 headerHelperBeanのIHeaderHelperBean.javaインタフェース

例52-9は、headerHelperBean BeanのIHeaderHelperBean.javaインタフェースを示しています。

例52-9 IHeaderHelperBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;
/**
 * Interface for getting and setting header properties.
 * These properties will be set on the normalized message - and passed on
 * to the respective reference that the local reference is wired to on 
 * composite level.
 * <br/>
 * To use this bean from within your context, declare property
 * with ref="headerHelperBean". E.g.
 * &lt;property name="headerHelper" ref="<b>headerHelperBean</b>"/>
 */
public interface IHeaderHelperBean 
{
    /**
     * Get a property from the normalized message header. Note that these
     * properties are defined, and are the same ones, one can get/set via
     * mediator or bpel process
     * @param pKey the property key, case sensitive
     * @return the value, or null in case not found
     */
    public String getHeaderProperty (String pKey);
    /**
     * Set a property on the normalized message header. Note that these
     * properties are defined, and are the same ones, one can get/set via
     * mediator or bpel process
     * @param pKey the property key, case sensitive
     * @param pValue the value to be set
     */
    public void setHeaderProperty (String pKey, String pValue); 
}

52.5.2 instancerHelperBeanのIInstanceHelperBean.javaインタフェース

例52-10は、instanceHelperBean BeanのIInstanceHelperBean.javaインタフェースを示しています。

例52-10 IInstanceHelperBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;

import oracle.integration.platform.instance.engine.ComponentInstanceContext;
/**
 * Instancehelper Bean, gives access to composite / component + instance
 information
 * <br/>
 * To use this bean from within your context, declare property
 * with ref="instanceHelperBean". E.g.
 * &lt;property name="instanceHelper" ref="<b>instanceHelperBean</b>"/>
 */
public interface IInstanceHelperBean 
{    
  /**
   * Returns the instance id of the composite instance currently running 
   * @return the composite instance id
   */
  public String getCompositeInstanceId ();
  
  /**
   * Returns the instance id of the component instance currently running 
   * @return the component instance id
   */
  public String getComponentInstanceId ();
  
  /**
   * Returns the composite dn containing this component
   * @return the composite dn
   */
  public String getCompositeDN ();
  
  /**
   * Returns the name of this spring component 
   * @return the component name
   */
  public String getComponentName ();
  
}

52.5.3 loggerBeanのILoggerBean.javaインタフェース

例52-11は、loggerBean BeanのILoggerBean.javaインタフェースを示しています。

例52-11 ILoggerBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;

import java.util.logging.Level;

/**
 * Logger bean interface, messages will be logged as
 * [&lt;composite instance id>/&lt;component instance id>] &lt;message>
 * <br/>
 * To use this bean from within your context, declare property
 * with ref="loggerBean". E.g.
 * &lt;property name="logger" ref="<b>loggerBean</b>"/>
 */
public interface ILoggerBean 
{

  /**
   * Log a message, with Level.INFO
   * @param message
   */
  public void log (String message);
  
  /**
   * Log a message with desired level
   * @param pLevel the log level
   * @param message the message to log
   */
  public void log (Level pLevel, String message);
  
  /**
   * Log a throwable with the desired level
   * @param level the level to log with
   * @param message the message
   * @param th the exception (throwable) to log
   */
  public void log (Level level, String message, Throwable th);
    
}

52.5.4 Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法

Springコンテキスト・ファイル内の事前定義済Beanへの参照を作成します。

Springコンテキスト・ファイル内の事前定義済Spring Beanを参照する方法は、次のとおりです。

  1. Oracle JDeveloperの「ソース」ビューでSpringコンテキスト・ファイルを開きます。

  2. 事前定義済BeanのloggerBeanおよびheaderHelperBeanへの参照を追加します。

    <?xml version="1.0" encoding="windows-1252" ?>
    . . .
    . . .
      <!--
        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"/>
            <!-- context aware logger, globally available bean [ps3] -->
            <property name="logger" ref="loggerBean"/>        
            <!-- headerHelper bean -->
            <property name="headerHelper" ref="headerHelperBean"/>
      </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"/>
            <!-- context aware logger, globally available bean [ps3] -->
            <property name="logger" ref="loggerBean"/>      
            <!-- headerHelper bean -->
            <property name="headerHelper" ref="headerHelperBean"/>
      </bean>      
    . . .
    . . .
    

    この構文は、Fusion Order DemoのPartner Supplier CompositeアプリケーションのSpringコンテキスト・ファイルに含まれています。詳細は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

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

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

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

図52-22の説明が続きます
「図52-22 Springサービス・コンポーネントを使用したPartner Supplier Composite」の説明

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

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

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

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

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

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

図52-23 Fusion Order DemoのSpringアーキテクチャ

図52-23の説明が続きます
「図52-23 Fusion Order DemoのSpringアーキテクチャ」の説明

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

例52-12 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!
 *  
 */
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;
    
}

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

例52-13 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>

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

例52-14 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"/>
       <!-- context aware logger, globally available bean [ps3] -->
       <property name="logger" ref="loggerBean"/>               
<!-- headerHelper bean -->
       <property name="headerHelper" ref="headerHelperBean"/>
 </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"/>
       <!-- context aware logger, globally available bean [ps3] -->
       <property name="logger" ref="loggerBean"/>             
<!-- headerHelper bean -->
       <property name="headerHelper" ref="headerHelperBean"/>
 </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 

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

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

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

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

    図52-24 ベクトル

    図52-24の説明が続きます
    「図52-24 ベクトル」の説明

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

    図52-25 EJBバインディング参照の作成

    図52-25の説明が続きます
    「図52-25 EJBバインディング参照の作成」の説明

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

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

    図52-26の説明が続きます
    「図52-26 Springサービス・コンポーネントに接続されたEJB参照」の説明

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

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

    図52-27の説明が続きます
    「図52-27 Springコンテキスト・ファイルへの参照の追加」の説明

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

    図52-28 publicメンバーの宣言

    図52-28の説明が続きます
    「図52-28 publicメンバーの宣言」の説明

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

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

    図52-29の説明が続きます
    「図52-29 メンバーの名前で追加したプロパティ」の説明

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

52.7 JAXBおよびOXMのサポート

Oracle Fusion Middlewareでは、JavaクラスをXMLデータにマップするために、JAXBおよびEclipseLink 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

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

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

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

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

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

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

EXMファイル名はJavaクラス名と一致し、同じパッケージの場所に存在する必要があります。たとえば、Javaクラスの名前がpack1.pack2.myJavaInterface.classの場合、EXMファイルの名前はpack1/pack2/myJavaInterface.exmにする必要があります。

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ファイルがソース・パスにある場合にも、対応する同じディレクトリ構造内にある必要があります。

EXM(およびOXM)ファイルをSCA-INF/srcに置く場合は、Oracle JDeveloperプロジェクトが、SCA-INF/srcがデフォルトのソース・ディレクトリになるように構成されていることを確認します(プロジェクト名を右クリックし、「プロジェクト・プロパティ」「Javaソースパス」を選択します)。EXMファイルは、プロジェクトのクラス・パスにあるJARファイルにもあります。

Javaインタフェース(Enterprise JavaBeans)をBPELプロセスにドラッグ・アンド・ドロップすると、Oracle SOA SuiteではEXMファイルが存在するかどうかが確認されます。存在する場合は、Webサービスjava2wsdl APIに渡されます。

WSDLファイルが生成された後、情報メッセージが表示されます。EXMファイルが使用された場合、メッセージは次の書式で表示されます。

The WSDL file {0} was generated based on the JAVA class {1} using extended mapping file {2}

例52-15に、EXMファイルの例を示します。

例52-15 EXMサンプル・ファイル

 <java-wsdl-mapping name="com.hello.sei.MyServiceEndpointInterface"
           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="com.hello.foo"  file-path="./foo-oxm.xml"/>
       <toplink-oxm      java-package="com.hello.coo">
            <xml-bindings
 xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
                <xml-schema
                    element-form-default="QUALIFIED"
                    attribute-form-default="UNQUALIFIED"
                    namespace="urn:customer">
                    <xml-ns prefix="ns1" namespace-uri="urn:customer" />
                </xml-schema>
                <java-types>
                    <java-type name="Person" xml-transient="true">
                        <java-attributes>
                            <xml-transient java-attribute="id"/>
                        </java-attributes>
                    </java-type>
                    <java-type name="Customer">
                        <xml-see-also>org.example.employee.Employee</xml-see-also>
                    </java-type>
                </java-types>
            </xml-bindings>
       </toplink-oxm>
  </xml-schema-mapping>
. . .
</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

52.8 Springサービス・コンポーネントによるGroovyおよびAspectjクラスの構成

Spring構成ファイルでGroovyまたはAspectjクラスを構成する場合は、次の規則に従う必要があります。

52.9 Springエラーのトラブルシューティング

SOAコンポジット・アプリケーションがあり、その中でBPELプロセスによってSpringコンテキストが起動されるとします。しかし、起動するためのSpring Beanインタフェースが見つかりません。管理サーバー診断ログ・ファイルに、例52-16に示すエラーが表示されます。

例52-16 Spring Bean起動エラー

[2012-04-09T10:30:07.499-07:00] [AdminServer] [NOTIFICATION] [SOA-31704]
[oracle.integration.platform.blocks.java] [tid: [ACTIVE].ExecuteThread: '2' for
queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid:
11d1def534ea1be0:2058db3f:1369787a1b8:-8000-0000000000002be6,0:2] [WEBSERVICE_
PORT.name: SOACohSpringBPELProcess_pt] [APP: soa-infra] [composite_name:
SOACohSpringProj] [component_name: SOACohSpringBPELProcess] [component_instance_
id: 270006] [J2EE_MODULE.name: fabric] [WEBSERVICE.name: soacohspringbpelprocess_
client_ep] [J2EE_APP.name: soa-infra] No mapping found for class
SOACohSpringProj.CohEJBInterface.

その1つのクラスを含むJARファイルをSCA-INF/libディレクトリにデプロイするか、複数のクラスをSARファイルのSCA-INF/classesディレクトリにデプロイします。