好久没有亲自写代码了,基本都是从自己多年来积累的一些源程序直接拷贝、修改。
但近来帮朋友做个小办公系统时,发现一个奇怪的现象,特此写出来,供自己日后备忘,同时,也给遇到相同问题的同行一个参考。
在tomcat5.0中,我部署的连接池是可以正常使用的,但到了6.0就报出错误:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
数据库为msSQL server 2000SP2,配置代码为(server.xml部分):
<Resource name="jdbc/SqlserverDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/SqlserverDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>150</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>150</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>123</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>20</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://192.168.1.175:1433/tan</value>
</parameter>
</ResourceParams>
问题搞懵了!!难道6.0不兼容5.0???
将原来的项目放到6.0下,竟然也报同样的错误!!
没办法了,看看DOC(http://127.0.0.1:8080/docs/jndi-datasource-examples-howto.html )
直接从它上面复制示例代码,修改路径、驱动、用户和密码等,如下:
<Resource name="jdbc/SqlserverDB" type="javax.sql.DataSource" auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000"
url="jdbc:jtds:sqlserver://192.168.1.175:1433/luntan" username="sa" password="123" />
保存后,启动tomcat,测试页打开了!!
高兴的同时,不仅要问:为什么?why?なぜ?
对比上面两种写法,前者比后者多了几个参数,各个去掉,测试,不行!全部去掉,还是不行!
一个非常极端的想法从我心底产生了!难道6.0中不支持第一种写法了!!
应该不会吧!兼容,一直是我们软件开发的一个重要点啊!
时间精力都有限,这个问题暂时留下。
同时,希望看到这个文章并知道原因的,能留言指导一下,或者一起交流一下看法。