3.5.4 EJBのWebサービスの設定用WARファイルの作成
EJBのWebサービス呼び出し機能は,EARファイルに設定用WARファイルを含めない構成で利用できます。ただし,WARファイルの指定が必要なアプリケーションサーバの機能を利用するために,EARファイルに設定用WARファイルを含めることができます。ここでは設定用WARファイルについて説明します。
- 〈この項の構成〉
(1) EARファイルに設定用WARファイルを含めない場合
EARファイルにEJB JARファイルが含まれていて,さらにEJB JARファイルにEJBのWebサービス実装クラスが含まれるとき,JAX-WSエンジンは設定用WARファイルを含むと仮定して動作します。仮定される設定用WARファイルの構成を次の表に示します。
ディレクトリ |
備考 |
||
---|---|---|---|
/ |
− |
||
┣ ┃ ┃ |
WEB-INF/ |
− |
|
┗ |
web.xml |
3.5.4(4)を参照してください。 |
|
┗ |
META-INF/ |
− |
(2) EARファイルに設定用WARファイルを含める場合
EJBのWebサービス実装クラスを呼び出す際に同時にサーブレットフィルタ機能を適用するなど,web.xmlに設定を加えたい場合,作成したweb.xmlを設定用WARファイルに格納し,EARファイルに含めます。設定用WARファイルの構成を次の表に示します。なお,設定用WARファイルには命名規則があります。設定用WARファイルのファイル名については,「3.5.4(3) 設定用WARファイル名」を参照してください。
ディレクトリ |
備考 |
||
---|---|---|---|
/ |
− |
||
┣ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ |
WEB-INF/ |
− |
|
┣ ┃ ┃ |
classes/ |
コンパイルしたJavaクラスを格納します。フィルタを使用する場合は,フィルタのJavaクラスをこのディレクトリに格納します。※ |
|
┣ ┃ ┃ |
lib/ |
コンパイルしたJavaクラスを含むJARファイルを格納します。フィルタを使用する場合は,フィルタのJavaクラスを含むJARファイルをこのディレクトリに格納します。※ |
|
┗ |
web.xml |
3.5.4(4)を参照してください。 |
|
┗ |
META-INF/ |
− |
(3) 設定用WARファイル名
EARファイルに設定用WARファイルを含める場合,EJBのWebサービスの設定用WARファイル名は,J2EEサーバ用ユーザプロパティファイル(usrconf.properties)のwebserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名にする必要があります。
EARファイルに設定用WARファイルを含めない場合,webserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名の設定用WARファイルを含むと仮定して動作します。EARファイルに設定用WARファイルを含めない場合,メッセージがJ2EEサーバのログに出力されるので,JAX-WSエンジンが設定用WARファイルを含むと仮定したことを確認できます(KDJE42391-I)。このメッセージが出力されなかった場合は,プロパティで指定した設定用WARファイルがEARファイルに含まれることを確認できます。
なお,プロパティのデフォルト値は「CosminexusWSEE.war」です。
EJBのWebサービス呼び出しに対して,次に示す設定を使用できます。これらの設定を使用する場合は,設定用WARファイルをEARファイルに含めて,設定用WARファイル名を指定してください。
-
コンテキストルートの設定
「application.xmlの<web-uri>要素」に設定用WARファイル名を指定します。
EJBのWebサービスの設定用WARファイルに対してコンテキストルートを設定しなかった場合,コンテキストルートは「/」と仮定されます。
-
cosminexus.xmlの<war>要素で指定する設定
「cosminexus.xmlの<module-name>要素」に設定用WARファイル名を指定します。
- 注意事項
-
webserver.container.jaxws.webservice.wsee.warnameプロパティの値を変更するには,EJBのWebサービスを含むWebアプリケーションを停止してください。Webアプリケーションを開始した状態で,プロパティの値を変更した場合は動作を保証されません。ほかのアプリケーションが不正となって,予期しない例外が発生する場合があります。
(4) 設定用WARファイルのweb.xml
ここではEJBのWebサービスの設定用WARファイルに含まれるweb.xmlについて説明します。
web.xmlを作成する場合,ファイル名称は"web.xml"とし,WARファイルを構成するWEB-INFディレクトリの直下に格納します。web.xmlの格納が必須かどうかは,J2EEサーバ用ユーザプロパティファイル(usrconf.properties)のwebserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値によって異なります。
-
"strict"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合,Webサービスの実行に必要な定義が記述されていなければなりません。
-
"lax"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合,Webサービスの実行に必要な定義が記述されていなくてもかまいません。
-
"none"を設定した場合
必ずWEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納してください。
次に,設定用WARファイルにweb.xmlを含めない場合の動作および設定用WARファイルにweb.xmlを含める場合の動作について説明します。
(a) 設定用WARファイルにweb.xmlを含めない場合
webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"strict",または"lax"を設定して,EJBのWebサービスの設定用WARファイルにweb.xmlを含めない場合,Webサービス呼び出し時に次に示す内容のweb.xmlがあるものとして処理されます。
<?xml version="1.0" encoding="UTF-8"?> <!-- web-app要素を記述する --> <description>Cosminexus JAX-WS Default web.xml</description> <display-name>Cosminexus_JAX_WS_Default_web_xml</display-name> <listener> <listener-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener </listener-class> </listener> <servlet> <description>EJB Endpoint servlet for Cosminexus JAX-WS</description> <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name> <servlet-name>CosminexusJaxwsEjbServlet</servlet-name> <servlet-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CosminexusJaxwsEjbServlet</servlet-name> <url-pattern>"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名</url-pattern> <url-pattern>"/" + Webサービス2のサービス名+ "/" + Webサービス2のクラス名</url-pattern> : <url-pattern>"/" + Webサービスnのサービス名+ "/" + Webサービスnのクラス名</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
url-pattern要素の「"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名」は,Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性とname属性の値に,プレフィクスとして「/」(スラッシュ)を付けた文字列が定義されます。
設定用WARファイル内に格納したすべてのWebサービス実装クラスについて,url-pattern要素があるかのように動作します。
- 注意事項
-
-
JAX-WSエンジンが仮定したweb.xmlは,実際に設定用WARファイル内に生成されるわけではありません。Webサービスが呼び出される場合を除いて,すべてこの仮定はないものとして扱われます。
- (例)
-
cjgetapppropコマンドで取得できる属性ファイルには,web.xmlに関する情報は含まれません。また,webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合は,実際に含まれているweb.xmlに関する情報だけが取得できます。
-
webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合,JAX-WSエンジンがWebサービス呼び出し時に仮定するweb.xmlの内容が,実際のweb.xmlに記載されるわけではありません。
-
(b) 設定用WARファイルにweb.xmlを含める場合
webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"strict"を設定してweb.xmlをWARファイルに含める場合,または"none"を設定した場合,web.xmlは,次に示す条件を満たすように作成してください。
-
バージョン
web.xmlのバージョンは,2.5以上にしてください。
-
リスナ
web-app要素に,次に示すlistener要素を含めてください。
<listener> <listener-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener </listener-class> </listener>
-
サーブレット
web-app要素に,次に示すservlet要素を含めてください。
<servlet> <description>EJB Endpoint servlet for Cosminexus JAX-WS</description> <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name> <servlet-name>CosminexusJaxwsEjbServlet</servlet-name> <servlet-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet </servlet-class> </servlet>
-
サーブレットマッピング
web-app要素以下にservlet-mapping要素を記述し,Webサービス実装クラスと同じ数のurl-pattern要素を含めてください。
<servlet-mapping> <servlet-name>CosminexusJaxwsEjbServlet</servlet-name> <url-pattern>"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名</url-pattern> <url-pattern>"/" + Webサービス2のサービス名+ "/" + Webサービス2のクラス名</url-pattern> : <url-pattern>"/" + Webサービスnのサービス名+ "/" + Webサービスnのクラス名</url-pattern> </servlet-mapping>
url-pattern要素の「Webサービスnのサービス名」および「Webサービスnのクラス名」には,次の文字列を記述します。
-
「Webサービスnのサービス名」
Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値を記述します。serviceName属性が省略されている場合,Webサービス実装クラスのクラス名(単純名)にサフィックスとして"Service"を付けた文字列を記述します。
-
「Webサービスnのクラス名」
Webサービス実装クラスのjavax.jws.WebServiceアノテーションのname属性の値を記述します。name属性が省略されている場合,Webサービス実装クラスのクラス名(単純名)を記述します。
-
-
そのほかの要素
任意に記述できます。WARファイルに作成したサーブレットなどを含める場合,適宜,web.xmlに定義してください。
EJBのWebサービスの設定用WARファイルに含めるweb.xmlの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <description>Cosminexus JAX-WS Default web.xml</description> <display-name>Cosminexus_JAX_WS_Default_web_xml</display-name> <listener> <listener-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener </listener-class> </listener> <servlet> <description>EJB Endpoint servlet for Cosminexus JAX-WS</description> <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name> <servlet-name>CosminexusJaxwsServlet</servlet-name> <servlet-class> com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CosminexusJaxwsServlet</servlet-name> <url-pattern>/AddNumbersImplService/AddNumbersImpl</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
バージョン2.5のweb.xmlを作成する場合は,web-app要素のversion属性を"2.5"に,xsd:schemaLocation属性の二つ目のロケーション情報を"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"にしてください。
この例では,Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値が「AddNumbersImplService」で,さらにname属性が「AddNumbersImpl」であることを想定しています。
webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"lax"を設定し,設定用WARファイルにweb.xmlを含める場合,リスナ,サーブレット,サーブレットマッピング,およびそのほかの要素が不完全に含まれるとき,動作は保証されません。