当前位置: 首页 > 知识库问答 >
问题:

Tomcat7中的JNDI数据源配置

濮阳奇逸
2023-03-14

我是JNDI的新手,我正在尝试让我的db连接正常工作。到目前为止还没有什么进展。我要么收到一条消息,说明“名称[java:comp/env]未在此上下文中绑定。找不到[java:comp]”,要么收到超时。

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

<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"
/>
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和https://examples.javacodeGeeks.com/enterprise-java/tomcat/tomcat-datasource-jndi-example/

请注意,我阅读了如何在Tomcat7中配置jndi数据源,但它没有为我的问题提供解决方案。

谁能帮忙解决这个问题吗?

共有1个答案

曹泉
2023-03-14

当我直接在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>
 类似资料:
  • 更具体地说,我得到了包含所有依赖项的可执行war。应用程序在没有jndi数据源的情况下启动,就像一个魅力一样,用jndi数据源运行它失败了。我认为在这样的配置中没有jetty.xml的位置,因此jetty-env.xml也不适用,因为jetty在默认情况下不会读取它。我试图使用jetty-web.xml进行jndi数据源配置,但jetty未能部署应用程序,返回503错误代码。我用的是9-M4型飞机

  • 我在使用Spring ApplicationContext.xml文件中的JNDI配置dataSource bean时遇到了困难。 我的applicationContext.xml条目如下所示: 通过这些配置,我在Tomcat控制台上不断得到这样的错误: 由:javax.naming.NameNotFoundException:Name[jdbc/myapp]在此上下文中没有绑定。找不到[jdbc

  • 我部署了两只耳朵,其中一只我无法使用。有一个文件application-web-bnd.xml,其中引用了数据源 在我的server.xml文件中,我定义了datasource 在我没有访问权限的代码中,有一个staralContext java:comp/env/jdbc/db。 对数据源的引用存在,但数据源不存在。我无法访问 web.xml以创建参考 。我不知道如何覆盖它。 你能帮忙吗? 我的

  • 问题内容: 我正在尝试设置一些jUnit测试。我们的数据库由服务器使用JNDI连接。我们在root.xml中有一个描述设置的xml。如何设置jUnit以连接数据库?我希望它只是从root.xml中读取内容,但是无论如何我都愿意进行设置。 问题答案: 我发现最好的方法是使用称为Simple- Jndi的 东西。 我将此添加到Maven文件中: 您可以在此处下载软件包,下载内容包含说明手册。 http

  • 嗨,我正在尝试使用jndi数据源。下面是代码 context.xml 在spring servlet配置bean中是: 我得到这个错误 org.springframework.beans.factory.beanCreationException:创建名为“Contact Controller”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.B