2016-07-07 113 views
1

我是JNDI的新手,我试图让我的db连接正常工作。到目前为止没有运气。 我要么收到一条消息:“名称[java:comp/env]没有绑定在这个上下文中,找不到[java:comp]” 或者我收到了超时。Tomcat中的JNDI数据源配置7

以下是关于我当前配置的信息。

Tomcat的:的Apache Tomcat/7.0.29

JMV:1.7.0_06-B24

OS:赢得10临

的Tomcat \ CONF \ web.xml中

<resource-ref> 
<description>DB Connection</description> 
<res-ref-name>jdbc/myDatabaseName</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 

Tomcat \ conf \ context.xml

<ResourceLink type="javax.sql.DataSource" 
name="jdbc/localRemarket" 
global="jdbc/remarket" 
/> 

我也试图将资源放在context.xml中,以确保它是容易找到:

<Resource 
type="javax.sql.DataSource" 
name="jdbc/myDatabaseName" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/myDatabaseName" 
username="myUsername" 
password="myPassword" 
maxActive="1500" 
maxIdle="200" 
maxwait="-1" 
testOnBorrow="true" 
testOnReturn="true" 
testWhileIdle="true" 
validationQuery="SELECT 1" 
timeBetweenEvictionRunsMillis="2000" 
minEvictableIdleTimeMillis="15000" 
removeAbandoned="true" 
removeAbandonedTimeout="5" 
/> 

的Tomcat \的conf \ server.xml中

<Resource 
type="javax.sql.DataSource" 
name="jdbc/myDatabaseName" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/myDatabaseName" 
username="myUsername" 
password="myPassword" 
maxActive="1500" 
maxIdle="200" 
maxwait="-1" 
testOnBorrow="true" 
testOnReturn="true" 
testWhileIdle="true" 
validationQuery="SELECT 1" 
timeBetweenEvictionRunsMillis="2000" 
minEvictableIdleTimeMillis="15000" 
removeAbandoned="true" 
removeAbandonedTimeout="5" 
/> 

java代码:

Connection conn; 

public void openMyConnection() { 

try { 

Properties props = new Properties(); 
props.put("java.naming.factory.initial", "org.apache.naming.java.javaURLContextFactory"); 

InitialContext ctx = new InitialContext(props); 
Context envCtx = (Context) ctx.lookup("java:comp/env"); // <<<<< PRB HERE 
// error message : Name [java:comp/env] is not bound in this Context. Unable to find [java:comp] 

org.apache.tomcat.jdbc.pool.DataSource ds = (org.apache.tomcat.jdbc.pool.DataSource) envCtx.lookup("jdbc/localDB"); 

conn = ds.getConnection(); 

} catch (Exception e) { 
System.out.println(e.getMessage()); 
} 

} 

如果我改变

props.put("java.naming.factory.initial", "org.apache.naming.java.javaURLContextFactory"); 

props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 

我得到:

收到超时

我已经审查了与JNDI很多职位,包括以下两个说是最有帮助的:

http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html and https://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-datasource-jndi-example/

请注意,我阅读How to configure jndi DataSource in Tomcat 7,但它不能解决我的问题。

任何人都可以请帮忙解决这个问题吗?

回答

0

它的工作对我来说,当我直接在webapp配置的数据源(文件META-INF/context.xml中):

<Context > 
<Resource name="jdbc/EmployeeDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="scott" 
      password="tiger" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="jdbc:oracle:thin:@127.0.0.1:1521:mysid" 
      maxActive="8" 
      maxIdle="4"/> 
</Context>