Weblogicコンソールを使用してJNDIデータソースを作成しましたが、Webアプリケーションからオブジェクトにアクセスできません。以下は詳細です
Weblogic 10.3.6では、データソースのJNDI名を次のように指定しました:jdbc/mydb
WebアプリケーションからDB接続を取得するために、Webアプリケーションで次のコードを記述しました。
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("Java:/comp/env/jdbc/mydb");
jndiConnection = ds.getConnection();
以前、Tomcatをサーバーとして使用していて、ファイルTomcat/conf/server.xml
でリソースの詳細を構成したときにDB接続を取得できましたが、weblogicサーバーの使用を開始すると、以下のエラーが発生します。
Cannot establish DB connection to JNDI:Java:/comp/env/jdbc/mydb While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702. caused by: javax.naming.NameNotFoundException: While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702.; remaining name '/comp/env/jdbc/mydb'
このリンクに記載されているオプションを試しました: WebLogicでJNDIリソースを検索する方法は? それでも問題が発生します。
どこで間違いをしているのか、JNDIオブジェクトにアクセスするプロセスを教えてください。
投稿を参照した後: Tomcat vs Weblogic JNDI Lookup コードを変更しました。
私のJava Webアプリケーションのプログラムで以下のコードを使用すると私の問題は解決しました:
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("jdbc/mydb");
jndiConnection = ds.getConnection();
また、weblogicコンソールで、Webアプリケーションがデプロイされている管理サーバー(サーバーオプションの下)にJNDIオブジェクトを追加しました。
Weblogic 12cで回答を試しましたが、機能しませんでした。
DataSource myDB
の名前のみを使用して試したところ(jdbc/
を削除)、正常に機能しました。
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("myDB");
jndiConnection = ds.getConnection();
Weblogic12cの同じソリューションは次のようになります。
以下の依存関係をpom.xmlに追加します。現在のミドルウェアホーム値$ {oracleMiddlewareHome}で変数を作成し、次に...
<dependency>
<groupId>weblogic</groupId>
<artifactId>webservices</artifactId>
<version>12.1.3</version>
<scope>system</scope>
<systemPath>
${oracleMiddlewareHome}/wlserver/server/lib/weblogic.jar
</systemPath>
</dependency>
次に、以下のコードを使用します。
Hashtable<String, String> h = new Hashtable<String, String>(7);
h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");//add ur url
h.put(Context.SECURITY_PRINCIPAL, "weblogic");//add username
h.put(Context.SECURITY_CREDENTIALS, "welcome1");//add password
Bundle bundle;
try {
InitialContext ctx = new InitialContext(h);
DataSource dataSource = ((DataSource) ctx.lookup("jdbc/ContextBindingDS"));
bundle = (Bundle) ctx.lookup(BUNDLE_JNDI_NAME);
} catch (NamingException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}