![]() ![]() ![]() ![]() |
以下の節では、アノテーションを使用して Web コンポーネントを記述する方法について説明します。
Java EE メタデータ アノテーションの使用により、標準の web.xml
デプロイメント記述子は省略可能になりました。Servlet 2.5 仕様では、サーブレット、フィルタ、リスナ、タグ ハンドラなどの特定の 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 アノテーションと依存性注入の使い方の詳細については、『WebLogic Server アプリケーションの開発』の「Java EE アノテーションと依存性注入の使用」を参照してください。WebLogic Server エンタープライズ JavaBean に対する EJB 固有のアノテーションの詳細については、『WebLogic エンタープライズ JavaBeans バージョン 3.0 プログラマーズ ガイド』を参照してください。
この節では、Java EE に準拠した Web コンテナにおける、リソースに対するアノテーションおよび依存性注入 (DI) の動作について説明します。
Web コンテナでは、表 8-1 に示されているクラスの型に対してのみアノテーションが処理されます。
Web コンテナは、Java Bean のようなクラスおよびその他のヘルパー クラスに対しては、アノテーションを処理しません。Web コンテナでは、DI を実現するために次の手順が行われます。
java:comp/env
ツリーが必要なエントリで更新されます。 注意 : | Web アプリケーション コンポーネントでは、1 つの DI が失敗すると、同じコンポーネントに対する以後のすべての DI が無視されます。 |
表 8-2 に、Web コンテナによってサポートされる必要のあるすべてのアノテーションを示します。
Web コンテナは、Java EE コンテナのアノテーション処理および依存性注入のメカニズムを利用して、この機能を実現します。
Servlet 2.5 仕様では、web.xml
記述子で metadata-complete
属性が true
に設定されている場合、Web コンテナはアノテーションを処理できないと規定されています。アノテーションが適切に定義され、アノテーション処理が成功し、依存性が正常に注入されると、アノテーションで記述されたフィールドは正常に初期化され、アノテーションで記述されたメソッドはライフサイクルの適切なフェーズで呼び出されます。DI が失敗すると、これらのアノテーションで記述されたフィールドは null
になります。
警告 : | サーブレット、フィルタなどの Web コンポーネント クラス内の複数のメソッドに PostConstruct または PreDestroy アノテーションが付けられている場合、Web コンポーネントではそうしたアプリケーションのデプロイメントに失敗します。同様に、セッション Bean などの EJB コンポーネント クラスに PostConstruct または PreDestroy アノテーションが付けられている場合や、EJB インターセプタに PostConstruct 、PreDestroy 、PostActivate 、または 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
アノテーション (weblogic.servlet.annotation.WLServlet
) を使用してサーブレット クラスを記述できます。このアノテーションには、サーブレットのパラメータを宣言するためのさまざまな属性を定義します。このアノテーションのすべての属性は、省略可能です。
コード リスト 8-1 に、Servlet クラスでのアノテーションの使い方を示します。
@WLServlet (
name = "FOO",
runAs = "SuperUser"
initParams = { @WLInitParam (name="one", value="1") }
mapping = {"/foo/*"}
)
. . .
WebLogic サーブレット コンテナは、アノテーションを検出し、このサーブレットをデプロイするためにインストールします。Web アプリケーション デプロイメントのアノテーション処理フェーズ中に、web.xml
記述子に対応する記述子 Bean が、このアノテーションに対応する関連エントリで更新されます。
コード リスト 8-2 に、更新後の記述子 Bean を示します。
<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
アノテーション (weblogic.servlet.annotation.WLFilter
) を使用してフィルタ クラスを記述できます。このアノテーションには、フィルタのパラメータを宣言するためのさまざまな属性を定義します。このアノテーションのすべての属性は、省略可能です。
コード リスト 8-3 に、Filter クラスでのアノテーションの使い方を示します。
@WLFilter (
name = "BAR",
initParams = { @WLInitParam (name="one", value="1") }
Mapping = {"/bar/*"}
)
. . .
WebLogic サーブレット コンテナは、アノテーションを検出し、このフィルタをデプロイするためにインストールします。Web アプリケーション デプロイメントのアノテーション処理フェーズ中に、web.xml
記述子に対応する記述子 Bean が、このアノテーションに対応する関連エントリで更新されます。
コード リスト 8-4 に、更新後の記述子 Bean を示します。
<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
アノテーション (weblogic.servlet.annotation.WLInitParam
) を使用して、@WLServlet
および @WLFilter
アノテーションを使用して宣言されたサーブレットおよびフィルタの初期化パラメータを指定できます。
コード リスト 8-5 に、WLInitParam
アノテーションの例を示します。
initParams = {@WLInitParam(name="one", value="1"),
@WLInitParam(name="two", value="2")}
上記のアノテーションを使用して Servlet クラスまたは Filter クラスを記述することは、web.xml
記述子でコード リスト 8-6 のように初期化パラメータを宣言することと同じです。
. . .
<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>
. . .
![]() ![]() ![]() |