Oracle Application Server Web Services開発者ガイド 10g(10.1.3.1.0) B31868-01 |
|
この章では、WebServicesAssemblerツールを使用してバージョン2.1のEnterprise JavaBeans(EJB)をWebサービスとして公開する方法について説明します。
この章の内容は、次のとおりです。
WebServicesAssemblerを使用して、J2EE 1.4標準に準拠するWebサービスとしてバージョン2.1のEJBを公開できます。EJBの多くは、中間層のビジネス機能をカプセル化するために記述されます。エンタープライズ・アプリケーションでEJBを使用する場合、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サービスとして公開するための一般的な手順は、次のとおりです。
この手順は開発者が実行します。
この手順はWebServicesAssemblerを使用して実行できます。
この章では、バージョン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サービスとして公開するメソッドを定義する必要があります。
WebServicesAssemblerツールを使用して、バージョン3.0のEJBをWebサービスとして公開することはできません。ただし、OracleAS Web ServicesがサポートするJ2SE 5.0 Webサービス注釈を使用してこれらのEJBを公開することはできます。
関連項目
注釈を使用してバージョン3.0のEJBをWebサービスとして公開する方法の詳細は、第11章「注釈を使用したWebサービスのアセンブル」および「バージョン3.0のEJBからWebサービスをアセンブルするために注釈を使用する手順」を参照してください。 |
この項の内容は、次のとおりです。
開始する前に、次のファイルと情報を用意してください。
これらの要件の詳細は、「Webサービス用のEJBを記述する方法」を参照してください。
ear
引数を使用します。ear
を指定しない場合、ファイルはoutput
引数で指定されたディレクトリに格納されます。
標準ではないデータ型の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」および表5-1を参照してください。
カスタム・シリアライザの作成方法の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java値タイプのカスタム・シリアライズ」を参照してください。
これらのトピックの詳細は、第17章「SOAPヘッダーの処理」および「Antタスクでのハンドラの構成方法」を参照してください。
次の手順では、WebServicesAssemblerを使用してセッションBeanをWebサービスとして公開する方法について説明します。
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>
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
: アプリケーションの名前を指定します。この名前は、通常context
やuri
などの他の引数のベース値として使用されます。「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」を参照してください。
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/config
のserver.xml
ファイルを参照してください。
デプロイメントを行うと、このWebサービスのWSDLが次のWebアドレスとして利用可能になります。context-rootおよびendpoint-address-uriの値は、META-INF/oracle-webservices.xml
ファイルにあります。
http://host:port/context-root/endpoint-address-uri
OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。
genProxy
コマンドを使用してWebServicesAssemblerツールを実行し、J2SE Webサービス・クライアントのスタブ(クライアント・プロキシ)を生成します。スタブの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。
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」を参照してください。
クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jar
を含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jar
およびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。
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実装を記述するには、次のタスクを実行する必要があります。
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.String
やjava.lang.Double
などのプリミティブ以外の値タイプ、およびjava.awt.Image
やjavax.xml.transform.Source
など、Multipurpose Internet Mail Extensions(MIME)タイプに対応するJava値タイプがあります。
サービス・エンドポイント・インタフェースではカスタムJavaデータ型を使用できますが、これらを処理するためのシリアライザも用意する必要があります。
関連資料
|
例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サービスで公開するビジネス機能を実装し、Enterprise JavaBeanを作成します。
例8-2で説明するHelloServiceBean
は、セッションBeanのサンプルです。このクラスでは、「HELLO!! You just said:
phrase」を戻すパブリック・メソッドsayHello
を定義します。この場合、phraseは、クライアントからの入力です。通常、WebサービスのJavaBeanでは、1つ以上のパブリック・メソッドを定義します。
Webサービスに使用するEnterprise JavaBeanは、次の要件に準拠する任意のJavaクラスです。
EJBのパラメータおよび戻り型に対してJAX-RPCがサポートするデータ型の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」および表5-1を参照してください。
関連資料
JAX-RPC標準に準拠するには、HelloServiceBean
のすべてのメソッドがjava.rmi.RemoteException
をスローする必要があります。また、バージョン2.1のEJB仕様およびEnterprise Web Services 1.1仕様のすべての要件も満たす必要があります。
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サービスのパッケージ化」を参照してください。
oracle-webservices.xml
デプロイメント・ディスクリプタの<ejb-transport-security-constraint>
要素および<ejb-transport-login-config>
要素を使用して、バージョン2.1または3.0のEJBのトランスポート・レベルのセキュリティ制約を構成できます。これらの要素の詳細は、「トランスポート・レベルでのEJBベースのWebサービスの保護」を参照してください。
Oracle JDeveloperでは、モデリング・ツールおよびウィザードを使用して、J2EEに準拠したEJBを作成、変更およびデプロイできます。EJBウィザードを使用して、次のタスクを実行できます。
ejbCreate()
メソッドを含めると、EJBをOracle Applications Serverに即座にデプロイでき、デプロイ用のメソッドを手動でコード化しなくても済みます。
Oracle JDeveloperを使用してEJBを作成し、Webサービスとして公開する方法の詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。
「EJBからのWebサービスのアセンブル」を参照してください。
詳細は、次を参照してください。
また、『Oracle Application Server Web Servicesセキュリティ・ガイド』の「トランスポート・レベル・セキュリティのWebサービスへの追加」および「トランスポート・レベルで保護されたWebサービスへのアクセス」も参照してください。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|