我使用我的weblogic控制台创建了一个JNDI数据源,但我无法从我的Web应用程序访问该对象。以下是详细信息
在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服务器时,我收到以下错误:
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对象的过程是什么。
答案 0 :(得分:10)
在参考帖子后: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 :(得分:3)
在weblogic 12c中尝试了你的答案,但没有奏效......!
当我尝试仅使用dataSource myDB
的名称(删除jdbc/
)时,它运行正常。
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("myDB");
jndiConnection = ds.getConnection();
答案 2 :(得分:2)
Weblogic 12c的相同解决方案是
将以下依赖项添加到您的pom.xml中。使用当前中间件home值$ {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();
}