ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発
11g リリース1 (10.3.6)
B60993-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

8 Webコンポーネント用のWebLogicアノテーション

次の項では、アノテーションを使用してWebコンポーネントを記述する方法について説明します。

サーブレット・アノテーションと依存関係インジェクション

Java EEメタデータ・アノテーションの使用により、標準のweb.xmlデプロイメント記述子は省略可能になりました。Servlet 2.5仕様(http://www.oracle.com/technetwork/java/javaee/servlet/index.htmlを参照)では、サーブレット、フィルタ、リスナー、タグ・ハンドラなどの特定のWebコンポーネントでアノテーションを定義できると規定されています。アノテーションを使用すると、外部リソースに対する依存関係を宣言できます。コンテナはこれらのコンポーネントのアノテーションを検出し、コンポーネントのライフサイクル・メソッドが呼び出される前に必要な依存関係を注入します。依存関係インジェクション(DI)は特定のコンポーネントに対してのみ行われます。「アノテーションをサポートするWebコンポーネント・クラス」を参照してください。

アノテーション処理とDIは、バージョンが2.5に設定されているすべてのWebアプリケーションで実行されます。ただし、アノテーション処理は負荷が大きく、含まれるクラスのサイズによってはWebアプリケーションのデプロイメント時間が長くなる場合があります。Webアプリケーションにアノテーションがなく、またバージョンが2.5に設定されている場合は、web.xml記述子でmetadata-complete属性をtrueに設定することで、Webアプリケーション・クラスの不要なアノテーション・スキャンを回避できます。または、WebLogic Serverの起動時に-Dweblogic.servlet.DIDisabled=trueフラグを設定して、すべてのWebアプリケーションに対してアノテーション処理とDIを無効にすることもできます。

WebLogic ServerアプリケーションでのJava EEアノテーションと依存関係インジェクションの使用方法の詳細は、『Oracle WebLogic Serverアプリケーションの開発』のJava EEアノテーションと依存関係インジェクションの使用を参照してください。WebLogic Server Enterprise JavaBeansに対するEJB固有のアノテーションの詳細は、『Oracle WebLogic Server WebLogic Enterprise JavaBeansバージョン3.0のプログラミング』を参照してください。

アノテーションをサポートするWebコンポーネント・クラス

この項では、Java EEに準拠したWebコンテナにおける、リソースに対するアノテーションおよび依存関係インジェクション(DI)の動作について説明します。

Webコンテナでは、表8-1に示されているクラスの型に対してのみアノテーションが処理されます。

表8-1 アノテーションおよび依存関係インジェクションをサポートするWebコンポーネントとインタフェース

コンポーネント・タイプ インタフェース

サーブレット

javax.servlet.Servlet

フィルタ

javax.servlet.Filter

リスナー

javax.servlet.ServletContextListener
javax.servlet.ServletContextAttributeListener
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttributeListener
javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionAttributeListener

タグ・ハンドラ

javax.servlet.jsp.tagext.SimpleTag
javax.servlet.jsp.tagext.BodyTag

Webコンテナは、Java Beanのようなクラスおよびその他のヘルパー・クラスに対しては、アノテーションを処理しません。Webコンテナでは、DIを実現するために次の手順が行われます。

  1. アノテーション処理 - アノテーションは、Webアプリケーションのデプロイメント・フェーズ中にWebコンテナによって処理されます。コンテナはアノテーションを処理しながら、アノテーションによって影響を受ける記述子内の関連エントリを割り出し、記述子ツリーを更新します。Servlet 2.5仕様(http://www.oracle.com/technetwork/java/javaee/servlet/index.html)では、インジェクション対象を定義することですべてのアノテーションを記述子内に宣言できると規定されています。Webコンテナは、注入対象で記述子ツリーを更新します。この結果、デプロイメントを継続しながらjava:comp/envツリーが必要なエントリで更新されます。

  2. 依存関係インジェクション(DI) - DIはインスタンスの作成時に(表8-1で示された型に対して)行われます。これは、リスナーとフィルタに対してはデプロイメント・フェーズで発生します。サーブレットに対してはデプロイメント中または実行時に発生する可能性があります。


    注意:

    Webアプリケーション・コンポーネントでは、1つのDIが失敗すると、同じコンポーネントに対する以後のすべてのDIが無視されます。


Webコンテナによってサポートされるアノテーション

表8-2に、Webコンテナによってサポートされる必要のあるすべてのアノテーションを示します。

表8-2 サポートされるアノテーションのリスト

@アノテーション 仕様の参照先

DeclaresRoles

14.5.1

EJB

14.5.2

EJB

14.5.3

PersistenceContext

14.5.5

PersistenceUnit

14.5.7

PersistenceUnits

14.5.8

PersistenceContexts

14.5.6

PostConstruct

14.5.9

PreDestroy

14.5.10

Resource

14.5.4

Resources

14.5.11

WebServiceRef

14.5.13

WebServiceRefs

14.5.14

RunAs

14.5.12


Webコンテナは、Java EEコンテナのアノテーション処理および依存関係インジェクションのメカニズムを利用して、この機能を実現します。

Servlet 2.5仕様では、web.xml記述子でmetadata-complete属性がtrueに設定されている場合、Webコンテナはアノテーションを処理できないと規定されています。アノテーションが適切に定義され、アノテーション処理が成功し、依存関係が正常に注入されると、アノテーションで記述されたフィールドは正常に初期化され、アノテーションで記述されたメソッドはライフサイクルの適切なフェーズで呼び出されます。DIが失敗すると、これらのアノテーションで記述されたフィールドはnullになります。


注意:

サーブレットやフィルタなどのWebコンポーネント・クラス内の複数のメソッドにPostConstructまたはPreDestroyアノテーションが付けられている場合、Webコンポーネントではそのようなアプリケーションのデプロイメントに失敗します。同様に、セッションBeanなどのEJBコンポーネント・クラスにPostConstructまたはPreDestroyアノテーションが付けられている場合や、EJBインターセプタにPostConstructPreDestroyPostActivateまたはPrePassivateアノテーションが付けられている場合、EJBコンポーネントでもそのようなアプリケーションのデプロイメントに失敗します。


フォルトの検出とリカバリ

アノテーション処理中に障害が発生した場合には、デプロイメント例外が生成され、そのWebアプリケーションのデプロイメントは回避されます。DI中に障害が発生した場合には、その障害の理由を示す警告メッセージがコンテナによってサーバー・ログに書き込まれます。DI障害の発生時には、クラスのインスタンスにあるアノテーションで記述されたフィールドはnullになり、アノテーションで記述されたライフサイクル・メソッドは一切呼び出されません。

制限事項

WebLogicサーブレット・コンテナでは、web.xml記述子で宣言されるWebコンポーネントに対するアノテーションがサポートされています。weblogic.servlet.WeblogicServletContextメソッドを介して動的に登録されたリスナー、フィルタ、およびサーブレットに対してはアノテーションは処理されず、そのようなコンポーネントに対してDIは行われません。

アノテーションによるサーブレットの記述

WebLogicサーブレット・コンテナには、サーブレット用の@WLServletアノテーション、およびフィルタ用のWLFilterアノテーションが用意されています。これらのアノテーションを使用すると、Webアプリケーション内でサーブレットおよびフィルタを開発でき、web.xml記述子でそれらを宣言する必要がなくなります。WebLogicサーブレット・コンテナには、WLServletおよびWLFilterアノテーションを使用して宣言されたサーブレットおよびフィルタの初期化パラメータを指定するためのWLInitParamアノテーションも用意されています。

必要なメタデータはすべて、サーブレットまたはフィルタ内にアノテーションで記述できます。コンテナはそれらを検出し、そのアノテーションで記述されたサーブレットまたはフィルタがデプロイされるように記述子ツリーを更新します。

WLServlet

WLServletアノテーション(weblogic.servlet.annotation.WLServlet)を使用してサーブレット・クラスを記述できます。このアノテーションには、サーブレットのパラメータを宣言するための様々な属性を定義します。このアノテーションのすべての属性は、省略可能です。

属性

表8-3 WLServletアノテーションの属性

名前 説明 データ型 必須?

displayName

デプロイメント後のサーブレットの表示名

String

いいえ

description

サーブレットの説明

String

いいえ

icon

アイコンの場所

String

いいえ

name

サーブレットの名前

String

いいえ

initParams

サーブレットの初期化パラメータ

WLInitParam[]

いいえ

loadOnStartup

サーブレットを起動時にロードすべきかどうか

int

いいえ

runAs

サーブレットのrun-asユーザー

String

いいえ

mapping

サーブレットのURLパターン

String[]

いいえ


例8-1に、サーブレット・クラスでのアノテーションの使用方法を示します。

例8-1 WLServletアノテーション

@WLServlet (
   name = "FOO",
   runAs = "SuperUser"
   initParams = { @WLInitParam (name="one", value="1") }
   mapping = {"/foo/*"}
)
. . .

WebLogicサーブレット・コンテナは、アノテーションを検出し、デプロイメントのためにこのサーブレットをインストールします。Webアプリケーション・デプロイメントのアノテーション処理フェーズ中に、web.xml記述子に対応する記述子Beanが、このアノテーションに対応する関連エントリで更新されます。

例8-2に、更新後の記述子Beanを示します。

例8-2 更新されたweb.xml記述子

<web-app>
. . .
   <servlet>
      <servlet-name>FOO</servlet-name>
      <servlet-class>my.TestServlet</servlet-class>
      <init-param>
         <param-name>one</param-name>
         <param-value>1</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>FOO</servlet-name>
      <url-pattern>/foo/*</url-pattern>
   </servlet-mapping>
. . .
</web-app>

フォルトの検出とリカバリ

このアノテーションの処理中にエラーが発生した場合には、デプロイメント・エラーとなり、サーバー・ログに適切なメッセージが書き込まれます。

WLFilter

WLFilterアノテーション(weblogic.servlet.annotation.WLFilter)を使用してフィルタ・クラスを記述できます。このアノテーションには、フィルタのパラメータを宣言するための様々な属性を定義します。このアノテーションのすべての属性は、省略可能です。

属性

表8-4 WLFilterアノテーションの属性

名前 説明 データ型 必須?

displayName

デプロイメント後のフィルタの表示名

String

いいえ

description

フィルタの説明

String

いいえ

icon

アイコンの場所

String

いいえ

name

フィルタの名前

String

いいえ

initParams

フィルタの初期化パラメータ

WLInitParam[]

いいえ

mapping

フィルタのURLパターン

String[]

いいえ


例8-3に、フィルタ・クラスでのアノテーションの使用方法を示します。

例8-3 WLFilterアノテーション

@WLFilter (
   name = "BAR",
   initParams = { @WLInitParam (name="one", value="1") } 
   Mapping = {"/bar/*"}
)
. . .

WebLogicサーブレット・コンテナは、アノテーションを検出し、デプロイメントのためにこのフィルタをインストールします。Webアプリケーション・デプロイメントのアノテーション処理フェーズ中に、web.xml記述子に対応する記述子Beanが、このアノテーションに対応する関連エントリで更新されます。

例8-4に、更新後の記述子Beanを示します。

例8-4 更新されたweb.xml記述子

<web-app>
. . .
   <filter>
      <filter-name>BAR</filter-name>
      <filter-class>my.TestFilter</filter-class>
      <init-param>
         <param-name>one</param-name>
         <param-value>1</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>BAR</filter-name>
      <url-pattern>/bar/*</url-pattern>
   </filter-mapping>
. . .
</web-app>

フォルトの検出とリカバリ

このアノテーションの処理中にエラーが発生した場合には、デプロイメント・エラーとなり、サーバー・ログに適切なメッセージが書き込まれます。

WLInitParam

@WLInitParamアノテーション(weblogic.servlet.annotation.WLInitParam)を使用して、@WLServletおよび@WLFilterアノテーションを使用して宣言されたサーブレットおよびフィルタの初期化パラメータを指定できます。

属性

表8-5 WLFilterアノテーションの属性

名前 説明 データ型 必須?

name

初期化パラメータの名前

String

いいえ

value

初期化パラメータの値

String

いいえ


例8-5に、WLInitParamアノテーションの例を示します。

例8-5 WLInitParamアノテーションの例

initParams = {@WLInitParam(name="one", value="1"),
               @WLInitParam(name="two", value="2")}

前述のアノテーションを使用してサーブレット・クラスまたはフィルタ・クラスを記述することは、web.xml記述子で例8-6のように初期化パラメータを宣言することと同じです。

例8-6 web.xmlでの初期化パラメータ

. . .
<init-param>
  <param-name>one</param-name>
  <param-value>1</param-value>
</init-param>
<init-param>
  <param-name>two</param-name>
  <param-value>2</param-value>
</init-param>
. . .