2009-12-01 68 views
2

我一直在努力使JNDI数据源工作。以下指令在 http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html 我使用Tomcat5.5连接到oracle 如果我在代码中使用直连JDBC连接,则可以很好地连接。Tomcat中JNDI数据源的问题

下面是我:我的META-INF/context.xml的 :

<Resource name="jdbc/mydb" auth="Container" 
      type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" 
      url="jdbc:oracle:thin:theserver:1521/mydb" 
      username="user" password="password" maxActive="20" maxIdle="10" 
/> 

这里是什么,是在web.xml:

<resource-ref> 
    <description>please work</description> 
    <res-ref-name>jdbc/mydb</res-ref-name> 
    <res-type> 
    javax.sql.DataSource 
    </res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 

这里是代码:

Connection conn = null; 
    try{ 
    InitialContext ic = new InitialContext(); 
    DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/mydb"); 
    conn = ds.getConnection(); 
    } catch ....... etc. 

我试过很多不同的配置,并开始一个新的简单的项目,以确保没有额外的jar文件c onflicted或类似的东西,但。

任何人都可以看到任何不正确的东西吗?

当我尝试使用conn对象时,服务器上的错误指示NullPointerException。 请原谅,它首先提供:org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法创建PoolableConnectionFactory(Io异常:网络适配器无法建立连接)

回答

4

数据库网址似乎打破了我。

尝试:

jdbc:oracle:thin:@theserver:1521/mydb 
+0

谢谢。这是本地的问题。但是,当我部署到服务器时,我遇到了一个不同的问题,我将在下面指定 – mcgyver5 2009-12-01 14:15:50

+0

服务器上的问题现在是org.apache.commons.dbcp.SQLNestedException:无法创建用于连接URL的类''的JDBC驱动程序null' 其他一些线程表明我需要在我的上下文元素中设置path和docBase?无法做到这一点。 – mcgyver5 2009-12-01 14:17:56

+0

位于服务器上的oracle驱动程序jar文件在哪里? – nos 2009-12-01 14:26:14

3

“的网络适配器无法建立连接”

这是您的线索。它无法访问数据库。检查你的服务器和端口是否正确,检查它们是否可以从你的机器到达。

2

我回应塞巴斯蒂安回答的评论。

当我看到org.apache.commons.dbcp时,表示Tomcat正在使用内置的Apache Commons数据库连接池库而不是Oracle JDBC驱动程序中的库。

不在公共目录中的Oracle JDBC驱动程序通常是我尝试解决的第一个问题。看来这不是你的问题。

其次,当应用程序启动时,如果在创建JNDI数据源时出现问题,Tomcat可能会使用Commons库。这可能是您的情况,因为您的数据库URL不正确。在不停止并重新启动Tomcat的情况下,更正conf/Catalina/localhost目录中的context.xml或复制/重命名的文件可能无法解决问题。所以,我建议停止并重新启动Tomcat并查看是否可以解决问题。

最后一点,您提供的链接是用于设置Common的库。我花了一段时间才弄清楚这一点。以下是我的一个JNDI Oracle数据源定义的示例。

<Resource auth="Container" name="jdbc/mydb" 
    type="oracle.jdbc.xa.client.OracleXADataSource" 
    driverClassName="oracle.jdbc.driver.OracleDriver" 
    factory="oracle.jdbc.pool.OracleDataSourceFactory" 
    url="jdbc:oracle:thin:@theserver:1521:mydb" 
    connectionCachingEnabled="true" 
    connectionCacheProperties="{InactivityTimeout=1800,PropertyCheckInterval=300,MaxStatementsLimit=125,ValidateConnection=true}" 
    implicitCachingEnabled="true"/> 

我不确定这种类型是否适合您的情况,我相信用户名和密码仍然是Resource标签的属性。我想指出的是属性connectionCacheProperties。这里是指定您指定最大和最小连接的位置。有关此属性的更多信息,请转至Connection Cache Properties

希望这会有所帮助。