11

WebLogic 11g にレガシー アプリケーションをデプロイしました。アプリケーションには次のコードがあります。

 Context context = new InitialContext();
 dataSource = (javax.sql.DataSource) context.lookup("java:myDataSource");

また、次の JNDI 名を使用して WebLogic で構成されたデータ ソースもあります。

     jdbc/myDataSource

上記の Java コードを実行すると、次の例外が発生します。

       javax.naming.NameNotFoundException: While trying to look up /myDataSource in /app/webapp/axis2.war/60105275.; remaining name '/myDataSource'
        at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)

      at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:144)

私はJNDIにかなり慣れていないので、私の質問は? 命名における切断はどこにありますか? コンテキスト ルックアップに "java:" のプレフィックスがある場合、それはどういう意味ですか?

ありがとう!

4

4 に答える 4

6

javaリソースのルートJNDI名前空間です。元のコードスニペットが意味するのは、アプリケーションが最初にデプロイされたコンテナが、取得したJNDIコンテキストに追加の名前空間を適用しなかったことです(たとえば、Tomcatはすべてのリソースを名前空間に自動的に追加するため、次の場合comp/envに行う必要があります。dataSource = (javax.sql.DataSource) context.lookup("java:comp/env/jdbc/myDataSource");リソース参照名はjdbc/myDataSource)です。

レガシーコードを変更する必要をなくすために、データソースを名前で登録するmyDataSource(削除するjdbc/)場合は問題ないと思います。それがうまくいくかどうか教えてください。

于 2011-06-28T03:02:22.210 に答える
1

これと同様の問題がありました。java:comp/env/プレフィックスを削除jdbc/myDataSourceし、コンテキストルックアップで使用することで解決しました。誰かがコメントで指摘したように。

于 2013-03-12T23:30:00.700 に答える