1

私は、永続ライブラリ(JPA 1.2)、EJB 3、およびWebプレゼンテーション層(JSF)を含むプロジェクトに取り組んでいます。Eclipseを使用してアプリケーションを開発し、アプリケーションはEclipseプラグインを介してWebsphere Application Server Community Edition(Geronimo 2.1.4)で公開されます(ただし、手動で公開した場合も同じことが起こります)。サーバーに公開すると、次のエラーが発生します。

java.lang.NoClassDefFoundError: Could not fully load class: manager.administration.vehicles.VehicleTypeAdminBean
 due to:manager/vehicles/VehicleType
 in classLoader: 
org.apache.geronimo.kernel.classloader.TemporaryClassLoader@18878c7
    at org.apache.xbean.finder.ClassFinder.(ClassFinder.java:177)
    at org.apache.xbean.finder.ClassFinder.(ClassFinder.java:146)...

web.xmlには、EJBへの参照があります。

<ejb-local-ref>
    <ejb-ref-name>ejb/VehicleTypeAdmin</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>manager.administration.vehicles.VehicleTypeAdmin</local>
    <ejb-link>VehicleTypeAdminBean</ejb-link>
</ejb-local-ref>

EJBプロジェクトには永続プロジェクトへの参照があり、Webプロジェクトには両方のプロジェクトへの参照があります。コンパイルエラーは発生しないので、クラスと参照は正しいと思います。

アプリサーバーの問題かどうかはわかりませんが、以前は同じ構成パラメーターを使用して同じサーバーでアプリケーションを実行していました。

誰かが何が問題なのか手がかりを持っていますか?

4

2 に答える 2

1

クラス manager.administration.vehicles.VehicleTypeAdminBean を作成/ロードしようとしたときに、クラス manager.vehicles.VehicleType が見つからなかったようです。

以前にも同様の問題に遭遇したことがあります。クラス・ローダーがクラスをロードしようとするとき、インポート・ステートメント (および他のクラス使用宣言) を調べてから、これらのクラスのロードを試行し、チェーンの最後 (つまり、java.lang.Object) に到達するまで続けます。チェーンに沿って 1 つのクラスが見つからない場合 (あなたの場合、VehicleType をロードできないように見えます)、チェーンの上部にあるクラス (あなたの場合は VehicleTypeAdminBean) をロードできないことを示します。

VehicleType クラスは別の jar に入っていますか? Web モジュールと EJB モジュールがある場合、適切な場所に VehicleType クラスを含む jar がありますか。Web プロジェクトでは、jar ファイルを WebContent/WEB-INF/lib フォルダーに配置する必要がある場合があります。そうしないと、jar ファイルが見つからないことがあります。

これらのプロジェクトは両方とも別々に展開されますか (つまり、2 つの耳? または 1 つの耳と 1 つの war?)、または一緒に展開されますか? (つまり、jar を持つ 1 つの耳と内部の war?)。EJB ローカルを宣言したことを考えると、2 番目だと思いますか?

依存している jar も、それを使用するプロジェクトの MANIFEST.MF ファイルで宣言する必要があります。

あなたのプロジェクト構造がわからないので、私は推測で走っています。それを示すことはかなり役に立ちます。しかし、EJB クラスに関して VehicleType がどこにあるかを確認したいと思います。パッケージングやランタイムが来ると思っていた場所ではないことに気付くかもしれません。

于 2010-08-11T19:33:59.640 に答える