web-dev-qa-db-ja.com

weblogic10.3.6で定義されているJNDIデータソースにアクセスする方法

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オブジェクトにアクセスするプロセスを教えてください。

8
chaitanya

投稿を参照した後: Tomcat vs Weblogic JNDI Lookup コードを変更しました。

私のJava Webアプリケーションのプログラムで以下のコードを使用すると私の問題は解決しました:

Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("jdbc/mydb");
jndiConnection = ds.getConnection();

また、weblogicコンソールで、Webアプリケーションがデプロイされている管理サーバー(サーバーオプションの下)にJNDIオブジェクトを追加しました。

10
chaitanya

Weblogic 12cで回答を試しましたが、機能しませんでした。

DataSource myDBの名前のみを使用して試したところ(jdbc/を削除)、正常に機能しました。

Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("myDB");
jndiConnection = ds.getConnection();
3
vardhan

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();
    }
2
spattanaik75