Question

J'utilise ibatis au printemps pour écrire à MySQL.

J'ai un bug intermittent. A chaque cycle d'un processus que j'écris deux lignes à la db. Le cycle suivant je l'ai lu dans les lignes du cycle précédent. Parfois (une fois dans 30, parfois plus souvent, parfois moins), je ne reçois que de retour d'une ligne de la db.

J'ai désactivé la mise en cache, je peux penser. Mon sqlmap-config.xml dit simplement:

<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>

<sqlMap resource="ibatis/model/cognitura_core.xml"/>

Y at-il un certain asynchronisme, ou la mise en cache d'autre à ressort ou Ibatis ou le pilote mysql que je suis absent?

Utilisation de ressort 3.0.5, 2.3.5 mybatis, mysql-connector-java 5.0.5

EDIT 1:

Serait-ce parce que je suis sur un pool de connexions (C3P0)? Est-il possible l'insert est toujours en cours d'exécution lorsque je lis. Il est bizarre, cependant, je pensais que tout serait INTERVENUES à moins que je synchroniquement explicitement déclaré asynch?

Était-ce utile?

La solution

Demandez-vous SqlSession.commit () après que les inserts? C3P0 en mode asynchrone « se ferme » les connexions qui peuvent appellerez commettre sous les couvertures. Cela pourrait expliquer le comportement que vous voyez.

Autres conseils

Je reçois un comportement similaire. Voilà ce que je fais. J'ai une ancienne version de Ibatis Je ne prévois pas de mise à niveau. Vous pouvez facilement déplacer cela dans un décorateur.

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'
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top