【问题标题】:JNDI DataSource configuration in Tomcat 7Tomcat 7 中的 JNDI 数据源配置
【发布时间】:2016-07-07 17:34:28
【问题描述】:

我是 JNDI 的新手,我正在尝试让我的数据库连接正常工作。到目前为止还没有运气。 我要么收到一条消息,说明:“名称 [java:comp/env] 未绑定在此上下文中。无法找到 [java:comp]” 或者我收到了超时。

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

Tomcat:Apache Tomcat/7.0.29

JMV:1.7.0_06-b24

操作系统:Win 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.htmlhttps://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-datasource-jndi-example/

请注意,我阅读了How to configure jndi DataSource in Tomcat 7,但它并没有为我的问题提供解决方案。

谁能帮忙解决这个问题?

【问题讨论】:

    标签: java apache tomcat jndi


    【解决方案1】:

    当我直接在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2011-08-25
      相关资源
      最近更新 更多