2016-02-03 18 views
5

Sto provando diversi livelli di isolamento per la mia applicazione a causa di un problema con gli aggiornamenti simultanei. Ho impostato il livello di isolamento attraverso un DataSource da cui ho la connessione al databaseImpostazione del livello di isolamento della transazione per H2 tramite un DataSource

BasicDataSource ds = new BasicDataSource(); 
ds.setDefaultTransactionIsolation(
    Connection.TRANSACTION_REPEATABLE_READ) 
/* more config ... */ 
ds.getConnection() 

Con Postgres 9.3 del database, gli aggiornamenti simultanei sulle righe genera un errore, che si prevede e secondo la documentazione postgres sul Standard SQL Transaction Isolation Levels
ERROR: could not serialize access due to read/write dependencies among transactions Questo errore si annulla come previsto quando si imposta il livello di isolamento su Connection.TRANSACTION_READ_COMMITTED

Provando a riprodurre questo comportamento con un database di memoria H2, i livelli di isolamento non sembrano modificare il risultato della mia richiesta. Anche con la disattivazione di isolamento del tutto con l'impostazione dell'URL database con LOCK_MODE=0 e/o Connection.TRANSACTION_READ_UNCOMMITTED ricevo errori sul aggiornamenti simultanei org.h2.jdbc.JdbcSQLException: Concurrent update in table "MyTable": another transaction has updated or deleted the same row

La mia domanda sarebbe: Come faccio a configurare la connessione H2 di utilizzare un livello di isolamento specifica, nessuno dei miei cambiamenti alla modalità di blocco o alla connessione mi aiuta a sbarazzarmi della JdbcSQLException.

risposta

0

H2 non dovrebbe essere in esecuzione in ambiente multi-thread. È possibile utilizzarlo per scopi di sviluppo, ecc. Ma su un ambiente con sottocarico pesante, è necessario utilizzare un'istanza di un DBMS completo.

+0

hmm, "non puoi usare H2 per quello" non è proprio la risposta che speravo :) – globalworming

Problemi correlati