分类: Java
2008-08-18 11:24:32
在J2EE应用开发当中,或许你碰到过虽然你已把DB驱动放在了你部署的war包或者directory里,但tomcat还是视而不见,提示诸如下面的信息给你:
Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Driver
at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:854)
at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:721)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
如果你是用DriverManager而不是Datasource也不会出现这问题。问题就在于用Datasource的情况下,在Datasource被激发初始化时,Tomcat是用其自身的classloader 去load相关的驱动jar文件,而应用程序部署目录下的db驱动jar文件并不在tomcat这个classloader的“可视范围”内,相反,它会尝试去找/common/lib等目录下的jar文件,这就是要把db驱动copy到common/lib下的原因。
同样的道理,当你在weblogic,websphere等Applicatioin Server下部署应用时,也是如此,道理一样。