以下のjndi名でweblogicに2つのデータソースを作成しました
Javaを使用してデータソースtestDatasource1にアクセスできますが、dataource jdbc/testDatasourceにアクセスしているときに、以下のエラーが発生します
javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '']; remaining name 'jdbc/testDatasource'
プレフィックスjdbc /が問題を引き起こしているようです。
場合によっては、サーバーと同じターゲットにないデータソースが原因です。データソースを使用しているサーバーは、同じターゲットに追加する必要があります。
私は同じ問題に直面しました。私のアプリケーションは、ローカルのOracle Sql Server(Oracle XE 11g)で実行されるOracleDBに接続しています。他の回答から、Weblogicキャッシュ/ tmp、/ cache、さらには/ logsを削除しても機能する可能性があることがわかりました。私の問題は、ローカルサービスのOracle ServiceXEが停止したことでした。私はそれがばかげていることを知っていますが、それは役立つかもしれません。したがって、次の3つのことを行う必要があります。
- キャッシュの消去;
-DBサーバーサービスが実行されているかどうかを確認します。
-WEBLOGICサーバーを再起動してみてください。上記のことは私のために働いた。
ばかげているように聞こえるかもしれませんが、それが私に起こったので、私はそれを共有します。
Weblogic(少なくとも10.3.4)でデータソースを作成するときは、構成プロセス全体を実行することを忘れないでください(終了する前にFinish
ボタンが有効になっています)。
この最後のページでは、サーバーのデータソースを作成するだけでなく、activate
することができます。
DBが稼働しているかどうかを確認するには、サーバーのJNDIツリーを確認します。
Javaは、リソースのルートJNDI名前空間です。
だから多分あなたは必要です
dataSource = (javax.sql.DataSource) context.lookup("Java:jdbc/testDatasource");
PRODサーバーのセットアップ中に、アプリケーションでも同じ問題が発生しました。
Sol:web-logicコンソール(ノードまたはクラスター)のデータソースを対象としました。わたしにはできる。
ナビゲーション:コンソールの場合:[JDBC]> [JDBCデータソースの概要]> [DataSource1]に移動し、このJDBCデータソースをデプロイするサーバーまたはクラスターを選択します。
私はこの例外に遭遇しました:
javax.naming.NameNotFoundException: While trying to lookup 'jdbc.test_group_ir' didn't find subcontext 'jdbc'. Resolved ''; remaining name 'jdbc/test_group_ir'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.Java:1224)
weblogicコンソールからデータベースへの接続をテストすると:
Error weblogic.common.resourcepool.ResourceSystemException: Could not create connection for datasource 'test_group_ir_pool'. The returned message is: ORA-01017: invalid username/password;
パスワードが間違っているように見えましたが、これは必ずしもあなたの場合ではありません。最初の例外は一般的であり、さまざまな原因がある可能性があります。以前の回答ですでに説明されているものもあるので、私は私のものを追加しています。
私の場合、展開中にデータソースが破壊されていたことが原因でした。解決策は、destroyMethod = ""を追加することです
@Bean(name = "dataSource", destroyMethod="")
public DataSource dataSource() {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
return lookup.getDataSource(jndiName);
}
私は同じ問題に直面しました、そしてそれは今修正されました:)
修正は、
String DATASOURCE_CONTEXT = prop.getProperty("tcDataSourceContext");
log("DATASOURCE_CONTEXT.."+DATASOURCE_CONTEXT);
Properties env = new Properties( );
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL,"t3://abc.com:8001");
Context initialContext = new InitialContext(env);
DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
if (datasource != null) {
conn = datasource.getConnection();
}
else{
log("Failed to lookup datasource.");
}
1#。 abc.comは、WebLogicがデプロイされているサーバーのURLです。 2#。 8001は、WebLogic管理サーバーがリッスンしているポート番号です。
3#。以下が正しく構成されていることを確認してください。
間違ったもの:tcDataSourceContext = Java:comp/env/jdbc/datasourcename
正しいもの:tcDataSourceContext = jdbc/datasourcename
4#。また、WebLogicサーバーに移動し、/ Oracle/Middleware/wlserver_10.3/server/lib /に移動して、以下のコマンドを実行します。
コマンド:Java -jar wljarbuilder.jar -profile wlfullclient5
上記のコマンドは、すべてのjarがWebLogicサーバーの/ libフォルダー内にあるjarファイルを作成し、それをクライアントJavaコードビルドパスとserver/libフォルダーにも配置します。
お役に立てれば!ご不明な点がございましたら、お気軽にお問い合わせください。
このエラーは、weblogicの2つのデータソースで同じJNDI名が定義されている場合にも発生します(データソースの異なるプロパティをテストするために2つ作成しました)。そのうちの1つを削除する必要があり、正常に機能しました。