java.lang.AbstractMethodError: bei org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setCharacterStream(DelegatingPreparedStatement.java:328)
Ich habe einen sehr nervigen problem, und ich kann nicht scheinen, um die Antwort zu finden überall.
Meine Anwendung löst diese Ausnahme aus, wenn Sie versuchen zu bestehen und @Lob:
java.lang.AbstractMethodError
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setCharacterStream(DelegatingPreparedStatement.java:328)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setCharacterStream(DelegatingPreparedStatement.java:328)
at java.lang.reflect.Method.invoke(Method.java:601)
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 $Proxy32.setCharacterStream(Unknown Source)
at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$3$1.doBind(ClobTypeDescriptor.java:83)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2747)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3152)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3087)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3416)
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:140)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:276)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1213)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:402)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
...(more)
Ich bin läuft auf Tomcat-6.0.36(habe auch versucht tomcat 7).
MySQL-Datenbank 4.1.22.
Code kompiliert wird mit jdk 7 und baute mit gradle.
Meine Abhängigkeiten sind:
+--- javax.mail:mail:1.4 -> 1.4.1
| \--- javax.activation:activation:1.1
+--- org.slf4j:slf4j-api:1.5.6 -> 1.6.1
+--- log4j:log4j:1.2.13 -> 1.2.16
+--- org.apache.wicket:wicket:1.4.15
| \--- org.slf4j:slf4j-api:1.5.8 -> 1.6.1
+--- org.apache.wicket:wicket-extensions:1.4.15
| +--- org.apache.wicket:wicket:1.4.15 (*)
| \--- org.slf4j:slf4j-api:1.5.8 -> 1.6.1
+--- mysql:mysql-connector-java:5.1.26
+--- com.microsoft.sqlserver:sqljdbc4:4.0
+--- com.itextpdf:itextpdf:5.4.2
+--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.0.Final -> 1.0.1.Final
+--- org.hibernate:hibernate-core:4.1.9.Final
| +--- antlr:antlr:2.7.7
| +--- org.jboss.logging:jboss-logging:3.1.0.GA
| +--- org.javassist:javassist:3.17.1-GA
| +--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.0.Final
| +--- dom4j:dom4j:1.6.1
| | \--- xml-apis:xml-apis:1.0.b2
| +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final
| \--- org.hibernate.common:hibernate-commons-annotations:4.0.1.Final
| \--- org.jboss.logging:jboss-logging:3.1.0.CR2 -> 3.1.0.GA
+--- org.hibernate:hibernate-entitymanager:4.1.9.Final
| +--- org.jboss.logging:jboss-logging:3.1.0.GA
| +--- org.javassist:javassist:3.17.1-GA
| +--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.0.Final
| +--- dom4j:dom4j:1.6.1 (*)
| +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final
| +--- org.hibernate:hibernate-core:4.1.9.Final (*)
| \--- org.hibernate.common:hibernate-commons-annotations:4.0.1.Final (*)
+--- foo.bar.data-services:foor-bar-data:2.0.0.275
| +--- org.slf4j:slf4j-api:1.6.1
| +--- org.hibernate:hibernate-core:4.1.6.Final -> 4.1.9.Final (*)
| +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api::1.0.1.Final -> 1.0.1.Final
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.16
| \--- commons-configuration:commons-configuration:1.9
| +--- commons-lang:commons-lang:2.6
| \--- commons-logging:commons-logging:1.1.1
+--- javax.transaction:jta:1.1
+--- dom4j:dom4j:1.6.1 (*)
+--- antlr:antlr:2.7.6 -> 2.7.7
+--- commons-collections:commons-collections:3.2.1
+--- commons-configuration:commons-configuration:1.9 (*)
+--- commons-dbcp:commons-dbcp:1.4
| \--- commons-pool:commons-pool:1.5.4 -> 1.5.7
+--- commons-pool:commons-pool:1.5.7
+--- commons-logging:commons-logging:1.1.1
+--- commons-dbutils:commons-dbutils:1.4
+--- commons-lang:commons-lang:2.6
+--- commons-io:commons-io:2.4
+--- org.apache.commons:commons-email:1.2
| +--- javax.mail:mail:1.4.1 (*)
| \--- javax.activation:activation:1.1
+--- javax.servlet:servlet-api:2.5
+--- javax.servlet.jsp:jsp-api:2.1
\--- org.slf4j:slf4j-log4j12:1.5.6 -> 1.6.1 (*)
So sah die Ausnahme, wie es scheint, versucht die Anwendung zu nennen, die tomcat-dbcp.jar in dem CATALINA_BASE/lib-Ordner. Aber ich würde erwarten, es zu nennen meine commons-dbcp.jar in meinem classpath.
Aber ehrlich gesagt, ich bin ratlos, ich habe versucht, eine Menge Dinge, aber kann nicht scheinen, um diese Arbeit...
Vielen Dank im Voraus für Ihre Hilfe. Sagen Sie mir, wenn Sie weitere Informationen benötigen.
EDIT 1:
server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" logAbandoned="true" maxActive="100" maxIdle="10" maxWait="10000" name="jdbc/foo" removeAbandoned="true" removeAbandonedTimeout="300" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/foo?autoReconnect=true&dumpQueriesOnException=true" username="root" validationQuery="select 1"/>
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" logAbandoned="true" maxActive="20" maxIdle="5" maxWait="10000" name="jdbc/bar" removeAbandoned="true" removeAbandonedTimeout="300" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/bar?autoReconnect=true&dumpQueriesOnException=true" username="root" validationQuery="select 1"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
<Context docBase="foo" path="/foo" reloadable="true" source="org.eclipse.jst.j2ee.server:foo"/></Host>
</Engine>
</Service>
</Server>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung war die Verwendung von tomcat 7. Dies ist eine version von tomcat-dbcp.jar tatsächlich hat die DelegatingPreparedStatement.setCharacterStream, die die Anwendung benötigt.
Mein problem war, dass, wenn ich versuchte es auf meinem tomcat 7 server, ich habe immer noch den gleichen Fehler an der gleichen Stelle in meiner Anwendung. Verursacht wurde dies durch eine alte version von mysql-connector-java(5.0.5, wenn ich mich richtig erinnere), das war noch in meiner tomcat lib-Ordner durch frühere versuche, diese Arbeit zu machen. Diese ältere version hatte offenbar Vorrang vor meinen eigenen mysql-connector-java(neueste version), dass ich als Abhängigkeit. Denn dies gab mir die gleiche Ausnahme, es schien, dass es nicht zu ändern alles, was in meiner situation, während es tatsächlich der Fall war.
Als ich dachte, dieses heraus, der rest war einfach, mein problem war nur, dass ich nicht das upgrade sehr leicht zu tomcat 7, da andere Anwendungen, die derzeit ausgeführt werden auf unserem tomcat-6-version in der Produktionsumgebung. Also die Lösung war die Kopie der tomcat-dbcp.jar von einem tomcat 7 dist unseren tomcat 6 server und ersetzen, was schon da war.
Hoffe das hilft anderen auch, vielen Dank an alle für all die Hilfe in jedem Fall!
AbstractMethodError ist eine Unterklasse von LinkageError, die fast immer zeigt, dass etwas falsch mit Ihrem classpath-Bibliotheken wurden nicht zusammengestellt sind, geladen werden, zusammen.
Vorausgesetzt, Ihr library-Versionen line-up mit meiner momentanen Forschung...
Die Linie, die das werfen der exception ist DelegatingPreparedStatement:328. Es sieht wie folgt aus:
Wenn Sie klicken Sie sich durch
setCharacterStream
, Sie sehen, es ist tagged as@since 1.6
.So, man soll:
Stellen Sie sicher, dass ausführen unter einem 1.6+ VM. 🙂
Überprüfen, dass es keine andere Implementierungen von
java.sql.PreparedStatement
irgendwo in den classpath. Die Art, wie ich in der Regel tun dies (in einem Unix-ähnlichem system; Sie sind auf Ihre eigenen mit Windows 😉 ist:cd /path/to/my/jars
grep -rli 'java/sql/PreparedStatement' .
Dies ist eine brute-force-Weg, herauszufinden, welche Gläser enthalten, welche Klassen. Es funktioniert, weil das "directory-Struktur" einer ZIP-Datei nur text enthält, nicht komprimiert ist.
Glück! 🙂
Ich bin nicht sicher, aber wenn Sie geändert mit den Neuesten Treiber
Ich auch auf dieses problem und fand diese Frage. Ich nahm den Rat in der letzten Antwort, aber ich wollte nicht kopieren tomcat-dbcp.jar aber nur eingeschaltet, um eine neue version in meine pom.xml und es funktioniert! Vielen Dank für die Beratung!
Hatte das gleiche problem und gelöst, indem Sie die Treiber-Bibliothek.
Die Umsetzung der DelegatingPreparedStatement Delegierten der setCharacterStream Aufruf seiner delegieren, das ist der Grund, warum der Fahrerwechsel ist die Umsetzung das problem lösen kann (wenn die Durchführung der Delegierten gehört, dass Methode)