1

環境

  • リモートインターフェイスを備えた2つのステートレスEJB。EJB1はEJB2に注入されます。
    /// EJB1

    package com.xxx.layer1;

    @Remote
    public interface EJB1Remote {
    }

    @Stateless (mappedNamed="com.xxx.EJB1")
    public class EJB1 implements EJB1Remote {
    }


    /// EJB2

    package com.xxx.layer2;

    import com.xxx.layer1;

    @Remote
    public interface EJB2Remote {
    }

    @Stateless (mappedNamed="com.xxx.EJB2")
    public class EJB2 implements EJB2Remote {

        @EJB(mappedNamed="com.xxx.EJB1")
        EJB1Remote ejb1;
    }
  • EJB2は、いくつかのオプションパッケージ(マニフェストで宣言)も使用します

  • WebLogicアプリケーションサーバー(10.3.3)

  • 2つのEJBは2つの別々のJARファイルにパッケージ化されています

問題

2つのJARファイルがEARファイルにパッケージ化されてデプロイされている場合、依存性注入は機能します。ただし、EJB1を最初にデプロイしてWeblogic( com.xxx.EJB1#com.xxx.layer1.EJB1Remote )でグローバルJNDI名を確認した後でも、それらを個別にデプロイすると、EJB2のデプロイメントはClassNotFoundException:com.xxx.layer1で失敗します。 EJB1Remote

4

1 に答える 1

0

この場合の個々のJARファイルは、WebLogic内の独自のアプリケーションであり、各アプリケーションには独自のクラスローダーがあります。したがって、JARファイルが個別にデプロイされている場合(EARファイルにバンドルされていない場合)、それらのクラスローダーは他のクラス内のクラスを認識しません。

この場合、EJB2のインターフェースを別のJARファイルに分離し、それをオプション・パッケージとしてデプロイし、他のJARファイルのマニフェストへの参照を追加しました。

于 2012-07-10T01:17:07.390 に答える