次の構造のJavaEE6アプリがあります。
app.ear
META-INF
application.xml
lib
commmon-server-lib.jar
webapp1.war
webapp2.war
services-ejb.jar
両方の webapps には、MANIFEST.MF (スキニー戦争) の Class-Path エントリに common-server-lib.jar があります。
アプリケーション.xml:
<application>
<module>
<ejb>services-ejb.jar</ejb>
</module>
<module>
<web>
<web-uri>webapp1.war</web-uri>
<context-root>/webapp1</context-root>
</web>
</module>
<module>
<web>
<web-uri>webapp2.war</web-uri>
<context-root>/webapp2</context-root>
</web>
</module>
<library-directory>lib</library-directory>
</application>
いくつcommon-server-lib.jar
かの EJB と他の CDI マネージド Bean を注入する必要がある Web フィルターがあります。このフィルタはweb.xml
、両方の webapps の で定義されています。
common-server-lib.jar
そして戦争beans.xml
は適切な場所にあります。
問題は、このアプリを Glassfish にデプロイしようとすると、次のようなエラーが発生することです。
Class [ Lcom/acme/UserService; ] not found. Error while loading
[ class com.acme.filter.MyFilter ]
UserService
サービスは services-ejb.jar にあります
だから私の質問は次のとおりです:私は何を間違っていますか...? 共有ライブラリで (依存関係にインジェクションを使用する) Web コンポーネントを定義する際に何か問題がありますか?
編集:
JSR-315 (サーブレット 3.0 最終仕様) のセクション 15.5 には、次のものがあります。
In a web application, classes using resource injection will have their annotations processed only if they are located in the WEB-INF/classes directory, or if they are packaged in a jar file located in WEB-INF/lib.
common-server-lib.jar を両方の webapps の WEB-INF/lib ディレクトリに移動しましたが、まだ同じ問題があります;/...