コードで次のルックアップを試してみると、次のようになります。
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
return (DataSource) envCtx.lookup("jdbc/mydb");
次の例外が発生します。
java.sql.SQLException: QueryResults: Unable to initialize naming context:
Name java:comp is not bound in this Context at
com.onsitemanager.database.ThreadLocalConnection.getConnection
(ThreadLocalConnection.java:130) at
...
JBosswikiの指示に従って組み込みJBossをインストールしました。そして、構成wikiページで指定されているように、「デフォルトですべてのWARをスキャンする」デプロイメントを使用してTomcatを構成しました。
設定ページの引用:
JNDI
接続プール、EJB、JPA、トランザクションなどの組み込みJBossコンポーネントは、JNDIを広範囲に使用してサービスを公開します。組み込みJBossは、TomcatのJNDIインスタンス化の上にそれ自体を階層化することにより、TomcatのJNDI実装をオーバーライドします。これにはいくつかの理由があります:
- server.xml内でこれらのサービスのすべてを宣言する必要をなくすため
- WebアプリとEJB間のjava:comp名前空間の見た目のない統合を可能にするため。
- TomcatのJNDI実装には、一部のJBossコンポーネントの動作を妨げるいくつかの重大なバグがあります。
- >リモートで検索できるEJBやその他のサービスをリモート処理するオプションを提供したいと考えています。
上記の引用によると、Java:comp / envでルックアップを実行できるようにTomcatのJNDI実装をオーバーライドするJBossネーミングサービスを構成する方法について、誰かが考えていますか?
参考までに-私の環境Tomcat5.5.9、Seam 2.0.2sp、Embedded JBoss(Beta 3)、
注:データベース接続用の-ds.xmlファイルが適切にセットアップされており、指示に従ってクラスパスからアクセスできます。
注:この質問は、埋め込みJbossフォーラムとseamユーザーフォーラムに投稿しました。