ヘッダーをスキップ

Oracle Application Server Web Services開発者ガイド
10g(10.1.3.1.0)

B31868-01
目次
目次
索引
索引

戻る 次へ

8 EJBを使用したWebサービスのアセンブル

この章では、WebServicesAssemblerツールを使用してバージョン2.1のEnterprise JavaBeans(EJB)をWebサービスとして公開する方法について説明します。

この章の内容は、次のとおりです。

WebサービスとしてのEJBの公開

WebServicesAssemblerを使用して、J2EE 1.4標準に準拠するWebサービスとしてバージョン2.1のEJBを公開できます。EJBの多くは、中間層のビジネス機能をカプセル化するために記述されます。エンタープライズ・アプリケーションでEJBを使用する場合、EJBをWebサービスとして公開できます。


注意

WebServicesAssemblerを使用して、バージョン3.0のEJBをWebサービスとして公開することはできません。 


EJBコンポーネントは設計上、分散コンピューティング用であり、Webサービスとして公開する場合に適しています。EJB仕様では、宣言的トランザクション、スレッド管理およびロール・ベースのセキュリティがサポートされています。これらの利点は、EJBコンポーネントをWebサービスとして使用する場合に活用できます。Webサービスとして公開したEJBは、従来のRMI EJBクライアントやSOAPプロトコルからもアクセスできます。J2EE 1.4では、Webサービスとして公開できるのはステートレス・セッションBeanのみです。

設計上、SOAPおよびWebサービスはステートレスです。このため、ステートレス・セッションBeanは、Webサービスを公開する媒体として理想的です。ステートレス・セッションBeanは、与信の確認、銀行口座への請求、または発注に使用できます。その他のリモート・アプリケーションから使用されるビジネス機能を実装するセッションBeanは、Webサービスとして公開する場合に最適です。

JAX-RPCを使用したEJB Webサービスを記述するには、サービスを実装するEJBを記述し、そのインタフェースを用意する必要があります。EJBには、クライアントがWebサービス・リクエストを行うときに呼び出すことができるビジネス・ロジックを含める必要があります。

EJB Webサービスは、Java、.NETまたはその他のプログラミング言語で記述されたクライアントから呼び出せる点で、その他のWebサービスと同じです。EJB Webサービスのクライアントは、静的スタブ、動的プロキシまたはDynamic Invocation Interfaces(DII)を利用できます。

EJBをWebサービスとして公開するための一般的な手順は、次のとおりです。

  1. ステートレスEJBコンポーネントのサービス・エンドポイント・インタフェースを作成します。

    この手順は開発者が実行します。

  2. サービスのアーチファクトをアセンブルします。これを行うには、WSDLファイルおよびマッピング・ファイルを生成し、アプリケーションをデプロイ可能なアーカイブにパッケージ化する必要があります。

    この手順はWebServicesAssemblerを使用して実行できます。

    関連項目

    これらの各ステップの詳細は、「EJBからWebサービスをアセンブルする手順」を参照してください。 

バージョン2.0のEJBの操作

この章では、バージョン2.1のEJBをWebサービスとして公開することに焦点を当てていますが、バージョン2.0のEJBも公開可能です。バージョン2.1のEJBを操作するためのOracle Application Server Web Servicesのすべての機能は、バージョン2.0のEJBでも使用できます。OracleAS Web ServicesおよびWebServicesAssemblerは、バージョン2.0のEJBを検出し、それらが正しく処理されているかどうかを確認できます。EJBのリモート・インタフェース・メソッドとして、Webサービスとして公開するメソッドを定義する必要があります。

関連項目

J2EE WebサービスでのEJBに対する要件の詳細は、「Webサービス用のEJBを記述する方法」を参照してください。 

バージョン3.0のEJBの操作

WebServicesAssemblerツールを使用して、バージョン3.0のEJBをWebサービスとして公開することはできません。ただし、OracleAS Web ServicesがサポートするJ2SE 5.0 Webサービス注釈を使用してこれらのEJBを公開することはできます。

関連項目

注釈を使用してバージョン3.0のEJBをWebサービスとして公開する方法の詳細は、第11章「注釈を使用したWebサービスのアセンブル」および「バージョン3.0のEJBからWebサービスをアセンブルするために注釈を使用する手順」を参照してください。 

EJBでのWebサービスのアセンブル方法

この項の内容は、次のとおりです。

前提条件

開始する前に、次のファイルと情報を用意してください。

EJBからWebサービスをアセンブルする手順

次の手順では、WebServicesAssemblerを使用してセッションBeanをWebサービスとして公開する方法について説明します。

  1. Webサービスとして公開するEJBとそのサービス・エンドポイント・インタフェースを記述します。

  2. ejb-jar.xmlデプロイメント・ディスクリプタを調べます。

    <service-endpoint>要素がファイルにない場合、この要素とその値を入力します。この要素は、このWebサービスのサービス・エンドポイント・インタフェースを識別します。次のejb-jar.xmlのフラグメントでは、<service-endpoint>要素は太字で強調表示されています。

    <enterprise-beans>
        <session>
            <ejb-name>HelloServiceBean</ejb-name>
            <service-endpoint>oracle.demo.ejb.HelloServiceIntf</service-endpoint>
            <ejb-class>oracle.demo.ejb.HelloserviceBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
        </session>
    </enterprise-beans> 
    
  3. ejbAssembleコマンドを使用してWebServicesAssemblerツールを実行し、サービスのアーチファクトを生成します。次に例を示します。

    コマンドライン:

    java -jar wsa.jar -ejbAssemble 
                   -appName helloServices-ejb 
                   -ear dist/helloServices-ejb.ear 
                   -output build 
                   -targetNamespace http://oracle.j2ee.ws/ejb/Hello 
                   -typeNamespace http://oracle.j2ee.ws/ejb/Hello/types 
                   -input dist/HelloServiceejb.jar 
                   -ejbName HelloServiceBean  
    

    Antタスク:

    <oracle:ejbAssemble appName="ejbApp" 
              targetNamespace="http://oracle.j2ee.ws/ejb/Hello"
              ear="dist/ejbApp.ear"
              output="build"
              typeNamespace="http://oracle.j2ee.ws/ejb/Hello/types"
              input dist/HelloServiceejb.jar
              ejbName HelloServiceBean
    />
    

    このコマンドおよびAntタスクの説明:

    • ejbAssemble: EJBをWebサービスとして公開できるEARまたはEJB JARを作成します。バージョン2.1 EJBの、有効なJARを入力として指定する必要があります。システムでは、WSDLと固有のoracle-webservices.xmlデプロイメント・ディスクリプタが作成されます。「ejbAssemble」を参照してください。

    • appName: アプリケーションの名前を指定します。この名前は、通常contexturiなどの他の引数のベース値として使用されます。「appName」を参照してください。

    • ear: 生成されるEARファイルの名前と位置を指定します。「ear」を参照してください。

    • output: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。

    • targetNamespace: 生成されるWSDLで使用するターゲット名前空間を指定します。この値は、仕様に準拠しているHTTP URL、準拠していないHTTP URL、またはURIであってもかまいません。「targetNamespace」を参照してください。

    • typeNamespace: 生成されるWSDL内のスキーマ型に使用する型名前空間を指定します。指定した名前は必ず使用され、破棄されません。「typeNamespace」を参照してください。

    • input: WEB-INF/classesにコピーされるクラスを格納するJARまたはディレクトリを指定します。この引数は、WebServicesAssemblerによって使用されるクラスパスに追加されます。「input」を参照してください。

    • ejbName: Webサービスとして公開するEJBの名前を指定します。これはクラス名ではありません。ejb-jar.xmlファイルの<ejb-name>タグに指定されたEJBの一意の名前です。「ejbName」を参照してください。

    このコマンドは、WSDLファイルおよびマッピング・ファイルを生成し、アプリケーションをデプロイ可能なアーカイブdist/helloServices-ejb.earにパッケージ化することにより、EJB 2.1 Webサービスをアセンブルします。このアーカイブには、helloService-ejb.jarファイルが含まれます。このファイルには、EJB実装クラス、生成されたWSDLファイルおよびマッピング・ファイル、標準Webサービス・ディスクリプタ・ファイルwebservices.xmlおよびOracle固有のデプロイメント・ディスクリプタ・ファイルoracle-webservices.xmlが格納されています。ejbAssembleコマンドの詳細は、「ejbAssemble」を参照してください。

  4. サービスをデプロイし、アプリケーションをバインドします。

    EARファイルは、OC4Jの実行中インスタンスにデプロイされます。デプロイメントの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。次は、デプロイメント・コマンドのサンプルです。

    java -jar <OC4J_HOME>/j2ee/home/admin_client.jar deployer:oc4j:localhost:port 
    <user> <password>
                -deploy 
                -file dist/ejbApp.ear 
                -deploymentName ejbApp 
                -bindWebApp default-web-site
    

    次のリストは、このコード例のパラメータの説明です。

    • <OC4J_HOME>: OC4Jのインストールが含まれているディレクトリ。

    • <user>: OC4Jのインスタンスのユーザー名。ユーザー名はインストール時に割り当てられます。

    • <password>: OC4Jのインスタンス用のパスワード。パスワードはインストール時に割り当てられます。

    • ejbApp: アプリケーションの名前。

    • default-web-site: アプリケーションのバインド先のWebサイト。通常、これはdefault-web-siteになります。Webサイトを構成するには、<OC4J_HOME>/j2ee/home/configserver.xmlファイルを参照してください。

    デプロイメントを行うと、このWebサービスのWSDLが次のWebアドレスとして利用可能になります。context-rootおよびendpoint-address-uriの値は、META-INF/oracle-webservices.xmlファイルにあります。

    http://host:port/context-root/endpoint-address-uri 
    
  5. (オプション)デプロイが成功したことを確認します。

    OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。

  6. クライアント・サイドのコードを生成します。

    • J2SE環境の場合、genProxyコマンドを使用してWebServicesAssemblerツールを実行し、J2SE Webサービス・クライアントのスタブ(クライアント・プロキシ)を生成します。スタブの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。

    • J2EE環境の場合、genInterfaceコマンドを使用してWebServicesAssemblerツールを実行し、J2EE Webサービス・クライアント用のJAX-RPCマッピング・ファイルおよびサービス・エンドポイント・インタフェースを生成します。J2EE Webサービスのクライアントの生成およびアセンブルの詳細は、第14章「J2EE Webサービス・クライアントのアセンブル」を参照してください。

    たとえば、次のコマンドとAntタスクは、J2SEクライアントで使用可能なスタブを生成します。クライアント・プロキシは、ディレクトリbuild/src/clientに格納されます。クライアント・アプリケーションはこのスタブを使用して、リモート・サービスでの操作を起動します。genProxyの必須およびオプションの引数の詳細は、「genProxy」を参照してください。

    コマンドライン:

    java -jar wsa.jar -genProxy 
                      -output build/src/client/ 
                      -wsdl http://localhost:8888/hello/HelloService?WSDL 
                      -packageName oracle.demo.hello
    

    Antタスク:

    <oracle:genProxy 
               wsdl="http://localhost:8888/hello/HelloService?WSDL"
               output="build/src/client"
               packageName="oracle.demo.hello"
    />
    

    このコマンドラインおよびAntタスクの説明:

    • genProxy: J2SE Webサービス・クライアントから使用可能な静的プロキシ・スタブを作成します。「genProxy」を参照してください。

    • output: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。

    • wsdl: WSDLドキュメントの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。「wsdl」を参照してください。

    • packageName: JAX-RPCマッピング・ファイルにパッケージ名が宣言されていない場合に、生成されたクラス用に使用されるパッケージ名を指定します。「packageName」を参照してください。

  7. クライアントをコンパイルおよび実行します。

    クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jarを含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jarおよびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。

Webサービス用のEJBを記述する方法

JAX-RPCを使用したEJBベースのWebサービスを記述するには、サービスを実装するEJBを記述し、そのインタフェースを用意する必要があります。EJBには、クライアントがWebサービス・リクエストを行うとOracleAS Web Servicesから呼び出されるビジネス機能を含める必要があります。

この項では、「HELLO!! You just said:phrase」という文字列を戻すEJB Webサービスを記述する方法について説明します。この場合、phraseは、クライアントからの入力です。このEJB Webサービスは単一のStringパラメータを含むクライアント・リクエストを受信し、Webサービス・クライアントに戻すレスポンスを生成します。

Webサービス用にJ2EE 1.4準拠のEJB実装を記述するには、次のタスクを実行する必要があります。

EJBサービス・エンドポイント・インタフェースを記述する方法

JAX-RPCを使用し、EJBを使用してWebサービスを作成するには、EJBに準拠するパブリック・サービス・エンドポイント・インタフェースを記述する必要があります。ステートレス・セッションBeanのサービス・エンドポイント・インタフェースを作成するための要件は、Enterprise Web Services 1.1仕様の「Section 5.3.2.1」を参照してください。この仕様は、次のWebサイトから入手できます。

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

このインタフェースはjava.rmi.Remoteを拡張する必要があり、すべてのメソッドはjava.rmi.RemoteExceptionをスローする必要があります。サービス・エンドポイント・インタフェースに定義するEJBメソッドのパラメータまたは戻り型として使用できるのは、標準外のデータ型およびJAX-RPC値タイプであるJavaプリミティブおよびクラスのみです。

JAX-RPC値タイプの例としては、java.lang.Stringjava.lang.Doubleなどのプリミティブ以外の値タイプ、およびjava.awt.Imagejavax.xml.transform.Sourceなど、Multipurpose Internet Mail Extensions(MIME)タイプに対応するJava値タイプがあります。

サービス・エンドポイント・インタフェースではカスタムJavaデータ型を使用できますが、これらを処理するためのシリアライザも用意する必要があります。

関連資料

  • 標準ではないデータ型の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」および表5-1を参照してください。

  • カスタム・データ型の使用方法とそのシリアライズの詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java値タイプのカスタム・シリアライズ」を参照してください。

 

例8-1は、サービス・エンドポイント・インタフェースのサンプルです。

例8-1    サービス・エンドポイント・インタフェースのサンプル

package oracle.demo.ejb;

import java.rmi.Remote;
import java.rmi.RemoteException;
/**
 * This is an Enterprise Java Bean Service Endpoint Interface
 */
public interface HelloServiceInf extends java.rmi.Remote {
    /**
     * @param phrase java.lang.String
     * @return java.lang.String
     * @throws String The exception description.
     */
    java.lang.String sayHello(java.lang.String phrase) 
          throws java.rmi.RemoteException;
}

Webサービス用のEJBインタフェースを実装する方法

Webサービスで公開するビジネス機能を実装し、Enterprise JavaBeanを作成します。

例8-2で説明するHelloServiceBeanは、セッションBeanのサンプルです。このクラスでは、「HELLO!! You just said: phrase」を戻すパブリック・メソッドsayHelloを定義します。この場合、phraseは、クライアントからの入力です。通常、WebサービスのJavaBeanでは、1つ以上のパブリック・メソッドを定義します。

Webサービスに使用するEnterprise JavaBeanは、次の要件に準拠する任意のJavaクラスです。

JAX-RPC標準に準拠するには、HelloServiceBeanのすべてのメソッドがjava.rmi.RemoteExceptionをスローする必要があります。また、バージョン2.1のEJB仕様およびEnterprise Web Services 1.1仕様のすべての要件も満たす必要があります。

例8-2    HelloServiceセッションBeanのサンプル

package oracle.demo.ejb;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.*;

/**
 * This is a Session Bean Class.
 */
public class HelloServiceBean implements SessionBean {
    public String sayHello(String phrase) {
        return "HELLO!! You just said :" + phrase;
    }

    public void setSessionContext(javax.ejb.SessionContext ctx)
            throws java.rmi.RemoteException {
    }

    public void ejbActivate() throws java.rmi.RemoteException {
    }

    public void ejbCreate()
            throws javax.ejb.CreateException,
                   java.rmi.RemoteException {
    }
    public void ejbPassivate() throws java.rmi.RemoteException {
    }

    public void ejbRemove() throws java.rmi.RemoteException {
    }
}

EJBを公開するWebサービスのパッケージ化およびデプロイ

EJBを公開するWebサービスのパッケージの構造については、「EJBをベースにしたWebサービスのパッケージ化」を参照してください。

関連資料

EJBのデプロイメントの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。 


注意

WebServicesAssemblerは、2.1 EJBの構成が正しいかどうかを検出できません。構成が正しいかどうかは、2.1 EJB Webサービスのデプロイ時およびサーバー・サイド・コードの生成時にのみ検出できます。  


トランスポート・レベルでEJBベースのWebサービスを保護する方法

oracle-webservices.xmlデプロイメント・ディスクリプタの<ejb-transport-security-constraint>要素および<ejb-transport-login-config>要素を使用して、バージョン2.1または3.0のEJBのトランスポート・レベルのセキュリティ制約を構成できます。これらの要素の詳細は、「トランスポート・レベルでのEJBベースのWebサービスの保護」を参照してください。

関連資料

EJBに対するトランスポート・レベルのセキュリティの実現、およびトランスポート・レベルで保護されているWebサービスにアクセスするクライアントを記述する方法の詳細は、『Oracle Application Server Web Servicesセキュリティ・ガイド』の「EJBをベースとするWebサービスに対するトランスポート・レベル・セキュリティの追加」および「トランスポート・レベルで保護されたWebサービスへのアクセス」を参照してください。 

WebサービスとしてEJBを公開するためのツールのサポート

Oracle JDeveloperでは、モデリング・ツールおよびウィザードを使用して、J2EEに準拠したEJBを作成、変更およびデプロイできます。EJBウィザードを使用して、次のタスクを実行できます。

Oracle JDeveloperを使用してEJBを作成し、Webサービスとして公開する方法の詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。

制限事項

「EJBからのWebサービスのアセンブル」を参照してください。

追加情報

詳細は、次を参照してください。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引