この章では、サービス・データ・オブジェクト(SDO)パラメータを渡すことによって、Enterprise JavaBeansとSOAコンポジット・アプリケーションがどのように相互作用するかについて説明します。
項目は次のとおりです。
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は次の機能をサポートします。
Enterprise JavaBeansアダプタ参照を介した、SDOパラメータによるEnterprise JavaBeansの起動。 このシナリオでは、SOAコンポジット・アプリケーションが外部のEnterprise JavaBeansアプリケーションにSDOパラメータを渡します。
Enterprise JavaBeansを介した、SDOパラメータによるEnterprise JavaBeansアダプタ・サービスの起動。 このシナリオでは、Enterprise JavaBeansアプリケーションがSOAコンポジット・アプリケーションにSDOパラメータを渡します。
図52-1に概要を示します。
この項では、Enterprise JavaBeansアプリケーション設計手順の高レベルな概要を示します。 詳細は、次のドキュメントを参照してください。
『Oracle Fusion Middleware Programming Enterprise JavaBeans, Version 3.0 for Oracle WebLogic Server』
『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』
Oracle JDeveloperオンライン・ヘルプ目次にある次のトピック
Enterprise JavaBeans
Enterprise JavaBeans/JPA用のSDO
ヘルプにアクセスするには、Oracle JDeveloperで「ヘルプ」→「目次」の順に選択します。
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サービス・インタフェースの作成方法の手順も含まれています)。
セッションBeanを作成してSDOオブジェクトをインポートする手順は、次のとおりです。
セッションBean作成ウィザードを使用して、単純なセッションBeanを作成します。 このウィザードの使用方法の詳細は、Oracle JDeveloperオンライン・ヘルプのセッションBeanの作成に関するトピックを参照してください。
「プロジェクト・プロパティ」ダイアログで、SDOオブジェクトをプロジェクトにインポートします。
ロジックおよび必要なインポート・ファイルとライブラリ・ファイルを追加します。 特に、Commonj.sdo.jar
ファイルをインポートする必要があります。 JARファイルは、「ライブラリとクラスパス」ダイアログで追加できます。 このダイアログにアクセスするには、プロジェクトをダブルクリックし、「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」を選択します。 これで、ロジックを設計できる状態になります。
メソッドをリモート・インタフェースに公開します。
プロファイルおよびEARファイルを作成する手順は、次のとおりです。
「プロジェクト・プロパティ」ダイアログで、Enterprise JavaBeansのJARプロファイルを作成します。
「アプリケーション・プロパティ」ダイアログで、アプリケーション・レベルのEARファイルを作成します。
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のコード例を示します。
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 注釈
名前 | 説明 |
---|---|
|
Webサービス・メッセージ・パートおよびXML要素に対する個々のパラメータのマッピングをカスタマイズします。 正規化されたメッセージ・ペイロードからの適切なXML要素にSDOパラメータをマップするために、両方の注釈が使用されます。 |
|
メソッドを、入力メッセージのみで出力メッセージのない一方向のWebサービス操作として指定します。 この場合、Enterprise JavaBeansバインディング・コンポーネントは、リプライを想定しません。 |
|
Enterprise JavaBeansバインディング・コンポーネントに対して、デシリアライズ・オブジェクトをアンラップするかどうか、またはシリアル化の前にラッパーを作成する必要があるかどうかを指示します。 Enterprise JavaBeansインタフェースは、既存のWSDLから生成するか、または他の手段で取得できます。 WSDLが存在しない場合は生成できます。 |
|
WSDLフォルトをJava例外にマップします。 この注釈は、WSDLフォルト・メッセージで参照するグローバル要素から生成される、JAXBタイプのマーシャリング時に使用されるフォルト要素名を取得します。 |
|
WSDLに使用する @PortableWebService( targetNamespace = "http://hello.demo.oracle/", serviceName = "HelloService")
|
適切なメソッド・パラメータ注釈の追加 |
メッセージ要素およびタイプのWSDLへのマップ方法を制御するために追加します。 たとえば、インタフェースが @WebMethod @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) |
|
スキーマを生成するかわりに既存のスキーマを使用するために、インタフェース・クラスに追加します。次に例を示します。 @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); }
この項では、Oracle JDeveloperでEnterprise JavaBeansアダプタ参照またはEnterprise JavaBeansアダプタ・サービスを作成する方法について説明します。 このアダプタ・サービスを使用すると、Enterprise JavaBeansアプリケーションでOracle SOA Suiteと通信できるようになり、Oracle SOA SuiteでリモートのEnterprise JavaBeansと通信できるようになります。
SOAコンポジット・アプリケーションのEnterprise JavaBeansアダプタ参照から、SDOパラメータを使用してEnterprise JavaBeansを起動できます。
SOAコンポジット・アプリケーションからSDOベースのEnterprise JavaBeansを起動する手順は、次のとおりです。
EJBアダプタ・サービス・アイコンを「外部参照」スイムレーンにドラッグします。
図52-3に示すように、「EJBサービスの作成」ダイアログが表示されます。
表52-2に記載されている詳細を入力します。
表52-2 「EJBサービスの作成」ダイアログ
フィールド | 値 |
---|---|
名前 |
デフォルトの値をそのまま使用するか、別の名前を入力します。 |
タイプ |
このアイコンを「外部参照」スイムレーンにドラッグした場合は、「参照」と表示されます。 |
JNDI名 |
Enterprise JavaBeansのJNDI名を入力します。 |
Jarファイル |
「検索」アイコンをクリックして、前述の項で作成したEnterprise JavaBeans JARファイルを選択します。 「SOAリソース・ブラウザ」ダイアログに、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリにある 注意: 現在のプロジェクト外部の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ファイルを必ず選択してください。 |
ポート・タイプ |
ポート・タイプを選択します。 |
コールバック・ポート・タイプ |
コールバック・ポート・タイプを選択します(非同期サービスの場合)。 |
「OK」をクリックします。
SDOパラメータを使用して、Enterprise JavaBeansからSOAコンポジット・アプリケーション内のEnterprise JavaBeansアダプタ・サービスを起動できます。
SDOパラメータを使用してEnterprise JavaBeansからSOAコンポジット・アプリケーションを起動する手順は、次のとおりです。
EJBアダプタ・サービス・アイコンを「公開されたサービス」スイムレーンにドラッグします。
図52-4に示すように、「EJBサービスの作成」ダイアログが表示されます。
表52-3に記載されている詳細を入力します。
表52-3 「公開されたサービス」スイムレーンの「EJBサービスの作成」
フィールド | 値 |
---|---|
名前 |
デフォルトの値をそのまま使用するか、別の名前を入力します。 |
タイプ |
このアイコンを「公開されたサービス」スイムレーンにドラッグした場合は、「サービス」と表示されます。 |
サービスID |
デフォルトの値をそのまま使用するか、別の名前を入力します。 サービスIDは、Enterprise JavaBeansアプリケーションからコンポジット・サービス・エントリを一意に識別するためのトークンとして使用されます。 同じコンポジットの複数のバージョンがデプロイされている場合は、起動時にデフォルトのバージョンのみが使用されます。 別のコンポジットで同じサービスIDを使用しようとすると、デプロイメント時にエラーが発生します。 |
Jarファイル |
「検索」アイコンをクリックして、前述の項で作成したEnterprise JavaBeans JARファイルを選択します。 「SOAリソース・ブラウザ」ダイアログに、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリにある 注意: 現在のプロジェクト外部の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ファイルを必ず選択してください。 |
ポート・タイプ |
ポート・タイプを選択します。 |
コールバック・ポート・タイプ |
コールバック・ポート・タイプを選択します(非同期サービスの場合)。 |
「OK」をクリックします。
Enterprise JavaBeansからSDO - Enterprise JavaBeansサービスを起動するには、クライアント・ライブラリを使用する必要があります。 Enterprise JavaBeansクライアントを設計するには、次のガイドラインに従ってください。
JNDIツリーからSOAServiceInvokerBean
を検索します。
SOAServiceFactory
のインスタンスを取得し、ファクトリにEnterprise JavaBeansサービス・インタフェースのプロキシを返すように要求します。
クライアント側のEnterprise JavaBeans起動ライブラリ(Oracle JDeveloperホーム・ディレクトリまたはOracle WebLogic Serverにあるfabric-ejbClient.jar
またはfabric-runtime.jar
ファイル)を、Enterprise JavaBeansクライアント・アプリケーションに組み込むことができます。 たとえば、fabric-runtime.jar
ファイルをJDev_Home
\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1
ディレクトリに格納できます。
Enterprise JavaBeansアプリケーションがOracle SOA Suiteと異なるJVMで実行されている場合、Enterprise JavaBeansアプリケーションは、ejbClient
ライブラリを参照する必要があります。
例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();
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>
この項では、JNDIアクセスを構成する2つの方法について説明します。
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セキュリティ・ガイド』を参照してください。
デフォルトの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を再起動する必要があります。