この章では、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のサンプルのサイトを参照してください。
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 Beanを、他のSCAコンポーネントまたはリモート・クライアントがアクセスできるSCAコンポーネント・サービスとして公開します。
他のコンポーネントのサービスに接続されたサービス参照のSpring Beanを提供します。
すべてのサービス・コンポーネントと同様に、SpringコンポーネントにもcomponentTypeファイルがあります。componentTypeファイルに定義されているインタフェースは、interface.java定義を使用してサービスおよび参照インタフェースを識別します。
サービスはBeanによって実装され、Springコンテキスト・ファイルでターゲット設定されます。参照は、実行時に暗黙的(または仮想的)なBeanとしてSpringコンテキスト・ファイルで提供されます。
Javaインタフェースを使用してEnterprise JavaBeans (EJB)をSOAコンポジット・アプリケーションに統合することもできます(SDOパラメータは不要です)。詳細は、第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。
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を起動することができます。
次のタイプのコンポーネント統合がサポートされています。
JavaコンポーネントからWSDLコンポーネント
Javaインタフェース(EJBサービス、Springサービス・コンポーネントなど)からJavaインタフェースをサポートしていないコンポーネント(Oracle Mediator、Oracle BPEL Process Managerなど)にワイヤをドラッグすると、コンポーネント・インタフェースに対して互換性のあるWSDLが生成されます。
WSDLコンポーネントからJavaコンポーネント
WSDLインタフェースから、WSDLファイルをサポートしていないコンポーネント(Springサービス・コンポーネントなど)にワイヤをドラッグすると、互換性のあるJavaインタフェースが自動的に生成されます。さらに、既存のWSDLインタフェースを既存のJavaインタフェースに接続することも可能です。この場合、WSDLインタフェースとJavaインタフェース間の互換性はチェックされません。互換性が適正であることを確認する必要があります。
JavaコンポーネントからJavaコンポーネント
Springサービス・コンポーネントの作成時には、Javaインタフェース・ベースのEJBサービス・バインディング・コンポーネントと参照バインディング・コンポーネントを使用して、Springサービス・コンポーネントを自動的に構成できます。WSDLファイルは不要です。
2つのサービス・コンポーネント(またはサービス・コンポーネントとバインディング・コンポーネント)を接続するときは、接続の両端にインタフェースを定義します。これらのインタフェースには、XMLを使用して同じWSDL定義を指定する必要があるため、composite.xmlファイルまたはcomponent.componentTypeファイルのinterface.wsdlを使用して定義します。
JAX-WSの観点からは、(interface.javaで定義された)JavaインタフェースをWSDLインタフェースに接続すると、2つのインタフェースは互換性があるとみなされます。通常、これはOracle JDeveloperで規定され自動化されます。
|
注意: この項で説明する |
たとえば、例52-1に示すように、サービスのJavaインタフェースがあるとします。
例52-1 サービスのJavaインタフェース
public interface PortfolioService {
public double getPorfolioValue(String portfolioId);
}
実装では、別のコンポーネント(BPELプロセス、外部Webサービス、EJBなど)によって実装された追加のStockQuoteサービスを使用できるとします。例52-2に詳細を示します。
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>
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の両方が表示されます。
この項では、Oracle JDeveloperでSpringサービス・コンポーネントを作成し、そのコンポーネントを次のように接続する方法について説明します。
Javaインタフェース・ベースのEJBサービスおよび参照への接続(JavaからJavaへの統合)
Oracle Mediatorサービス・コンポーネントへの接続(JavaからWSDLへの統合)
Fusion Order DemoでのSpringサービス・コンポーネントの統合の概要は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。
Oracle JDeveloperでSpringサービス・コンポーネントを作成する手順は、次のとおりです。
図52-1に示すように、「コンポーネント・パレット」から「Springコンテキスト」サービス・コンポーネントをSOAコンポジット・エディタにドラッグします。
「Springの作成」ダイアログが表示されます。
「名前」フィールドに、Springサービス・コンポーネントの名前を入力します。この名前は、コンポーネント名とSpringコンテキスト・ファイル名の両方になります。図52-2に詳細を示します。
既存のコンテキストの使用を選択し、「参照」をクリックして、既存のSpringファイルを選択することもできます。たとえば、Oracle JDeveloperで作成されたがOracle SOA Suiteの外部にあるSpringコンテキストをインポートできます。別のプロジェクトから参照して選択したSpringコンテキストは、SOAプロジェクトにコピーされます。
|
注意: WebLogic SCAのスタンドアロンのSpringバージョンも使用可能です。通常、このバージョンはOracle SOA Suiteの外部で使用されます。このバージョンにアクセスするには、Springエディタ内での作業中に、「コンポーネント・パレット」からSpring 2.5 JEEを選択します。 |
「OK」をクリックします。
SOAコンポジット・エディタに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-->
</beans>
「コンポーネント・パレット」のドロップダウン・リストから、「WebLogic SCA」を選択します。
リストがリフレッシュされ、図52-3に示すように、選択内容が表示されます。
「サービス」アイコンをSpringエディタにドラッグします。
「サービスの挿入」ダイアログが表示されます。
表52-1に示すフィールドに入力して、ターゲットBeanおよびJavaインタフェースを定義します。
表52-1 「サービスの挿入」ダイアログ
| フィールド | 説明 |
|---|---|
|
名前 |
名前を入力します。 |
|
ターゲット |
ターゲットBeanを入力します。このアクションにより、Beanをサービスとして公開できます。 注意: このターゲットが存在していることを確認してください。このターゲットの存在をチェックする検証機能はサポートされていません。 |
|
タイプ |
Javaインタフェースを入力します。 |
完了すると、「サービスの挿入」ダイアログは図52-4のようになります。
「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サービス・コンポーネントの左側にハンドルが追加されています。
Springエディタに戻ります。
図52-3に示すリストから、「参照」アイコンをSpringエディタにドラッグします。
「参照の挿入」ダイアログが表示されます。
表52-2に示すようにダイアログに入力して、「OK」をクリックします。
完了すると、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>
図52-6に示すように、Springコンテキスト・ファイルを閉じます。
図52-7に示すように、Springサービス・コンポーネントの右側にハンドルが追加されています。
図52-8に示すように、左側のハンドルを「公開されたサービス」スイムレーンにドラッグして、サービス・バインディング・コンポーネントを作成します。
図52-9に示すように、サービスをWebサービスとして公開するか、またはEJBサービスとして公開するかを選択するように求めるプロンプトが表示されます。
EJB: EJBサービスをJavaインタフェースから公開します。このオプションを選択した場合、WSDLファイルを使用する必要はありません。
Webサービス: WebサービスをSOAP WSDLインタフェースから公開します。このオプションを選択すると、Springサービス・コンポーネントとの互換性を維持するために、JavaインタフェースからWSDLが生成されます。
このサービスをEJBサービスとして公開するか、またはWebサービスとして公開するかを選択します。「公開されたサービス」スイムレーンにサービスが自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図52-10に詳細を示します。
図52-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント

EJBサービスをダブルクリックすると、図52-11に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ7で「サービスの挿入」ダイアログに入力した値から作成されています。
自動的に生成されたデフォルトのJNDI名を、環境に適用可能な名前に置き換えます。
ダイアログを閉じます。
Springサービス・コンポーネントの右側のハンドルを「外部参照」スイムレーンにドラッグして、参照バインディング・コンポーネントを作成します。
ステップ13で説明した内容と同じSpringタイプ・オプションのメッセージが表示されます。
この参照を公開するオプションを選択します。「外部参照」スイムレーンに参照が自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図52-12に詳細を示します。
図52-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント

EJB参照をダブルクリックすると、図52-13に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ11で「参照の挿入」ダイアログに入力した値から作成されています。
ダイアログを閉じて、図52-14に示すようにSOAコンポジット・エディタに戻ります。
図52-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント

図52-15に示すように、カーソルをサービスの右ハンドルに置き、次に、図52-16に示すように、Springサービス・コンポーネントの左ハンドルに置きます。Javaインタフェースが表示されます。
Springサービス・コンポーネントの右ハンドル、および参照バインディング・コンポーネントの左ハンドルでも同様にカーソルを置いて、Javaインタフェースを表示します。
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>
「アプリケーション・ナビゲータ」で、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>
Springサービス・コンポーネントの右ハンドルを、Javaインタフェース・ベースのEJB参照ではなく、XMLベースのコンポーネント(Oracle Mediatorなど)に接続すると、互換性のあるWSDLファイルが生成されます。次の手順で詳細を説明します。
図52-17に示すように、Springサービス・コンポーネントの右ハンドルをOracle Mediatorにドラッグします。
Oracle MediatorのWSDLファイルから互換性のあるインタフェースが作成されたことを確認するプロンプトが表示された場合は、「OK」をクリックします。
JavaインタフェースとWSDLベース・コンポーネント間の接続をドラッグすると、(Javaインタフェース名に基づく)デフォルト名のWSDLファイルがすでに存在する場合、4つのオプションがプロンプトされます。接続の作成を取り消すには、「取消」をクリックします。図52-19に詳細を示します。
互換性のあるインタフェースを表示するには、図52-20に示すように、カーソルをSpringサービス・コンポーネントの右ハンドルに置き、次に、図52-21に示すように、Oracle Mediatorの左ハンドルに置きます。
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サービス・コンポーネントの統合」を参照してください。
|
注意:
|
カスタムSpring Beanは、グローバルSpringコンテキスト定義を介して定義できます。この構成では、グローバル・レベルで1回のみ、これらのBeanを定義できます。
グローバルSpringコンテキストを介してカスタムSpring Beanを定義する方法は、次のとおりです。
カスタムSpring Bean定義を次のファイルに追加します。
SOA_HOME/soa/modules/oracle.soa.ext_11.1.1/classes/
springse-extension-global-beans.xml
対応するクラスを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を使用するにはサーバーを再起動する必要があります。 |
Oracle SOA Suiteには、次の事前定義済のSpring Beanがあります。
headerHelperBean: ヘッダー・プロパティを取得および設定します。
instanceHelperBean: 次の情報を取得および設定します。
現在実行中のコンポジット・インスタンスのインスタンスID。
現在実行中のコンポーネント・インスタンスのインスタンスID。
コンポーネントが含まれているコンポジットの識別名(DN)。
Springサービス・コンポーネントの名前。
loggerBean: コンテキスト対応のロギング・メッセージの提供。Oracle Enterprise Manager Fusion Middleware Controlで、ロガー・ハンドラを定義し、そのハンドラのロギング・レベルを構成できます。そのロガーは、oracle.integration.platform.blocks.java.beans.implという名前になります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の構成ログ・ファイルに関する項を参照してください。
事前定義済のSpring Beanは、Springサービス・コンポーネントに自動的に挿入されます。ただし、Springコンテキスト・ファイル内にそのBeanへの参照を挿入することで事前定義済のSpring BeanをSOAコンポジット・アプリケーションに明示的に統合する必要があります。
Springコンテキスト・ファイル内のloggerBeanおよびheaderHelperBeanの参照方法の例は、第52.5.4項「Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法」を参照してください。
例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.
* <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-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.
* <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-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
* [<composite instance id>/<component instance id>] <message>
* <br/>
* To use this bean from within your context, declare property
* with ref="loggerBean". E.g.
* <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);
}
Springコンテキスト・ファイル内の事前定義済Beanへの参照を作成します。
Springコンテキスト・ファイル内の事前定義済Spring Beanを参照する方法は、次のとおりです。
Oracle JDeveloperの「ソース」ビューでSpringコンテキスト・ファイルを開きます。
事前定義済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サービス・コンポーネントの統合」を参照してください。
Fusion Order DemoのPartner Supplier Compositeアプリケーションは、Springサービス・コンポーネントでパートナの倉庫から見積を取得する方法を提示します。図52-22に、このコンポジット・アプリケーションのSOAコンポジット・エディタを示します。
図52-22 Springサービス・コンポーネントを使用したPartner Supplier Composite

IInternalPartnerSupplierは、外部クライアント・サービスとして「公開されたサービス」スイムレーンに公開されます。
Oracle Mediatorサービス・コンポーネントのPartnerSupplierMediatorは、見積金額に基づいてクライアント・リクエストを次のようにルーティングします。
$2000未満の見積は、Oracle BPEL Process Managerにルーティングされます。
$2000以上$3000未満のリクエストは、Springサービス・コンポーネントのSpringPartnerSupplierMediatorにルーティングされます。外部EJB参照バインディング・コンポーネントのIExternalPartnerSupplierServiceが起動して見積を取得します。また、外部ファイル・アダプタのWriteQuoteRequestが起動して見積結果をファイルに書き込みます。
$3000以上のリクエストは、Springサービス・コンポーネントのSpringPartnerSupplierMediatorにルーティングされます。ただし、このリクエストは外部EJB参照バインディング・コンポーネントにルーティングされません。かわりに、EJBインタフェースを実装することにより、内部的に処理されます。また、外部ファイル・アダプタのWriteQuoteRequestが起動して見積結果をファイルに書き込みます。
図52-23に、この動作の概要を示します。
$2000以上$3000未満のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。「外部参照」スイムレーンでは、JavaインタフェースのIExternalPartnerSupplierServiceが外部EJBとして公開され、見積を取得します。
$3000以上のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorSimpleがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。内部JavaインタフェースのIExternalPartnerSupplierServiceMockを使用して、見積を取得します。「外部参照」スイムレーンのIExternalPartnerSupplierService参照は起動されません。
「外部参照」スイムレーンでは、WriteQuoteRequest参照でWSDLベースのファイル・アダプタが使用され、Javaインタフェースはサポートされていないため、互換性のあるWSDLファイルが生成されます。
例52-12に、IInternalPartnerSupplier.javaファイルを示します。IInternalPartnerSupplierはInternalSupplierMediatorによって実装されます。
例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-13のSpringPartnerSupplierMediator.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
Javaコードにはベクトルを含めることができます。ただし、コンテンツPOJOを宣言しないと、ベクトルをXMLにシリアライズできません。次の例では、この問題を解決して、Fusion Order Demoのコード・サンプルを使用する方法の概要を示します。
Javaベクトル・タイプ・パラメータを使用してEJBを使用する手順は、次のとおりです。
図52-24に示すように、Javaコードにベクトルが含まれているとします。
Javaインタフェース・クラスおよびJNDI名に基づいて、EJBバインディング参照を作成します。図52-25に例を示します。
図52-26に示すように、EJB参照をSpringサービス・コンポーネントに接続します。
新しい参照がSpringコンテキスト・ファイルに作成されます。図52-27に詳細を示します。
IExternalPartnerSupplierServiceタイプのpublicメンバーを宣言してSpringを有効にし、参照をクラスに挿入します。図52-28に詳細を示します。
メンバーの名前でプロパティをIExternalPartnerSupplierServiceに追加し、ExternalPartnerSupplier参照Beanを参照します。図52-29に詳細を示します。
これによって、ベクトルがEJBパラメータに変換されます。
Oracle Fusion Middlewareでは、JavaクラスをXMLデータにマップするために、JAXBおよびEclipseLink OXMの使用がサポートされています。これによって、データを任意のXML形式でメモリーに保存および取得できるため、プログラムのクラス構造に対する一連の固有なXMLルーチンの実装は不要です。このサポートによって、次の操作を実行できます。
XMLデータへのJavaオブジェクトのマップ
JavaオブジェクトへのXMLデータのマップ
JAXBマッピング用の外部メタデータの設計情報は、次のURLを参照してください。
http://wiki.eclipse.org/EclipseLink/DesignDocs/277920
JAXB OXMおよびOXMマッピング・ファイル(eclipselink-oxm.xsd)の詳細は、次のURLを参照してください。
http://wiki.eclipse.org/EclipseLink/FAQ/WhatIsMOXyhttp://wiki.eclipse.org/EclipseLink/Examples/MOXyhttp://wiki.eclipse.org/Category:XML
EJBをSOAコンポジット・アプリケーションに統合する場合は、JavaクラスをXMLデータにマップすることもできます。詳細は、第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。
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
Spring構成ファイルでGroovyまたはAspectjクラスを構成する場合は、次の規則に従う必要があります。
classpathプロトコルを使用します。
script-source="classpath:"
SCAパッケージはクラス・ローダーの通常のJARファイルとして処理されないため、相対ファイル・パスは使用できません。たとえば、次のclasspathプロトコルはクラス・パスからGroovyファイルを検索することを示します。
script-source="classpath:service/GroovyGreeter.groovy"
classpathプロトコルを使用する場合は、GroovyファイルとAspectjファイルを次のいずれかのディレクトリに追加します。他のディレクトリは使用できません。
SCA-INF/classes
SCA-INF/lib
共有SOA lib
ビルド・スクリプトがclassesディレクトリを削除するように構成されている場合は、GroovyファイルをSCA-INF/libディレクトリに格納するか、またはビルド・スクリプトを削除が行われないように設計します。
GroovyまたはAspectjのSpring拡張JARファイル・ライブラリを管理対象サーバーのsetDomainENV.shまたはsetDomainENV.batファイルのクラス・パスに追加し、サーバーを再起動します。これにより、デプロイメントが正常に実行されることが保証されます。SpringではJavaリフレクションを使用してアスペクト指向プログラミング(AOP)がインスタンス化されるため、再起動が必要です。リフレクションの使用により、クラスの検索がシステム・クラス・ローダーに限定されます。システム・クラス・ローダーに変更を加えた場合は、サーバーの再起動が必要になります。
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ディレクトリにデプロイします。