我一直很难让JNDI数据源工作。按照说明进行操作 http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html 我正在使用Tomcat5.5连接到oracle 如果我在代码中使用直接JDBC连接,我可以很好地连接。
以下是我所拥有的: 在我的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文件冲突或类似的东西,但是。
任何人都可以看到任何看起来不正确的东西吗?
当我尝试使用conn对象时,服务器上的错误指示NullPointerException。 对不起,它首先提供:org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法创建PoolableConnectionFactory(Io异常:网络适配器无法建立连接)
答案 0 :(得分:4)
数据库网址似乎对我不了解。
尝试:
jdbc:oracle:thin:@theserver:1521/mydb
答案 1 :(得分:3)
“网络适配器无法建立连接”
这是你的线索。它无法访问数据库。检查您的服务器和端口是否正确,检查它们是否可以从您的计算机上访问。
答案 2 :(得分: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"/>
我不确定这种类型在您的情况下是否重要,我相信用户和密码仍然是资源标记的属性。我想指出的是属性connectionCacheProperties。这里是指定您指定最大和最小连接的位置。有关此属性的详细信息,请转到Connection Cache Properties。
希望这有帮助。