Java開発者向けのSOA (Oracle SOA Suite 11g R1 PS2新機能)

This blog entry is a Japanese translation of the following blog entry:

Oracle SOA Suite 11g R1 Patch Set 2 (PS2) では、特にJava開発と、WSDL/XSD (XML Schema) やXMLを日々使うスキルを持たないが、モニタリングやバージョニングのプラットフォームを使いたい開発者に焦点を当てました。

  • と同様の「一級市民」としての、 のサポート

<service name="externalpartnersupplier_client_ep">
 <interface.wsdl interface=http://partnersupplier.com/#wsdl.interface(ExternalPartnerSupplier)/>
</service>

これの代わりに:

<service name="IInternalPartnerSupplier">
 <interface.java interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>

これは、(多少) 明らかに、EJBや ( を介して) 公開されたSpring Beanにワイヤ (配線) したい場合や、Javaフレンドリにサービスを公開したい場合に、WSDLを作成する必要がないことを意味しています。

  • (implementation.bpel、implementation.mediator、implemetation.rule などと同様の) コンポーネント実装としての、Springの完全なサポート
    • を介して、(グローバルの) 参照 (コンポジット参照) をBeanに注入可能です。
    • リクエスト/コールバックMEP (メッセージ交換パターン) (ほぼ、2つのportTypeのモデル) と、Spring実装モデル (Beanと参照) の間のマッピング
      • ComponentType

<service name="AsyncInteractions.AsyncInteractions">
 <interface.java interface="com.example.AsyncInteractions"
  callbackInterface="com.example.AsyncInteractionsCallback"/>
</service>

      • Spring Beanコンテキスト

<!-- 上記のinterfaceへのサービスのマッピング -->
<sca:service type="com.example.AsyncInteractions"
 name="AsyncInteractions.AsyncInteractions" target="asyncBeanImpl"/>

<!-- Spring Bean -->
<bean class="com.example.impl.AsyncSpringComponentImpl" id="asyncBeanImpl">
 <property name="callback" ref="AsyncInteractions.AsyncInteractionsCallback"/>
</bean>

<!-- 上記のcallbackInterfaceへの参照のマッピング -->
<sca:reference type="com.example.AsyncInteractionsCallback"
 name="AsyncInteractions.AsyncInteractionsCallback"/>

public class AsyncSpringComponentImpl implements AsyncInteractions {

 // Springによって注入される - 参照にマッピングされる
 public AsyncInteractionsCallback mCallback = null;

 // インタフェースの実装メソッド
 public void process(String input) {
  // (参照でワイヤされた) メンバーを呼び出す
  mCallback.processResponse( ("こんにちは、" + input) );
 }
}

  • プラットフォーム全体での、Javaオブジェクト (POJO) のネイティブ・サポート

// SDOのサポート
void setSdoPayload(java.util.Map pPayloadMap, oracle.fabric.common.SDOMessageMetadata pSDOMessageMetadata);
java.util.Map getSdoPayload();

// Javaオブジェクトのサポート
void setJavaPayload(java.util.Map pPayloadMap);
java.util.Map getJavaPayload();

// XMLペイロードのサポート
void setPayload(java.util.Map pPayloadMap);
java.util.Map getPayload();

    • 各サービス・エンジンはペイロード型への依存性を持つ可能性があります (たとえば、BPELはDOM XMLをベースにしています)。「基礎をなす」メッセージがPOJOをベースにしていても、「getPayload」は呼び出されると、ターゲット・フォーマットへの変換をその場で行います。

<binding name="EJBBinding" type="tns:CreditRatingService">
 <ejb:binding/>

 <!-- 型マップを作成 -->
 <format:typeMapping encoding="Java" style="Java">
 <format:typeMap typeName="xsd:string" formatType="java.lang.String" />
 <format:typeMap typeName="xsd:integer" formatType="int" />
 <format:typeMap typeName="xsd:boolean" formatType="boolean" />
 </format:typeMapping>

 <operation name="validateSSN">
  <!-- 型順序、メソッド、パートを含む、EJBマッピングを定義 -->
  <ejb:operation methodName="validateSSN" parameterOrder="ssn"
   interface="remote" returnPart="status" />
  <input name="ValidateSSNRequest"/>
  <output name="ValidateSSNResponse"/>
 </operation>
</binding>

    • 11g R1 PS2では、interface.java をベースにした本格的なインバウンド/アウトバウンドEJBバインディングを追加しました。

<reference name="IExternalPartnerSupplierService">
 <interface.java interface="externalps.IExternalPartnerSupplierService"/>
 <binding.ejb uri="ExternalLegacyPartnerSupplierEjb#com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"
  javaInterface="externalps.IExternalPartnerSupplierService" ejb-version="EJB3" />
</reference>

そのため、XML-Java間の直列化に関する苦労は、もはやありません。必要な場合には、あなたの代わりにプラットフォームがそれを行ってくれます。

  • コンポジット・サービスの呼び出し
    • ejb/> を介したコンポジット・サービス
      • (interface.java をベースにした)コンポジット・サービスを、EJBとして公開できます。そして、リモート・プロキシを作成するために、標準Java EEのツールやAPIを使用できます。
    • ロケーターAPI
      • コンポジットやそれらの状態を問い合わせたり、管理を行ったりするために、、ロケーターAPIを使用できます。PS2では、(管理のための) MBean APIと (ロケーターに関連する) クエリAPIを集約しています。これで、10.1.3.x (Oracle SOA Suite 10g R3) で提供していたAPIと同等になります。
      • ハイ・パフォーマンスのコンポジット・サービス呼び出し (および、サービスからのコールバック) を可能にするために、ダイレクト・バインディングと呼ばれる新しいAPIを追加しました。さらなる情報と使い方を示すサンプルは、ここにあります。