ヘッダーをスキップ
Oracle Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1(11.1.1)
B56238-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

52 サービス・データ・オブジェクトおよびEnterprise JavaBeansの使用

この章では、サービス・データ・オブジェクト(SDO)パラメータを渡すことによって、Enterprise JavaBeansとSOAコンポジット・アプリケーションがどのように相互作用するかについて説明します。

項目は次のとおりです。

52.1 SDOおよびEnterprise JavaBeansバインディングの概要

SDOを使用すると、物理的にどのようにアクセスされているかに関係なくビジネス・データを修正できます。SOAコンポジット・アプリケーションでSDOを使用する場合、特定のバックエンド・データ・ソースへのアクセス方法についての知識は不要です。つまり、静的または動的なプログラミング・スタイルを使用して、接続および切断されたアクセスを取得できます。

Enterprise JavaBeansは、Javaでエンタープライズ・アプリケーションを作成するためのコンポーネントベースの標準アーキテクチャに適合する、サーバー側ドメイン・オブジェクトです。 これらのオブジェクトは、分散化されたセキュアなトランザクション・コンポーネントになります。

Oracle SOA Suiteインタフェースは、Web Services Description Language(WSDL)ファイルで記述されます。 Enterprise JavaBeansインタフェースは、Javaインタフェースで記述されます。 両者の間の起動は、Oracle SOA SuiteのWSDLインタフェースに対応するEnterprise JavaBeansのJavaインタフェースによって、Oracle SOA Suiteで可能になります。

このインタフェースを介して、Oracle SOA Suiteは次の機能をサポートします。

図52-1に概要を示します。

図52-1 SDOおよびEnterprise JavaBeansバインディングの統合

図52-1の説明は次にあります。
「図52-1 SDOおよびEnterprise JavaBeansバインディングの統合」の説明

52.2 Enterprise JavaBeansアプリケーションの設計

この項では、Enterprise JavaBeansアプリケーション設計手順の高レベルな概要を示します。 詳細は、次のドキュメントを参照してください。

52.2.1 SDOコンパイラを使用したSDOオブジェクトの作成方法

SDOオブジェクトを作成するには、次のいずれかのオプションを選択します。

  • EclipseLinkは、Java開発者用のオープン・ソースのオブジェクト・リレーショナル・マッピング・パッケージです。 EclipseLinkには、Javaオブジェクトをリレーショナル・データベースに格納したり、JavaオブジェクトをXML文書に変換するためのフレームワークが備わっています。

    EclipseLinkを使用してSDOオブジェクトを作成します。 EclipseLinkをインストール、構成および使用してSDOオブジェクトを作成する方法の手順は、次のURLを参照してください。

    http://wiki.eclipse.org/EclipseLink/Installing_and_Configuring_EclipseLink
    
  • Oracle JDeveloperでは、JPAエンティティに対するSDOサービス・インタフェースを作成できます。 この機能は、SOAコンポジット・アプリケーションのOracle Application Development Framework(ADF)サービス・バインディングで使用する場合により適していますが、SOAコンポジット・アプリケーションのEnterprise JavaBeansサービス・バインディングでもこの機能を使用できます。 SDOサービス・インタフェース機能では、必要なWSDLおよびXSDファイルが生成されます。 この機能を使用する場合、Enterprise JavaBeansサービス・バインディングを処理するには、次のタスクを実行する必要があります。

    • 「SOAリソース・ブラウザ」ダイアログでこのWSDLファイルを参照して選択します。このダイアログには、「EJBサービスの作成」ダイアログの「WSDL URL」フィールドからアクセスできます(第52.3項「Oracle JDeveloperでのEnterprise JavaBeansアダプタ・サービスの作成」の説明を参照)。

    • 「BC4Jサービス・ランタイム」ライブラリをSOAプロジェクトに追加します。 このライブラリを追加するには、プロジェクトをダブルクリックし、「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」を選択してライブラリを追加します。 これで、ロジックを設計できる状態になります。

    詳細は、Oracle JDeveloperオンライン・ヘルプのEnterprise JavaBeans/JPA用のSDOに関するトピックを参照してください(SDOサービス・インタフェースの作成方法の手順も含まれています)。

52.2.2 セッションBeanを作成してSDOオブジェクトをインポートする方法

セッションBeanを作成してSDOオブジェクトをインポートする手順は、次のとおりです。

  1. セッションBean作成ウィザードを使用して、単純なセッションBeanを作成します。 このウィザードの使用方法の詳細は、Oracle JDeveloperオンライン・ヘルプのセッションBeanの作成に関するトピックを参照してください。

  2. 「プロジェクト・プロパティ」ダイアログで、SDOオブジェクトをプロジェクトにインポートします。

  3. ロジックおよび必要なインポート・ファイルとライブラリ・ファイルを追加します。 特に、Commonj.sdo.jarファイルをインポートする必要があります。 JARファイルは、「ライブラリとクラスパス」ダイアログで追加できます。 このダイアログにアクセスするには、プロジェクトをダブルクリックし、「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」を選択します。 これで、ロジックを設計できる状態になります。

  4. メソッドをリモート・インタフェースに公開します。

52.2.3 プロファイルおよびEARファイルの作成方法

プロファイルおよびEARファイルを作成する手順は、次のとおりです。

  1. 「プロジェクト・プロパティ」ダイアログで、Enterprise JavaBeansのJARプロファイルを作成します。

  2. 「アプリケーション・プロパティ」ダイアログで、アプリケーション・レベルのEARファイルを作成します。

52.2.4 Enterprise JavaBeans Beanを使用したSDOタイプの定義方法

Enterprise JavaBeans BeanでSDOタイプを定義する必要があります。 例52-1に詳細を示します。


注意:

defineをコールする場所が重要な場合があります。 Remote Method Invocation(RMI)マーシャリングが必要になる前に、適切なヘルパー・コンテキストにタイプを定義する必要があります。 EclipseLink SDO実装では、アプリケーション名またはクラス・ローダーでヘルパー・インスタンスが索引付けされます。Enterprise JavaBeansメソッドを起動するとき、EclipseLink SDOランタイムでアプリケーション名を使用できます。 EclipseLink SDOは、キーとしてアプリケーション名を使用してコンテキストを検索します。 アプリケーション名が参照可能な場合は、タイプを必ず定義してください。 Enterprise JavaBeansの静的ブロックの初期化時に、アプリケーション名は作成されません。 したがって、静的ブロックにdefineを配置すると、デフォルトのアプリケーション名ベースのコンテキストを使用している場合は機能しません。 アプリケーション名を初期化する方法の1つは、weblogic-ejb-jar.xmlファイルを使用して、3つ以上のインスタンスBeanを割り当てることです。

例52-1 SDOタイプの定義

InputStreamReader reader = new InputStreamReader(url.openStream());
StreamSource source = new StreamSource(reader);
List<SDOType> list = ((SDOXSDHelper) XSDHelper.INSTANCE).define(source, null);

weblogic-ejb-jar.xmlファイルは、デプロイメントjarに追加する必要があるディスクリプタ・ファイルです。 weblogic-ejb-jar.xmlファイルは、セッションBeanを作成すると自動的に作成されます。 このファイルは、次のエントリを追加して変更する必要があります。

例52-2 weblogic-ejb-jar.xmlファイル

<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar
 http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">

    <weblogic-enterprise-bean>
    <ejb-name>HelloEJB</ejb-name>
    <stateless-session-descriptor>
      <pool>
        <initial-beans-in-free-pool>2</initial-beans-in-free-pool>
      </pool>
    </stateless-session-descriptor>
  </weblogic-enterprise-bean>

    </weblogic-ejb-jar>

図52-2に、SDOロジックが定義されているセッションBeanのコード例を示します。

図52-2 SDOロジックが定義されているセッションBean

図52-2の説明は次にあります。
「図52-2 SDOロジックが定義されているセッションBean」の説明

52.2.5 Webサービス注釈の使用方法

WSDLファイルを生成するには、Enterprise JavaBeansインタフェースで次のWebサービス注釈を使用する必要があります。 これらの注釈の使用については、『JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0』で説明されています。 詳細は、次のURLを参照してください。

http://www.jcp.org/en/jsr/detail?id=224

また、Enterprise JavaBeansバインディング・レイヤーで現在サポートされているのは、ドキュメント/リテラルWSDLのみです。

表52-1で、使用する注釈について説明します。

表52-1 注釈

名前 説明

@javax.jws.WebResult;

@javax.jws.WebParam;

Webサービス・メッセージ・パートおよびXML要素に対する個々のパラメータのマッピングをカスタマイズします。 正規化されたメッセージ・ペイロードからの適切なXML要素にSDOパラメータをマップするために、両方の注釈が使用されます。

@javax.jws.Oneway;

メソッドを、入力メッセージのみで出力メッセージのない一方向のWebサービス操作として指定します。 この場合、Enterprise JavaBeansバインディング・コンポーネントは、リプライを想定しません。

@javax.xml.ws.RequestWrapper;

@javax.xml.ws.ResponseWrapper;

Enterprise JavaBeansバインディング・コンポーネントに対して、デシリアライズ・オブジェクトをアンラップするかどうか、またはシリアル化の前にラッパーを作成する必要があるかどうかを指示します。

Enterprise JavaBeansインタフェースは、既存のWSDLから生成するか、または他の手段で取得できます。 WSDLが存在しない場合は生成できます。

@javax.xml.ws.WebFault;

WSDLフォルトをJava例外にマップします。 この注釈は、WSDLフォルト・メッセージで参照するグローバル要素から生成される、JAXBタイプのマーシャリング時に使用されるフォルト要素名を取得します。

@oracle.webservices.PortableWebService

WSDLに使用するtargetNamespaceおよびserviceNameを指定します。次に例を示します。

@PortableWebService(
targetNamespace = "http://hello.demo.oracle/",
serviceName = "HelloService")

serviceNameは、WSDLファイル名として使用されます。 注釈で指定しない場合は、SEIクラス名がかわりに使用されます。

適切なメソッド・パラメータ注釈の追加

メッセージ要素およびタイプのWSDLへのマップ方法を制御するために追加します。 たとえば、インタフェースがdoc/lit/bareスタイルにある場合は、メソッドに次の注釈を追加します。

@WebMethod
@SOAPBinding(parameterStyle =
SOAPBinding.ParameterStyle.BARE)

@SDODatabinding

スキーマを生成するかわりに既存のスキーマを使用するために、インタフェース・クラスに追加します。次に例を示します。

@SDODatabinding(schemaLocation = "etc/HelloService.xsd")

例52-3に、注釈を使用したEnterprise JavaBeansインタフェースの例を示します。

例52-3 注釈を使用したEnterprise JavaBeansインタフェース

@Remote
@PortableWebService(targetNamespace = "http://www.example.org/customer-example",
 serviceName = "CustomerSessionEJBService")
@SDODatabinding(schemaLocation = "customer.xsd")
public interface CustomerSessionEJB {
     @WebMethod(operationName="createCustomer")
   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(targetNamespace = "http://www.example.org/customer-example",
 partName = "parameters", name = "customer")
   CustomerType createCustomer();
     @WebMethod(operationName="addPhoneNumber")
   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(targetNamespace = "http://www.example.org/customer-example",
 partName = "parameters", name = "customer")
   CustomerType addPhoneNumber(@WebParam(targetNamespace =
 "http://www.example.org/customer-example", partName = "parameters", name =
 "phone-number")PhoneNumber phNumber);
}

52.2.6 Enterprise JavaBeans EARファイルのデプロイ方法

Oracle JDeveloperからEARファイルをデプロイする手順は、次のとおりです。

  1. アプリケーション名の右側にあるアプリケーション・コンテキスト・メニューを選択します。

  2. 「デプロイ」を選択し、EARファイルを以前に作成したアプリケーション・サーバー接続にデプロイします。

52.3 Oracle JDeveloperでのEnterprise JavaBeansアダプタ・サービスの作成

この項では、Oracle JDeveloperでEnterprise JavaBeansアダプタ参照またはEnterprise JavaBeansアダプタ・サービスを作成する方法について説明します。 このアダプタ・サービスを使用すると、Enterprise JavaBeansアプリケーションでOracle SOA Suiteと通信できるようになり、Oracle SOA SuiteでリモートのEnterprise JavaBeansと通信できるようになります。

52.3.1 SOAコンポジット・アプリケーションからのSDOベースのEnterprise JavaBeansの起動

SOAコンポジット・アプリケーションのEnterprise JavaBeansアダプタ参照から、SDOパラメータを使用してEnterprise JavaBeansを起動できます。

52.3.1.1 SOAコンポジット・アプリケーションからのSDOベースのEnterprise JavaBeansの起動方法

SOAコンポジット・アプリケーションからSDOベースのEnterprise JavaBeansを起動する手順は、次のとおりです。

  1. EJBアダプタ・サービス・アイコンを「外部参照」スイムレーンにドラッグします。

    図52-3に示すように、「EJBサービスの作成」ダイアログが表示されます。

    図52-3 「外部参照」スイムレーンの「EJBサービスの作成」

    図52-3の説明は次にあります。
    「図52-3 「外部参照」スイムレーンの「EJBサービスの作成」」の説明

  2. 表52-2に記載されている詳細を入力します。

    表52-2 「EJBサービスの作成」ダイアログ

    フィールド

    名前

    デフォルトの値をそのまま使用するか、別の名前を入力します。

    タイプ

    このアイコンを「外部参照」スイムレーンにドラッグした場合は、「参照」と表示されます。

    JNDI名

    Enterprise JavaBeansのJNDI名を入力します。

    Jarファイル

    「検索」アイコンをクリックして、前述の項で作成したEnterprise JavaBeans JARファイルを選択します。 「SOAリソース・ブラウザ」ダイアログに、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリにある.jarファイルが検索され、表示されます。 JARファイルには、インタフェース・クラスおよびサポート・クラスが含まれています。

    注意: 現在のプロジェクト外部のJARファイルを選択した場合は、現在のプロジェクトのSCA-INF/libディレクトリにJARファイルのコピーが作成されます。 プロンプトが表示された場合は、「OK」をクリックしてください。

    JAVAインタフェース

    以前に作成したEnterprise JavaBeansインタフェースの完全修飾Javaクラス名を入力します。 このクラスは、選択したJARファイルに存在する必要があります。 JARファイルを指定しない場合、クラスは現在のプロジェクト・ディレクトリの/SCA-INF/classesサブディレクトリ内にあるとみなされます。

    WSDL URL

    注意: WSDLファイルの生成前に、必ず、第52.2.5項「Webサービス注釈の使用方法」の説明に従ってEnterprise JavaBeansインタフェースの注釈を作成しておいてください。

    右側にある2番目のアイコンをクリックして、Enterprise JavaBeansインタフェースを表すWSDLファイルを生成します。

    第52.2.1項「SDOコンパイラを使用したSDOオブジェクトの作成方法」の説明に従ってOracle JDeveloperでSDOオブジェクトを作成した場合は、このオプションで自動的に生成されたWSDLファイルを必ず選択してください。

    ポート・タイプ

    ポート・タイプを選択します。

    コールバック・ポート・タイプ

    コールバック・ポート・タイプを選択します(非同期サービスの場合)。


  3. 「OK」をクリックします。

52.3.2 SDOパラメータを使用したEnterprise JavaBeansからのSOAコンポジット・アプリケーションの起動

SDOパラメータを使用して、Enterprise JavaBeansからSOAコンポジット・アプリケーション内のEnterprise JavaBeansアダプタ・サービスを起動できます。

52.3.2.1 SDOパラメータを使用したEnterprise JavaBeansからのSOAコンポジット・アプリケーションの起動方法

SDOパラメータを使用してEnterprise JavaBeansからSOAコンポジット・アプリケーションを起動する手順は、次のとおりです。

  1. EJBアダプタ・サービス・アイコンを「公開されたサービス」スイムレーンにドラッグします。

    図52-4に示すように、「EJBサービスの作成」ダイアログが表示されます。

    図52-4 「公開されたサービス」スイムレーンの「EJBサービスの作成」

    図52-4の説明は次にあります。
    「図52-4 「公開されたサービス」スイムレーンの「EJBサービスの作成」」の説明

  2. 表52-3に記載されている詳細を入力します。

    表52-3 「公開されたサービス」スイムレーンの「EJBサービスの作成」

    フィールド

    名前

    デフォルトの値をそのまま使用するか、別の名前を入力します。

    タイプ

    このアイコンを「公開されたサービス」スイムレーンにドラッグした場合は、「サービス」と表示されます。

    サービスID

    デフォルトの値をそのまま使用するか、別の名前を入力します。 サービスIDは、Enterprise JavaBeansアプリケーションからコンポジット・サービス・エントリを一意に識別するためのトークンとして使用されます。 同じコンポジットの複数のバージョンがデプロイされている場合は、起動時にデフォルトのバージョンのみが使用されます。 別のコンポジットで同じサービスIDを使用しようとすると、デプロイメント時にエラーが発生します。

    Jarファイル

    「検索」アイコンをクリックして、前述の項で作成したEnterprise JavaBeans JARファイルを選択します。 「SOAリソース・ブラウザ」ダイアログに、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリにある.jarファイルが検索され、表示されます。 JARファイルには、インタフェース・クラスおよびサポート・クラスが含まれています。

    注意: 現在のプロジェクト外部のJARファイルを選択した場合は、現在のプロジェクトのSCA-INF/libディレクトリにJARファイルのコピーが作成されます。 プロンプトが表示された場合は、「OK」をクリックしてください。

    JAVAインタフェース

    以前に作成したEnterprise JavaBeansインタフェースの完全修飾Javaクラス名を入力します。 このクラスは、選択したJARファイルに存在する必要があります。 JARファイルを指定しない場合、クラスは現在のプロジェクト・ディレクトリの/SCA-INF/classesサブディレクトリ内にあるとみなされます。

    WSDL URL

    注意: WSDLファイルの生成前に、必ず、第52.2.5項「Webサービス注釈の使用方法」の説明に従ってEnterprise JavaBeansインタフェースの注釈を作成しておいてください。

    右側にある2番目のアイコンをクリックして、Enterprise JavaBeansインタフェースを表すWSDLファイルを生成します。

    第52.2.1項「SDOコンパイラを使用したSDOオブジェクトの作成方法」の説明に従ってOracle JDeveloperでSDOオブジェクトを作成した場合は、このオプションで自動的に生成されたWSDLファイルを必ず選択してください。

    ポート・タイプ

    ポート・タイプを選択します。

    コールバック・ポート・タイプ

    コールバック・ポート・タイプを選択します(非同期サービスの場合)。


  3. 「OK」をクリックします。

52.4 Oracle SOA Suiteを起動するEnterprise JavaBeansクライアントの設計

Enterprise JavaBeansからSDO - Enterprise JavaBeansサービスを起動するには、クライアント・ライブラリを使用する必要があります。 Enterprise JavaBeansクライアントを設計するには、次のガイドラインに従ってください。

例52-4に例を示します。

例52-4 Enterprise JavaBeansクライアント・コード

Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY,
 "weblogic.jndi.WLInitialContextFactory");
        props.put(Context.PROVIDER_URL, "t3://" + HOSTNAME + ":" + PORT);
        InitialContext ctx = new InitialContext(props);
        SOAServiceInvokerBean invoker =
                (SOAServiceInvokerBean)
 ctx.lookup("SOAServiceInvokerBean#oracle.integration.platform.blocks.sdox.ejb.api.
SOAServiceInvokerBean");

        //--  Create a SOAServiceFactory instance
        SOAServiceFactory serviceFactory = SOAServiceFactory.newInstance(invoker);

        //--  Get a dynamice proxy that is essentially a remote reference
        HelloInterface ejbRemote =
 serviceFactory.createService("MyTestEJBService", HelloInterface.class);

        //--  Invoke methods
        Item item = (Item) DataFactory.INSTANCE.create(Item.class);
        item.setNumber(new BigInteger("32"));
        SayHello sayHello = (SayHello)
 DataFactory.INSTANCE.create(SayHello.class);
        sayHello.setItem(item);

        SayHelloResponse response = ejbRemote.sayHello(sayHello);
        Item reply = response.getResult();

52.5 Enterprise JavaBeansロールの指定

Java EEアプリケーションからSOAコンポジット・アプリケーションを起動するために必要なロール名を指定するには、ロール名をEnterprise JavaBeansアダプタ・サービス構成に追加します。 Enterprise JavaBeansアダプタ・サービスは、コール元のプリンシパルにセキュリティ・ロールがあるかどうかをチェックします。

<service name="EJBService" ui:wsdlLocation="BPELEJBProcess.wsdl">
    <interface.wsdl
interface="http://xmlns.oracle.com/EJBApplication/EJBProject/BPELEJBProcess#wsdl.int
erface(BPELProcess1)"callbackInterface="http://xmlns.oracle.com/EJBApplication/
EJBProject/BPELEJBProcess#
wsdl.interface(BPELEJBProcessCallback)"/>
<property name="rolesAllowed">Superuser, Admin</property>
    <binding.ejb javaInterface="java.class.ejb.com" serviceId="EJBService"
                 jarLocation="soaejb.jar"/>
</service>

52.6 JNDIアクセスの構成

この項では、JNDIアクセスを構成する2つの方法について説明します。

52.6.1 外部JNDIの作成方法

JNDIアクセスを構成するには、次のガイドラインに従ってください。

  • 外部JNDIツリーをローカル・サーバー・インスタンスにリンクするように外部JNDIプロバイダを構成して、ローカルの場合と同様にオブジェクトにアクセスできます。 『Oracle Fusion Middleware Programming JNDI for Oracle WebLogic Server』を参照してください。

  • また、例52-5に示すように、Enterprise JavaBeansアダプタ参照のプロパティとして、JNDI環境変数を指定することもできます。 Enterprise JavaBeansバインディング・コンポーネントを使用すると、独自のマップを作成するか、またはデフォルトのEJBBCバインディング・コンポーネント・マップを使用できます。 EJBBCを使用する場合、mapプロパティはオプションであることに注意してください。 セキュリティ上の理由から、JNDIセキュリティ資格証明をCSFストアに格納し、例52-5に示すように参照する必要があります。

    例52-5 Enterprise JavaBeansアダプタ参照の環境変数

    <property name=
    "java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</property>
    <property name="java.naming.provider.url">t3://host:7001</property>
    <property name="oracle.jps.credstore.map">default</property>
    <property name="oracle.jps.credstore.key">weblogic</property>
    

セキュリティ資格証明は、資格証明ストア・フレームワークに格納することもできます。 詳細は、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。

52.6.2 JNDIルックアップのカスタムCSFマップの作成方法

デフォルトのEnterprise JavaBeans BC CSFマップを使用するかわりに、独自の資格証明ストア・フレームワーク(CSF)マップを作成する場合は、Domain_Home/config/fmwconfig/system-jazn.data.xmlファイルを変更して、fabric-runtime.jar権限付与のエントリに次の権限を追加する必要があります。

<class>oracle.security.jps.service.credstore.CredentialAccessPermission</class>
   <name>>context=SYSTEM,mapName=*,keyName=*</name>
   <actions>*</actions>
</permission>

処理後にOracle WebLogic Serverを再起動する必要があります。

CSFの詳細は、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。