Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
(1) インポート時の注意
- クラスに宣言されたアノテーションが,外部のアーカイブファイルのクラスを参照していると,それらを単体でインポートできません。
- EJB(ejb-jar.xmlのバージョン2.1以降またはejb-jar.xmlなし)
- Servlet(web.xmlのバージョン2.4以降またはweb.xmlなし)
- ライブラリJAR
外部参照は,次のどれかの方法で実施してください。
- 参照するクラスをすべてEARに含めてインポートする。
- 参照するクラスをすべてアプリケーションディレクトリに含めてインポートする。
- 外部参照しているクラスが含まれるJARファイルをコンテナ拡張ライブラリとして設定する。また,インポートするプロセスのクラスパスにも設定する。
操作方法ごとの設定例を示します。
- 例1:サーバ管理コマンドによって操作する場合
- J2EEサーバ用オプション定義ファイルのキー(add.class.path)に参照しているJARファイルを指定します。また,サーバ管理コマンド用オプション定義ファイルのキー(USRCONF_JVM_CLASSPATH)に参照しているJARファイルを指定します。
- 例2:Management Serverによって操作する場合
- 運用管理ポータルによる論理J2EEサーバのJ2EEコンテナの設定で,拡張パラメタに"add.class.path=<参照しているJARファイル>"を指定します。
- また,adminagentuser.cfgのadd.class.pathキーに参照しているJARファイルを指定します。さらに,サーバ管理コマンド用オプション定義ファイルのキー(USRCONF_JVM_CLASSPATH)に参照しているJARファイルを指定します。
- 次の場合はサーバ管理コマンド実行時にエラーになります。
- @Resourceの要素type()にアプリケーションサーバでサポートしていないJava Typeを設定した場合。
- EJB-JARにejb-jar.xmlがなく,かつ@Statelessまたは@Statefulアノテーションを宣言したクラスが一つもない場合。
- DDのスキーマ定義の出現回数を上回るアノテーションを宣言していた場合。
- WARファイルからEJB-JARファイルを参照している場合,WARファイルとEJB-JARファイルの両方を含んだアプリケーションにしてからインポートしてください。ただし,参照するインタフェースをWARファイルに含めている場合は,WARファイルを個別にインポートすることもできます。
- アノテーションの属性にライブラリJAR内のクラスを記述している場合,ライブラリJARを含んだ形のアプリケーションとしてインポートしてください。
- ほかのEJB-JARを参照するEJB-JARが存在する場合,両方のEJB-JARを含んだ形のアプリケーションとしてインポートしてください。ただし,参照する側のEJB-JARに,参照される側のインタフェースを含めている場合は,EJB-JARごとにインポートすることもできます。
(2) @Resourceのmapped-name属性指定時の注意
アプリケーションサーバでは,@Resourceで指定されたmapped-name属性だけ処理対象とします。@Resourceに指定したmapped-name属性は,属性ファイルの<resource-ref>タグ下の<linked-to>タグ,<resource-env-ref>タグ下の<linked-to>タグ,および<resource-env-ref>タグ下の<linked-queue>タグに対応するものとして処理します。ただし,属性ファイルの<linked-to>タグおよび<linked-queue>タグとmapped-name属性が両方指定されていた場合は,<linked-to>タグおよび<linked-queue>タグの指定値を優先します。
(3) EJBのリンク解決に関する注意
- @EJBはDDの<ejb-ref>タグに対応するアノテーションです。同一アプリケーションの範囲内でEJBのリンクを解決します。@EJBにbeanName属性が指定されている場合,対応するEJB名を持つEJBを検索してリンクを解決します。EJB名とはejb-jar.xmlの場合,<session>タグ,<entity>タグ,および<message-driven>タグ下の<ejb-name>タグを指します。また,アノテーションであれば@Statelessおよび@Statefulのname属性で指定されたものを指します。
- @EJBにbeanName属性が指定されていない場合,@EJBのbeanInterface属性と適合する型のEJBを検索してリンクを解決します。@EJBのbeanInterface属性と適合する型のEJBを次に示します。
- @EJBのbeanInterface属性で指定したものと同じクラス型のホームインタフェースを持つEJB
- @EJBのbeanInterface属性で指定したものと同じクラス型のビジネスインタフェースを持つEJB
一つのビジネスインタフェースを複数のEJBが実装しているようなケースでは,@EJBおよび@EJBsに適合するEJBが複数存在することがあります。参照先を一つに絞り込めない場合はリンクを解決しません。
(4) @RemoteHomeまたは@LocalHome使用時の注意
アプリケーションサーバでは,@RemoteHomeまたは@LocalHomeで指定したホームインタフェースのcreateメソッドの戻り値の型となるインタフェースは,コンポーネントインタフェースと見なされます。ホームインタフェースとビジネスインタフェースの組み合わせでは使用できません。
(5) @PostConstructまたは@PreDestroy使用時の注意
(6) そのほかの注意
- @TimeoutをEJBの複数のメソッドに指定した場合,どのメソッドが対象となるかは特定できません。
- インターセプタとして指定したクラスのアノテーション情報が取得できない場合は,属性ファイル設定時にエラーになります。アノテーション情報を取得するには,対象のクラスとそのスーパークラス・インタフェース,およびそれらのクラス上で宣言されたすべてのフィールド・メソッドについて情報が取得できるようにクラスパスを指定する必要があります。
- @HandlesTypesアノテーションはアノテーション参照抑止機能の対象になりません。アノテーション参照抑止機能が有効な場合でも処理されます。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.