gpt4 book ai didi

java - 与 JRE 1.7 一起使用的 db2jcc.jar 版本错误?

转载 作者:行者123 更新时间:2023-11-28 22:18:56 25 4
gpt4 key购买 nike

找到解决方案:我最终将 Tomcat 8 上的 db2jcc4.jar 放在 Tomcat lib 文件夹中,我们可以开始了。然而,这对 Tomcat7 不起作用,所以我将 db2jcc.jar 从项目外部 jar 引用中取出,让服务器确定要使用的版本

原始问题

谷歌搜索为这个问题提供了大量含糊不清的引用资料:哪个版本的 db2jcc 与 jre 1.7 一起使用。

This page lists the driver downloads按 db2 版本,而不是 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 上开发和测试的项目是在符合 JRE 1.7 的 Eclipse 中构建的。那么为什么我们会得到这个错误呢?这似乎是版本兼容性问题?

更完整(但不完整)的堆栈跟踪

    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"
/>

最佳答案

这个问题已经在上面的评论和更新中得到了回答。

特别是:将已知可与给定 Tomcat 版本一起使用的 jar 文件放在服务器上的 lib 文件夹中,并将其从应用程序中删除,允许服务器处理连接而不是应用程序,尤其是当我们使用连接池时.

因此我们可以将 db2jcc.jar 放在 tomcat 7 上,将 db2jcc4.jar 放在 tomcat 8 上,并且在部署到任一服务器时都不需要更改应用程序代码。

关于java - 与 JRE 1.7 一起使用的 db2jcc.jar 版本错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com