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>