1

OpenEJB(TomEE ++)コンテナーを使用してEJBプロジェクトに取り組んでいます。JNDIルックアップ名をコードで制御する必要があるセッションBeanがあります。

@Stateless(mappedName="SlideService", name="SlideService")
public class SlideService {

    public Map<Category, List<SlideShow>> fetchSlideShowsBycategory() {
        // TODO Auto-generated method stub
        return null;
    }

    public SlideShow fetchSlideShow(long id) {
        // TODO Auto-generated method stub
        return null;
    }

    public List<SlideShow> fetchSlideShowsByTitle(String title) {
        // TODO Auto-generated method stub
        return null;
    }
}

私の問題は、このBeanがバインドされる名前が「global / slides/SlideService」であるということです。

特に言及していませんが、OpenEJBはアプリケーション名を使用しているようです。

これは移植性を損なうでしょうか?他のコンテナがアプリケーション名を使用しない可能性はありますか?

name属性とmappedName属性を使用して、ステートレスBeanの名前を制御する正しい方法ですか、それとも他の(より良い)方法がありますか?

4

1 に答える 1

2

問題は EJB 3.1 仕様で解決されました。Java EE 6 認定コンテナーは、Bean に複数の JNDI 名を使用します。コードでは、名前の最後の部分を制御できます。ここでは、ポータブル グローバル JNDI 名に関するドキュメントを参照してください。

ここでは、EJB 3.1の JNDI ポータブル JNDI 名の 3 つの標準スコープの簡単なガイドを見つけることができます。

そうです、あなたのコードは Java EE 6 認定のコンテナ間で移植可能です。

于 2012-04-10T12:22:27.683 に答える