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

:我将db2jcc4.jar放在Tomcat 8的Tomcat lib文件夹中的Tomcat

8上,我们一切顺利。但是,对于Tomcat7而言,这同样不起作用,因此我从项目外部jar引用中删除了db2jcc.jar,然后让服务器确定要使用哪个版本

Googling为这个问题提供了一系列神秘的参考:与jre 1.7一起使用的db2jcc版本。

该页面列出了按db2版本而不是JRE

下载的驱动程序。

使我感到困惑的问题是,我们有两台Tomcat服务器,一台运行JRE 1.8,另一台运行1.7。奇怪的是,前者正在运行Tomcat

7,而后者正在运行Tomcat8。(您可以问,但我对此没有答案)

因此,我们的开发代码运行良好,可以从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"

/>

回答:

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

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

因此,我们可以将db2jcc.jar放置在tomcat 7上,将db2jcc4.jar放置在tomcat

8上,并且在部署到任一服务器时都不需要更改应用程序代码。

以上是 与JRE 1.7一起使用的db2jcc.jar的错误版本? 的全部内容, 来源链接: utcz.com/qa/421117.html

回到顶部