Domanda

Sto usando iBATIS in primavera a scrivere a mysql.

Ho un bug intermittente. Su ogni ciclo di un processo scrivo due righe al db. Il prossimo ciclo ho letto nelle righe del ciclo precedente. A volte (una volta in 30, a volte più di frequente, a volte meno) Ho solo tornare una riga dal db.

Ho spento tutto il caching che posso pensare. Il mio sqlmap-config.xml dice semplicemente:

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

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

C'è qualche asincronia, oppure di caching per la primavera o iBatis o il driver mysql che mi manca?

Utilizzando primavera 3.0.5, 2.3.5 mybatis, mysql-connector-java 5.0.5

EDIT 1:

Potrebbe essere perché sto utilizzando un pool di connessioni (c3p0)? E 'possibile l'inserto è ancora in esecuzione quando sto leggendo. E 'strano, però, ho pensato che tutto sarebbe verificando in modo sincrono a meno che non esplicitamente dichiarato asincrono?

È stato utile?

Soluzione

sta chiamando SqlSession.commit () dopo gli inserti? C3p0 asincrono "chiude" le connessioni, che può essere chiamata impegnano sotto le coperte. Questo potrebbe spiegare il comportamento che state vedendo.

Altri suggerimenti

Mi sto comportamento simile. Questo è quello che sto facendo. Ho una vecchia versione di iBatis Non ho intenzione di aggiornamento. Si può facilmente spostare questo in un decoratore.

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'
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top