2013-04-25 50 views
8

我已經使用我的weblogic控制檯創建了一個JNDI數據源,但我無法從我的Web應用程序訪問該對象。以下是詳細內容如何訪問weblogic 10.3.6中定義的JNDI數據源

在WebLogic 10.3.6,我已經給了JNDI名稱爲數據源爲:

jdbc/mydb

要想從我的web應用程序的數據庫連接我在我的web應用程序編寫的代碼

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

早些時候,我使用Tomcat作爲服務器,我能得到數據庫連接,當我配置的文件tomcat/conf/server.xml在資源的詳細信息,但是當我使用使用WebLogic Server我得到以下錯誤啓動:

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' 

我試過了這個鏈接中提到的選項:How to lookup JNDI resources on WebLogic?但我仍然面臨問題。

請讓我知道我在做什麼錯誤,訪問JNDI對象的過程是什麼。

+1

您的意思是它命名爲 「jdbc/mydb的」,而不是 「的Java/MYDB」? – 2013-04-25 17:22:00

+0

@better_use_mkstemp是的,我已經更新了我的問題,感謝您指出它。 – chaitanya 2013-04-25 18:29:48

+2

您是否還嘗試過在問題鏈接中的第二個解決方案?第一個答案適用於Tomcat,但我不確定它始終可用於weblogic。刪除java:comp/env /並嘗試initContext.lookup(「jdbc/mydb」)? – 2013-04-25 18:34:30

回答

9

經參考帖子:Tomcat vs Weblogic JNDI Lookup我修改了我的代碼。

使用下面的Web應用程序的我的Java程序代碼已經解決了我的問題:

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

另外在WebLogic控制檯我已經加入我的JNDI對象,以我的管理服務器(在服務器選項),在我的Web應用程序部署。

+1

上也能正常工作所以你做了我告訴你在我的評論中所做的事情,它的工作原理是...... derp。來吧! – 2013-04-25 21:58:24

+1

@better_use_mkstemp:認爲你應該在回答中總結你的意見。 – wmorrison365 2013-06-03 15:20:15

+0

我有同樣的問題,沒有找到JNDI資源,雖然我之前創建了它。關鍵是將資源分配給特定的服務器。 – Spindizzy 2014-06-06 11:46:28

2

在weblogic 12c嘗試了你的答案,但沒有工作..!

當我試着只使用dataSource的名稱myDB(刪除了jdbc/)它工作正常。

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

我自己創建的JNDI名稱的值爲「jdbc/mydb」,所以我無法刪除它。 – chaitanya 2014-04-12 18:22:09

2

對於WebLogic 12C同樣的解決方案將是

添加下面的依賴關係到你的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(); 
    } 
相關問題