Jdbc 启动时出错的是LP服务器ClassNotFoundException:com.ibm.db2.jcc.DB2Driver

Jdbc 启动时出错的是LP服务器ClassNotFoundException:com.ibm.db2.jcc.DB2Driver,jdbc,db2,websphere-liberty,open-liberty,Jdbc,Db2,Websphere Liberty,Open Liberty,当我尝试启动WebSphereLP服务器(WP7)时,Eclipse控制台中出现以下错误 [2017-10-06 12:04:46952][ERROR]com.ibatis.common.logging.jakarta.jakartacommonslogginimpl.ERROR[19]SimpleDataSource:加载属性时出错。原因:java.lang.ClassNotFoundException:com.ibm.db2.jcc.DB2Driver java.lang.ClassNotF

当我尝试启动WebSphereLP服务器(WP7)时,Eclipse控制台中出现以下错误

[2017-10-06 12:04:46952][ERROR]com.ibatis.common.logging.jakarta.jakartacommonslogginimpl.ERROR[19]SimpleDataSource:加载属性时出错。原因:java.lang.ClassNotFoundException:com.ibm.db2.jcc.DB2Driver
java.lang.ClassNotFoundException:com.ibm.db2.jcc.DB2Driver
位于java.lang.Class.forNameImpl(本机方法)
位于java.lang.Class.forName(Class.java:278)
位于com.ibatis.common.resources.resources.classForName(resources.java:267)
位于com.ibatis.common.resources.resources.instantiate(resources.java:283)
在com.ibatis.common.jdbc.SimpleDataSource.initialize(SimpleDataSource.java:199)上
位于com.ibatis.common.jdbc.SimpleDataSource。(SimpleDataSource.java:116)
位于com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.initialize(SimpleDataSourceFactory.java:31)
位于com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$9.process(SqlMapConfigParser.java:220)
位于com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
位于com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105)
位于com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
位于com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
位于com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
位于com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
位于com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:46)
位于com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
位于com.pm.testdatamgt.persistence.util.SqlMapBuilder.build(SqlMapBuilder.java:67)
位于com.pm.testdatamgt.persistence.util.SqlMapConfig.(SqlMapConfig.java:71)
在com.pm.testdatamgt.persistence.util.SqlMapConfigFactory.getSqlMapInstance(SqlMapConfigFactory.java:37)上
位于com.pm.persistence.dao.impl.ReferenceCodeDaoImpl.getRefCatIdForSname(ReferenceCodeDaoImpl.java:95)
位于com.pm..service.impl.ReferenceCodeServiceImpl.initAttributeNames(ReferenceCodeServiceImpl.java:99)
位于com.pm.testdatamgt.startup.StartupServlet.loadVariables(StartupServlet.java:139)
位于com.pm.testdatamgt.startup.StartupServlet.init(StartupServlet.java:125)
位于javax.servlet.GenericServlet.init(GenericServlet.java:244)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:332)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.loadOnStartupCheck(ServletWrapper.java:1428)
位于com.ibm.ws.webcontainer.webapp.webapp.doLoadOnStartupActions(webapp.java:1205)
位于com.ibm.ws.webcontainer.webapp.webapp.commonInitializationFinally(webapp.java:1173)
位于com.ibm.ws.webcontainer.webapp.webapp.initialize(webapp.java:1075)
位于com.ibm.ws.webcontainer.webapp.webapp.initialize(webapp.java:6595)
位于com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:468)
位于com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApplication(DynamicVirtualHost.java:463)
位于com.ibm.ws.webcontainer.osgi.webcontainer.startWebApplication(webcontainer.java:1120)
com.ibm.ws.webcontainer.osgi.webcontainer.access$000(webcontainer.java:104)
位于com.ibm.ws.webcontainer.osgi.webcontainer$2.run(webcontainer.java:932)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522)
位于java.util.concurrent.FutureTask.run(FutureTask.java:277)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
运行(Thread.java:785)
我已经在我的server.xml中添加了所需的数据源

**<library id="DB2JCCLib">
        <fileset dir="${server.config.dir}/resources/DB2" includes="db2jcc.jar, db2jcc_license_cisuz.jar, db2jcc_license_cu.jar"/>
</library>
dataSource id="db2" jndiName="jdbc/db2">
    <jdbcDriver libraryRef="DB2JCCLib">
    </jdbcDriver>
    <properties.db2.jcc databaseName="DB2" serverName="tsoc.nnnn.com" portNumber="5002"/>
</dataSource>**
**
dataSource id=“db2”jndiName=“jdbc/db2”>
**
DB2JAR位于给定位置。 我是否丢失了一些东西或任何指针?如何调试它


如果在服务器配置中使用数据源,Liberty将尝试加载数据源实现类,如

com.ibm.db2.jcc.DB2DataSource
com.ibm.db2.jcc.DB2ConnectionPoolDataSource
com.ibm.db2.jcc.DB2XADataSource
而不是异常中显示的驱动程序类

com.ibm.db2.jcc.DB2Driver
因此,一个很好的猜测(缺少异常堆栈)是您的应用程序可能正在尝试使用DriverManager.getConnection,而不是使用配置的数据源。如果您真的想这样做(您将失去应用服务器提供的许多功能,如全局事务登记和连接池),那么您需要使JDBC驱动程序库直接可用于您的应用程序。 比如说,

<application location=...>
  <classloader commonLibraryRef="DB2JCCLib"/>
</application>

如果在服务器配置中使用数据源,Liberty将尝试加载数据源实现类,如

com.ibm.db2.jcc.DB2DataSource
com.ibm.db2.jcc.DB2ConnectionPoolDataSource
com.ibm.db2.jcc.DB2XADataSource
而不是异常中显示的驱动程序类

com.ibm.db2.jcc.DB2Driver
因此,一个很好的猜测(缺少异常堆栈)是您的应用程序可能正在尝试使用DriverManager.getConnection,而不是使用配置的数据源。如果您真的想这样做(您将失去应用服务器提供的许多功能,如全局事务登记和连接池),那么您需要使JDBC驱动程序库直接可用于您的应用程序。 比如说,

<application location=...>
  <classloader commonLibraryRef="DB2JCCLib"/>
</application>


您的server.xml看起来是正确的。您能显示CNFE的完整堆栈跟踪吗?以及您的任何应用程序的java代码,这些代码都会导致堆栈中的db2jcc*.jar文件出现在${server.config.dir}/resources/DB2目录下?@AndyGuibert附加的完整错误trace@M.Tamboli是的,他们存在。我已经使用设计模式将所有JAR都包括在内。@njr答案的第二部分解决了您的问题。也就是说,如果应用程序(或应用程序正在使用的libs)中的某些内容直接使用JDBC驱动程序类,则还需要配置应用程序,使其能够查看JDBC库jar(b