0

次の構造の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 ディレクトリに移動しましたが、まだ同じ問題があります;/...

4

1 に答える 1

0

このパズルに何時間も苦労した後、私は解決策を見つけました:

  1. フィルターweb-fragment.xmlに追加commmon-server-lib.jar
  2. webappsweb.xmlのフィルター仕様を削除します
  3. WEB-INF/lib Maven の構成を変更して、ディレクトリからすべての jar を削除します。commmon-server-lib.jar
  4. commmon-server-lib.jarEAR/libディレクトリから削除
于 2013-03-12T12:47:32.467 に答える