Bonjour,
Je rencontre un pb qui a pourtant l'air simple :
- un process A se répète toutes les 5mn et vide une table (TRUNCATE), insère des données (à jour) dedans et construit quelques index - le tout dans une seule transaction
- un process B (web) peut accéder aux données de cette table (SELECT) pour en afficher le contenu
Considérant la périodicité du process A et le caractère imprévisible du B (interface Web), il est normal que de temps en temps, le B tente de lire alors que le A est en pleine transaction. Pour amplifier le phénomène, j'ai introduit une pause juste avant le commit de ma transaction et effectivement le B attend, attend ... jusqu'au commit.
Des deux côtés, j'utilise un code basique :
con = myFactory.getConnection();
stm = con.createStatement();
...
Avec bien sûr en plus un con.setAutoCommit(false); pour le process A.
J'ai beau essayer de jouer avec les critères d'isolation de la connexion, de lecture du resultSet ... je ne parviens pas à faire que le web arrive à lire (les anciennes données) alors même que le B travaille.
Savez-vous comment faire ?
Merci de votre aide !
Sylvain Caillet
Partager