我已经用我的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 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'
我试图在这个环节提到的选项: 如何在WebLogic JNDI查找资源? 但还是我面临的问题。
请让我知道我在做错误的,什么是访问JNDI对象的过程。
参照文章后: Tomcat的VS的Weblogic JNDI查找我修改我的代码。
使用下面的Web应用程序的我的Java程序代码已经解决了我的问题:
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("jdbc/mydb");
jndiConnection = ds.getConnection();
此外,在WebLogic控制台我已经加入我的JNDI对象,以我的管理服务器(下服务器选项),在我的Web应用程序部署。
想你的答案在WebLogic 12c中但不工作的..!
当我试图通过使用数据源的唯一名称myDB
(除去jdbc/
),它工作得很好。
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("myDB");
jndiConnection = ds.getConnection();
对于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();
}