启动 WAS LP 服务器时出现错误 ClassNotFoundException: com.ibm.db2.jcc.DB2Driver

Getting error when starting WAS LP server ClassNotFoundException: com.ibm.db2.jcc.DB2Driver

当我尝试启动 Web Sphere LP 服务器 (WP 7) 时,Eclipse 控制台出现以下错误。

[2017-10-06 12:04:46,952] [ERROR] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.error [19] SimpleDataSource: Error while loading properties. Cause: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Driver 
java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Driver
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at com.ibatis.common.resources.Resources.classForName(Resources.java:267)
    at com.ibatis.common.resources.Resources.instantiate(Resources.java:283)
    at com.ibatis.common.jdbc.SimpleDataSource.initialize(SimpleDataSource.java:199)
    at com.ibatis.common.jdbc.SimpleDataSource.<init>(SimpleDataSource.java:116)
    at com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.initialize(SimpleDataSourceFactory.java:31)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.process(SqlMapConfigParser.java:220)
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:46)
    at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
    at com.pm.testdatamgt.persistence.util.SqlMapBuilder.build(SqlMapBuilder.java:67)
    at com.pm.testdatamgt.persistence.util.SqlMapConfig.<clinit>(SqlMapConfig.java:71)
    at com.pm.testdatamgt.persistence.util.SqlMapConfigFactory.getSqlMapInstance(SqlMapConfigFactory.java:37)
    at com.pm.persistence.dao.impl.ReferenceCodeDaoImpl.getRefCatIdForSname(ReferenceCodeDaoImpl.java:95)
    at com.pm..service.impl.ReferenceCodeServiceImpl.initAttributeNames(ReferenceCodeServiceImpl.java:99)
    at com.pm.testdatamgt.startup.StartupServlet.loadVariables(StartupServlet.java:139)
    at com.pm.testdatamgt.startup.StartupServlet.init(StartupServlet.java:125)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:332)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadOnStartupCheck(ServletWrapper.java:1428)
    at com.ibm.ws.webcontainer.webapp.WebApp.doLoadOnStartupActions(WebApp.java:1205)
    at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinally(WebApp.java:1173)
    at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1075)
    at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6595)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:468)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApplication(DynamicVirtualHost.java:463)
    at com.ibm.ws.webcontainer.osgi.WebContainer.startWebApplication(WebContainer.java:1120)
    at com.ibm.ws.webcontainer.osgi.WebContainer.access[=12=]0(WebContainer.java:104)
    at com.ibm.ws.webcontainer.osgi.WebContainer.run(WebContainer.java:932)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522)
    at java.util.concurrent.FutureTask.run(FutureTask.java:277)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.lang.Thread.run(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>**

DB2 Jars 在指定位置。 我是否遗漏了一些东西或任何指针如何调试它??

谢谢

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

com.ibm.db2.jcc.DB2DataSource
com.ibm.db2.jcc.DB2ConnectionPoolDataSource
com.ibm.db2.jcc.DB2XADataSource

而不是异常中显示的驱动程序class,

com.ibm.db2.jcc.DB2Driver

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

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