Bonjour,
Je test les transactions en Oracle, et j'obtiens des résultats bizarre.
Normalement, avec jdbc, on commence une transaction en définissant le niveau d'isolation, puis on enleve l'autocommit. Ensuite, la transaction est validé quand on fait le commit, ou quand on réactive l'autocommit.
j'ai fait une fonction qui fait cela :
-Création de la connection à la base Oracle
-connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
-connection.setAutoCommit(false);
-n=requette(connection,"select max(id) from matable");
-n=n+1;
-requette(connection,"insert into matable(id) values("+n+")");
-n=n+1;
-requette(connection,"insert into matable(id) values("+n+")");
-connection.commit();
Ensuite, je crée 2 threads qui appellent cette méthode. Le 2eme thread plante parce que les 2 thread il essai d'insérer les valeurs 1 et 2.
Est-ce que Oracle ne sait pas gérer les transactions de niveau serialisable ?
Est-ce qu'en Oracle on est obligé de passer par JTA pour utiliser les transactions ?
Est-ce qu'il y a une option non standard à configurer pour pouvoir utiliser les transactions ?
J'utilise Oracle 10 express, et j'ai essayé avec le driver ojdbc14-2.0.1.jar et la version 10.2.0.5, et dans les 2 cas, cela plante avec la même erreur.
Pour info, en MySQL cela fonctionne sans problème (j'ai mis 20 thread et il n'y a pas eu la moindre erreur).
Partager