Feder iBatis mysql intermittierendes asynchrones Problem
Frage
Ich verwende ibatis im Frühjahr zu schreiben, um mysql.
ich einen intermittierenden Fehler haben. Bei jedem Zyklus eines Prozesses schreibe ich zwei Zeilen in den db. Der nächste Zyklus las ich in den Zeilen aus dem vorherigen Zyklus. Manchmal (einmal in 30, manchmal öfter, mal weniger) bekomme ich nur wieder eine Zeile aus der db.
Ich habe alles Caching ausgeschaltet ich mich vorstellen kann. Meine sqlmap-config.xml nur sagt:
<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>
<sqlMap resource="ibatis/model/cognitura_core.xml"/>
Gibt es eine Asynchronität oder auch Caching Feder oder iBatis oder die MySQL-Treiber, dass ich fehle?
Mit Feder 3.0.5, 2.3.5 Mybatis, mysql-connector-java 5.0.5
EDIT 1:
Könnte es sein, weil ich einen Pool von Verbindungen bin mit (c3p0)? Ist es möglich, der Einsatz noch läuft, wenn ich lese. Es ist komisch, aber ich dachte, alles würde synchron werden auftreten, wenn ich asynch explizit deklariert?
Lösung
Rufst du SqlSession.commit () nach den Einsätzen? C3P0 asynchron „schließt“ die Verbindungen, die unter den Abdeckungen verpflichten können anrufen. Das könnte das Verhalten erklären Sie sehen.
Andere Tipps
Ich bin immer ein ähnliches Verhalten. Das ist, was ich tue. Ich habe eine alte Version von iBatis ich nicht für eine Modernisierung planen. Sie können ganz einfach diese in einen Dekorateur bewegen.
SqlMapSession session = client.openSession();
try {
try {
session.startTransaction();
// do work
session.commitTransaction();
// The transaction should be committed now, but it doesn't always happen.
session.getCurrentConnection().commit(); // Commit again :/
} finally {
session.endTransaction();
}
} finally {
session.close(); // would be nice if it was 'AutoCloseable'
}