この章の内容は次のとおりです。
Oracle JDeveloperでのSpringサービス・コンポーネントの作成
Oracle SOA Suiteで使用するWebLogic SCA機能の詳細は、『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コンポーネントはcomposite.xml
ファイルで定義されます。composite.xml
ファイルで定義されたSpringコンポーネントには、binding.java
を使用するサービスおよび参照要素があります。
サービスはBeanによって実装され、Springコンテキスト・ファイルでターゲット設定されます。参照は、実行時に暗黙的(または仮想的)なBeanとしてSpringコンテキスト・ファイルで提供されます。
Javaインタフェースを使用してEnterprise JavaBeans (EJB)をSOAコンポジット・アプリケーションに統合することもできます(SDOパラメータは不要です)。詳細は、「Enterprise JavaBeansとコンポジット・アプリケーションの統合」を参照してください。
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
ファイルの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>
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
を用意する必要があります。命名規則のsome
Service
および
someServiceCallback
を使用して
sca:serviceおよびsca:reference
の両方を作成すると、Oracle SOA Suiteでは、この命名規則が認識され、コールバックがある単一のサービスまたは参照が作成されます。
たとえば、Oracle JDeveloperのSpringエディタを使用して、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では、次の例に示すように、単一のサービスを自動的に作成します。
<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エディタには、同じ命名規則(some
Service
および
someServiceCallback
)を使用する
sca:serviceおよびsca:reference
の両方が表示されます。
この項では、Oracle JDeveloperでSpringサービス・コンポーネントを作成し、そのコンポーネントを次のように接続する方法について説明します。
Javaインタフェース・ベースのEJBサービスおよび参照への接続(JavaからJavaへの統合)
Oracle Mediatorサービス・コンポーネントへの接続(JavaからWSDLへの統合)
Oracle JDeveloperでSpringサービス・コンポーネントを作成する手順は、次のとおりです。
図55-1 に示すように、「コンポーネント」ウィンドウで、「Spring」サービス・コンポーネントをにドラッグします。
「Springの作成」ダイアログが表示されます。
「名前」フィールドに、Springサービス・コンポーネントの名前を入力します。この名前は、コンポーネント名とSpringコンテキスト・ファイル名の両方になります。図55-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コンテキストの内容が表示されます。
「コンポーネント」ウィンドウで、ドロップダウン・リストから「WebLogic SCA」を選択します。
リストがリフレッシュされ、図55-3 に示すように、選択内容が表示されます。
「サービス」アイコンをSpringエディタにドラッグします。
「サービスの挿入」ダイアログが表示されます。
表55-1 に示すフィールドに入力して、ターゲットBeanおよびJavaインタフェースを定義します。
表55-1 「サービスの挿入」ダイアログ
フィールド | 説明 |
---|---|
名前 |
名前を入力します。 |
ターゲット |
ターゲットBeanを入力します。このアクションにより、Beanをサービスとして公開できます。 注意: このターゲットが存在していることを確認してください。このターゲットの存在をチェックする検証機能はサポートされていません。 |
タイプ |
Javaインタフェースを入力します。 |
完了すると、「サービスの挿入」ダイアログは図55-4 のようになります。
「OK」をクリックします。
ターゲットBeanは、Springコンテキストでサービス・インタフェースになります。
<?xml version="1.0" encoding="UTF-8" ?> <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.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd"> <!--Spring Bean definitions go here--> <sca:service name="scaserv1" target="cp" type="oracle.mypackage.myinterface"/> </beans>
Springエディタを閉じてSOAコンポジット・エディタに戻ると、図55-5 に示すように、Springサービス・コンポーネントの左側にハンドルが追加されています。
Springエディタに戻ります。
図55-3 に示すリストから、「参照」アイコンをSpringエディタにドラッグします。
「参照の挿入」ダイアログが表示されます。
表55-2 に示すようにダイアログに入力して、「OK」をクリックします。
表55-2 「参照の挿入」ダイアログ
フィールド | 説明 |
---|---|
名前 |
名前を入力します。 |
タイプ |
Javaインタフェースを入力します。 |
完了すると、Springエディタに、Springコンテキストのサービスおよび参照が表示されます。
<?xml version="1.0" encoding="UTF-8" ?>
<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.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms.xsd
http://www.springframework.org/schema/oxm
http://www.springframework.org/schema/oxm/spring-oxm.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
<!--Spring Bean definitions go here-->
<sca:service name="scaserv1" target="cp"
type="oracle.mypackage.myinterface"/>
<sca:reference name="scaref1" type="external.bean.myInterface"/>
</beans>
図55-6 に示すように、Springコンテキスト・ファイルを閉じます。
図55-7 に示すように、Springサービス・コンポーネントの右側にハンドルが追加されています。
図55-8 に示すように、左側のハンドルを「公開されたサービス」スイムレーンにドラッグして、サービス・バインディング・コンポーネントを作成します。
図55-9 に示すように、サービスをWebサービスとして公開するか、またはEJBサービスとして公開するかを選択するように求めるプロンプトが表示されます。
EJB: EJBサービスをJavaインタフェースから公開します。このオプションを選択した場合、WSDLファイルを使用する必要はありません。
Webサービス: WebサービスをSOAP WSDLインタフェースから公開します。このオプションを選択すると、Springサービス・コンポーネントとの互換性を維持するために、JavaインタフェースからWSDLが生成されます。
このサービスをEJBサービスとして公開するか、またはWebサービスとして公開するかを選択します。「公開されたサービス」スイムレーンにサービスが自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図55-10に詳細を示します。
図55-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント
EJBサービスをダブルクリックすると、図55-11 に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ7で「サービスの挿入」ダイアログに入力した値から作成されています。
自動的に生成されたデフォルトのJNDI名を、環境に適用可能な名前に置き換えます。
ダイアログを閉じます。
Springサービス・コンポーネントの右側のハンドルを「外部参照」スイムレーンにドラッグして、参照バインディング・コンポーネントを作成します。
ステップ13で説明した内容と同じSpringタイプ・オプションのメッセージが表示されます。
この参照を公開するオプションを選択します。「外部参照」スイムレーンに参照が自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図55-12に詳細を示します。
図55-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント
EJB参照をダブルクリックすると、図55-13 に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ11で「参照の挿入」ダイアログに入力した値から作成されています。
ダイアログを閉じて、図55-14 に示すようにSOAコンポジット・エディタに戻ります。
図55-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント
サービスの右ハンドル(図55-15 を参照)とSpringサービス・コンポーネントの左ハンドルの両方にカーソルを合せます(図55-16 を参照)。Javaインタフェースが表示されます。
Springサービス・コンポーネントの右ハンドル、および参照バインディング・コンポーネントの左ハンドルでも同様にカーソルを置いて、Javaインタフェースを表示します。
composite.xml
ファイルの「ソース」ビューを選択して、同様の詳細を表示します。
<?xml version="1.0" encoding="UTF-8" ?> <!-- Generated by Oracle SOA Modeler version 12.1.3.0.0 at [5/16/14 3:05 AM]. --> <composite name="Project1" . . . . . . <service name="scaserv1"> <interface.java interface="oracle.mypackage.myinterface"/> <binding.ejb uri="scaserv1_ejb_ep" ejb-version="EJB3"/> </service> <property name="productVersion" type="xs:string" many="false">12.1.3.0.0</property> <property name="compositeID" type="xs:string" many="false">4c07dbf0-5c01-450e-bde6-8c3866f45edc</property> <component name="MySpring"> <implementation.spring src="Spring/MySpring.xml"/> <componentType> <service name="scaserv1"> <interface.java interface="oracle.mypackage.myinterface"/> </service> <reference name="scaref1"> <interface.java interface="external.bean.myInterface"/> </reference> </componentType> </component> <reference name="scaref1"> <interface.java interface="external.bean.myInterface"/> <binding.ejb uri="scaref1_ejb_ep" ejb-version="EJB3"/> </reference> <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など)に接続すると、Oracle Mediatorの既存のWSDLインタフェースからJavaインタフェースが生成されます。次の手順で詳細を説明します。
図55-17 に示すように、Springサービス・コンポーネントの右ハンドルをOracle Mediatorにドラッグします。
Oracle MediatorのWSDLファイルから互換性のあるインタフェースが作成されたことを確認するプロンプトが表示された場合は、「OK」をクリックします。
JavaインタフェースとWSDLベース・コンポーネント間の接続をドラッグすると、(Javaインタフェース名に基づく)デフォルト名のWSDLファイルがすでに存在する場合、4つのオプションがプロンプトされます。接続の作成を取り消すには、「取消」をクリックします。図55-19に詳細を示します。
Springサービス・コンポーネントの右ハンドル(図55-20 を参照)とOracle Mediatorの左ハンドルの両方にカーソルを合せ(図55-21 を参照)、互換性のあるインタフェースを表示します。
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コンポジット・エディタで統合する際に、特定のインタフェース・クラスがクラスパスになく(SCA-INF/lib
ディレクトリにあるJARファイルを含む)、ソース・ファイルがSOAプロジェクトに存在する場合は、ソースを自動的にコンパイルするように要求されます。
Javaインタフェースを使用するサービスとのBPELプロセスのパートナ・リンクを作成することもできます。パートナ・リンクの作成時に、「サービス・エクスプローラ」ダイアログでこのサービスのタイプを選択します。詳細は、「パートナ・リンクの概要」を参照してください。
カスタムSpring Beanは、グローバルSpringコンテキスト定義を介して定義できます。この構成では、グローバル・レベルで1回のみ、これらのBeanを定義できます。
Oracle SOA Suiteには、次の事前定義済のSpring Beanがあります。
headerHelperBean
: ヘッダー・プロパティを取得および設定します。
instanceHelperBean
: 次の情報を取得および設定します。
現在実行中のフロー・インスタンスのインスタンスID。
現在実行中のコンポーネント・インスタンスのインスタンスID。
コンポーネントが含まれているコンポジットの識別名(DN)。
Springサービス・コンポーネントの名前。
loggerBean
: コンテキスト対応のロギング・メッセージの提供。
事前定義済のSpring Beanは、Springサービス・コンポーネントに自動的に挿入されます。ただし、Springコンテキスト・ファイル内にそのBeanへの参照を挿入することで事前定義済のSpring BeanをSOAコンポジット・アプリケーションに明示的に統合する必要があります。
Springコンテキスト・ファイル内のloggerBean
およびheaderHelperBean
の参照方法の例は、「Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法」を参照してください。
次の例は、headerHelperBean
Beanの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); }
次の例は、instanceHelperBean
Beanの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 (); }
次の例は、loggerBean
Beanの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); }
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/WhatIsMOXy
http://wiki.eclipse.org/EclipseLink/Examples/MOXy
http://wiki.eclipse.org/Category:XML
EJBをSOAコンポジット・アプリケーションに統合する場合は、JavaクラスをXMLデータにマップすることもできます。詳細は、「Enterprise JavaBeansとコンポジット・アプリケーションの統合」を参照してください。
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}
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)がインスタンス化されるため、再起動が必要です。リフレクションの使用により、クラスの検索がシステム・クラス・ローダーに限定されます。システム・クラス・ローダーに変更を加えた場合は、サーバーの再起動が必要になります。
この項では、Springサービス・コンポーネントのエラーをトラブルシューティングする方法を説明します。
SOAコンポジット・アプリケーションがあり、その中でBPELプロセスによってSpringコンテキストが起動されるとします。しかし、起動するための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
ディレクトリにデプロイします。
Oracle SOA Suiteのクイック・スタート・インストールによって、Springエディタを起動するためのSpring拡張ファイルが自動的に組み込まれます。これにより、SOAコンポジット・エディタにSpringサービス・コンポーネントを正常に追加し、「Oracle JDeveloperでのSpringサービス・コンポーネントの作成方法」で説明しているように、「Springの作成」ダイアログを起動できます。
Oracle SOA Suiteの外部でOracle JDeveloperの標準インストールを使用する場合、Springエディタをインストールする必要があります。このためには、Oracle JDeveloperの「ヘルプ」メイン・メニューで「更新の確認」を選択してから、更新センターでSpring拡張ファイルを選択します。これを行わなければ、Springサービス・コンポーネントをSOAコンポジット・エディタに追加し、「Springの作成」ダイアログを起動することが正常にできません。かわりに、図55-22 に示すエラーが出されます。