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>