找到解决方案:我在Tomcat lib文件夹中将db2jcc4.jar放在Tomcat 8上,我们很高兴。但是,同样不适用于Tomcat7,因此我将db2jcc.jar从项目外部jar引用中取出,让服务器确定使用哪个版本
原始问题
谷歌搜索为这个问题提出了一系列神秘的参考资料:与jre 1.7一起使用的db2jcc版本。
db2版本This page lists the driver downloads,但不是JRE。
让我想到这个谜团的问题是我们有两个Tomcat服务器,一个运行JRE 1.8,另一个运行1.7。奇怪的是,前者运行的是Tomcat 7和后来的Tomcat 8.(你可以问我但是我没有答案)
所以我们的开发代码运行正常,从我们的Tomcat 7 JRE 1.8系统连接到db2,但是部署到我们的Tomcat 8 JRE 1.7服务器的其他东西可能因为更新到JRE 1.8而破坏,所以我们怀疑是一个错误,显示下面,是JRE 1.7和我们的db2jcc.jar文件之间的版本不匹配。
但是,这可能是Tomcat 8的一个问题。
从堆栈跟踪中提取的错误:
java.lang.AbstractMethodError: com.ibm.db2.jcc.t4.b.isValid(I)Z
现在最后一个问题,我在Tomcat 7 JRE 1.8上开发和测试的项目是在Eclipse中构建的,符合JRE 1.7标准。那我们为什么会得到这个错误?它看起来是版本兼容性问题吗?
更完整(但不完整)的堆栈跟踪
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause javax.servlet.ServletException: java.lang.AbstractMethodError: com.ibm.db2.jcc.t4.b.isValid(I)Z
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:908)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:837)
org.apache.jsp.getTimesheetsForUser_jsp._jspService(getTimesheetsForUser_jsp.java:112)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause java.lang.AbstractMethodError: com.ibm.db2.jcc.t4.b.isValid(I)Z
org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)
org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:226)
org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:302)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2208)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2191)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1945)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
com.hr.timesheets.JDBCConnection.queryProdData(JDBCConnection.java:226)
com.hr.timesheets.TimeSheetQueryManager.getTimesheets(TimeSheetQueryManager.java:624)
com.hr.timesheets.TimeSheetQueryManager.generateUploadsForUser(TimeSheetQueryManager.java:343)
org.apache.jsp.getTimesheetsForUser_jsp._jspService(getTimesheetsForUser_jsp.java:94)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
任何人都可以看到我们的团队遗失的明显事物吗?其他人之前有这个问题吗?
注意:我们使用context.iml文件中配置的池连接资源,如下所示:
<Resource auth="Container"
name="jdbc/hrdb2"
type="javax.sql.DataSource"
driverClassName="com.ibm.db2.jcc.DB2Driver"
url="jdbc:db2://hrdb2.hr.com:50200/time"
username="redacted"
password="redacted"
maxIdle="10"
maxActive="400"
maxWait="5"
removeAbandoned="true"
removeAbandonedTimeout="1200"
/>
答案 0 :(得分:1)
此问题已在上述评论及更新中得到解答。
具体来说:将已知的jar文件与服务器上的lib文件夹中的给定Tomcat版本一起使用,并将其从应用程序中删除,允许服务器处理连接而不是应用程序,尤其是当我们使用连接池时。
因此我们可以将tom2 7和db2jcc4.jar上的db2jcc.jar放在tomcat 8上,并且在部署到任一服务器时不需要更改应用程序代码。
答案 1 :(得分:0)
在升级db2驱动程序版本时,我的处境非常艰难,我的POM.xml中存在db2jcc4依赖项,并通过系统路径$ {project.basedir} / src / main / webapp / WEB-INF / lib找到它/db2jcc-db2jcc4.jar 同样在我的wepapp / WEB-INF / lib文件夹中,我坐在那里有适当的db2 jar,但仍然遇到上面提到的相同错误。 我正在使用Intellij Idea作为我的IDE,错过了一些细节,即从项目设置>库中删除我设置的db2的旧依赖项,而我的项目仍指向db2jcc旧版本,从那里删除了旧库,而我项目再次开始运行。