0


古い Sun Application Server 9.1 から現在の Glassfish 3.1 に移植したい「古い」JavaEE アプリケーションがあります。展開記述子 xml ファイルを更新しました (名前を変更し、DocType を更新し、DTD に対して検証しました)。しかし、GF3.1 にデプロイしようとすると、次のエラーが発生します。

JDO83008: CMP Compilation failed: 
C:\workspace\glassfish31eclipsedefaultdomain\generated\ejb\archivetool-app-1.9.5\archivetool-ejb-1.9.5_jar\de\ems\archivetool\ejb\metadata\cd\eb\CdBean_821611534_ConcreteImpl.java:10: 
cannot access de.ems.archivetool.ejb.framework.AbstractCMPBean
class file for de.ems.archivetool.ejb.framework.AbstractCMPBean not found

C:\workspace\glassfish31eclipsedefaultdomain\generated\ejb\archivetool-app-1.9.5\archivetool-ejb-1.9.5_jar\de\ems\archivetool\ejb\productdata\product\eb\ProductionLibraryBean40992531_ConcreteImpl.java:416: 
cannot find symbol

symbol  : class EBSBusinessException
location: package de.ems.archivetool.ejb.framework

WARNUNG: JDO83004: CMP Compilation failed. See log for details.
SCHWERWIEGEND: Exception while invoking class org.glassfish.ejb.startup.EjbDeployer prepare method
SCHWERWIEGEND: Exception while invoking class org.glassfish.javaee.full.deployment.EarDeployer prepare method
SCHWERWIEGEND: Exception while preparing the app
SCHWERWIEGEND: JDO83004: CMP Compilation failed. See log for details.
org.glassfish.deployment.common.DeploymentException: JDO83004: CMP Compilation failed. See log for details.

ただし、古い SUN App Server にデプロイすることはできます。

アプリケーションは、4 つのモジュールとビルド モジュールで構成されます。通常、WAR モジュールと JAR モジュールの 2 つの EJB モジュールで構成される .ear ファイルは、Maven で問題なくビルドされます (UnitTest は成功するなど)。( pom.xmlと結果のapplication.xml )

したがって、すべて正常にビルドされますが、アプリケーションを GF3.1 にデプロイしようとすると、「クラス ファイルが見つかりません」というエラーが発生します。見つからないクラスは JAR モジュール内にあり、EJB モジュールの基本クラスが含まれています。

誰かが出発点を持っていますか?

よろしく、 アンドレアス

4

1 に答える 1

0

わかりました、何時間ものグーグル検索の後、私はついにこの問題に対する正確な答えをここで見つけました. 重要な部分は次のとおりです。

Java EE 6 仕様では、エンタープライズ アーカイブ (EAR) ファイルからどの JAR ファイルを表示できるかについて、厳密な規則が課されています。セクション EE.8.3.3 を参照してください。具体的には、アプリケーション クライアント JAR ファイルのマニフェスト Class-Path が EJB JAR ファイルを明示的に参照しない限り、アプリケーション クライアント モジュールはどの EJB JAR ファイルにもアクセスできません。

これは、GlassFish Server v2 からの変更点です。GlassFish Server v2 では、アプリケーション クライアントは、EAR ファイル内のすべての EJB JAR ファイルと、EAR ファイルのトップ レベルにあるすべての JAR ファイルに自動的にアクセスできました。より厳格な仕様言語に準拠するために、GlassFish Server 3.0.1 はアプリケーション クライアントにこれらの JAR ファイルへのアクセスを自動的に提供できません。

あなたがしなければならないことは、maven が jar (およびその他の依存関係) を ear コンテナーのライブラリー・フォルダーに入れるようにすることです。これを行うには、これを ear pom.xml に追加します。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-ear-plugin</artifactId>
      <configuration>

      //here starts the important part
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
        </manifest>
      </archive>
      //end of important part

   <modules>
     <jarModule>
       <groupId>gID</groupId>
       <artifactId>aID</artifactId>
     </jarModule>

     //etc some more ebjs, war, ...
   </modules>

これにより、jar モジュールがフォルダ lib に配置され、依存するすべての ejb が MANIFEST.MF で Class-Path エントリを取得します。

同じ問題であなたの何人かを助けることを願っています。

于 2012-04-20T12:22:07.953 に答える