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

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

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

ノート:

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

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

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

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

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

Spring Frameworkのcomposite.xmlファイルには、interface.java定義を使用するPortfolioServiceサービスおよびStockQuoteサービスがリストされます。次の例に詳細を示します。

<component name="PortfolioComp">
    <implementation.spring src="Spring/PortfolioComp.xml"/>
    <componentType>
      <service name="PortfolioService">
        <interface.java interface="com.bigbank.PortfolioService"/>
      </service>
      <reference name="StockService">
        <interface.java interface="com.bigbank.StockQuote"/>
      </reference>
    </componentType>
  </component>

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

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

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