2

openejb ドキュメントのデカールとして

破られないルール。うまくいかないときは、これらを何度も読んでください。

  1. java:comp/env は、コンテナ管理のリソースを検索するための仕様定義の名前空間です。
  2. java:comp/env はデフォルトで空です
  3. java:comp/env は実行時に読み取り専用です java:comp/env は、xml または注釈を介してコンテナ管理リソースへの参照を宣言することによって設定されます

組み込みモードで openejb を使用しています。DI は正常に動作していますが、pojo でルックアップを行い、標準の jndi ルックアップを ctx.lookup("java:comp/env/DS") として使用してデータ ソースへの参照を取得したいと考えています。環境サブコンテキストが設定されているかどうかをテストするためだけに、ステートレス ejb で xml および @Resource を介してリソースを宣言しようとしましたが、環境サブコンテキストが作成されない理由がわかりません ... plz help

4

1 に答える 1

5

テストで OpenEJB を使用していたときに、同様の問題が発生しました。OpenEJB を使用した組み込みテストの場合は、java:comp/env ではなく、java:openejb/ を探す必要があります。

この小さなスニペットを使用すると、OpenEJB によって登録されたものを一覧表示できます

NamingEnumeration<Binding> list = initialContext.listBindings("java:openejb/");
while (list.hasMore()) {
    Binding item = list.next();
    System.out.println(item.getClassName() +" :: " + "java:openejb/" + item.getName());
}

「java:openejb/PersistenceUnit/」に登録されているすべてのデータソース リストを取得する場合。ほとんどの場合、"java:openejb/PersistenceUnit/[name-of-persistence-unit] [hashcode]" (後で使用できる) がテストで見つかるでしょう。

それが役立つことを願っています -- Jakub

于 2011-07-25T15:31:50.280 に答える