Java Tomcat上的AbstractMethodError setBinaryStream

Java Tomcat上的AbstractMethodError setBinaryStream,java,tomcat,jpa,tomcat6,jndi,Java,Tomcat,Jpa,Tomcat6,Jndi,我正在tomcat上开发一个由hibernate支持的JPA应用程序。我们也在使用Spring和AOP。该数据库是DB29.7社区版。我们使用SpringJNDI查找从tomcat检索数据源 它是与Liferay门户捆绑在一起的tomcat 6.0.26。更新tomcat不是一个选项,因为我们无法将Liferay升级到更新的版本/捆绑包 在我们的测试用例中,持久化运行良好,但是使用tomcat我们得到以下异常。在我想要存储附件之前,应用程序一直运行良好 Caused by: java.lang.

我正在tomcat上开发一个由hibernate支持的JPA应用程序。我们也在使用Spring和AOP。该数据库是DB29.7社区版。我们使用SpringJNDI查找从tomcat检索数据源

它是与Liferay门户捆绑在一起的tomcat 6.0.26。更新tomcat不是一个选项,因为我们无法将Liferay升级到更新的版本/捆绑包

在我们的测试用例中,持久化运行良好,但是使用tomcat我们得到以下异常。在我想要存储附件之前,应用程序一直运行良好

Caused by: java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy432.setBinaryStream(Unknown Source)
at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$4$1.doBind(BlobTypeDescriptor.java:163)
看看其他问题,问题似乎是使用了jdbc3驱动程序而不是jdbc4驱动程序。但是,我确保我们有正确的DB2驱动程序版本“db2jcc4.jar4.14.113”。相同的驱动程序适用于我们的测试用例

当我们在别处搜索时,问题是setBinaryStream是用long而不是int调用的,但是由于我没有直接调用任何东西,所以我无法更改它

有关实体:

@Table( name = "ATTACHMENT")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "somenamespace", name = "Attachment")
public class Attachment implements Serializable {
   private static final long serialVersionUID = 1L;

    /**
    */
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "ID", nullable = false)
   @Basic(fetch = FetchType.EAGER)
   @Id
   @XmlElement
   Integer id;
   /**
    */

   @Column(name = "ATTACHMENT", nullable = false)
   @Basic(fetch = FetchType.EAGER)
   @Lob
   @XmlElement
   byte[] attachment;

      .. getters/setters and other properties
}
可以做些什么来避免这个问题,从而像在测试用例中一样保存实体


更新:可能不是db驱动程序本身,但tomcat连接池不兼容JDBC4。上面说“DBCP1.3提供了对JDBC3.0的支持”。在查看时,用普通dbcp交换它似乎不是一个好主意。

过了一会儿,我找到了一个解决方案

我下载了Tomcat7并通过TomcatDBCP进行了复制


tomcat dbcp 7包含dbcp 1.4并提供JDBC 4.0支持。

过了一会儿,我找到了一个解决方案

我下载了Tomcat7并通过TomcatDBCP进行了复制

TomcatDBCP7包含DBCP1.4并提供JDBC4.0支持