Bonjour,
Je voudrai utiliser jboss tout en utilisant JDBC (et en gérant complètement mes transactions à la main). J'ai comme point d'entrée un service rest qui fait entre 1 et n appel à des beans. Chaque méthode de ma classe rest est donc sur ce modèle :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
//Préparation de la connection :
Connection connection = this.maDataSource.getConnection(login, motDePasse);
connection.setAutoCommit(false);
try {
//appel aux beans
monbean1.monservice1(connection);
monbean2.monservice2(connection);
...
connection.commit();
} catch (EJBTransactionRolledbackException e) {
connection.rollback();
throw e;
} catch (MonTypeRuntimeException e) {
connection.rollback();
throw e;
} catch (MonTypeMetierException e) {
connection.rollback();
throw e;
} finally {
connection.close();
} |
Bref, ma première question est : Est il possible de faire en sorte de récupérer une MonTypeRuntimeException/MonTypeMetierException plutôt qu'une EJBTransactionRolledbackException (en bref, que je puisse récupérer mon exception telle que je l'ai lancée)
Mon second souci qui en découle, quand je fait le rollback sur ma connection après avoir récupéré mon EJBTransactionRolledbackException, j'ai l'erreur suivante :
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/testWeb].[Resteasy]] (http-localhost-127.0.0.1-8080-2) "Servlet.service()" pour la servlet Resteasy a généré une exception: org.jboss.resteasy.spi.UnhandledException: java.sql.SQLException: Transaction cannot proceed STATUS_MARKED_ROLLBACK
Si j'enlève le rollback, j'ai encore un souci.
En fait mon service que je teste sert à l'inscription. J'ai volontairement placé dedans un "throw MonTypeRuntimeException" pour tester le rollback, mon service ressemble donc à :
1 2 3 4 5 6 7
|
this.checkUniciteProfil(profil, connection);
//persistence en sql natif
..
//lancement exception
throw MonTypeRuntimeException("Exception de test") |
A la première exécution, j'ai bien mon exception de test qui est lancé.
A la seconde exécution, j'ai une erreur me disant que mon pseudo n'est pas unique
A la troisième exécution, je me retrouve à nouveau sur mon exception de test
Bref, une fois sur deux, j'ai l'impression que ma transaction est "En cours d'annulation" et que les données enregistrées dedans sont prises en compte dans ma requête de contrôle d'unicité du pseudo !
Par contre, si je lance une MonTypeRuntimeException/MonTypeMetierException directement dans le service Rest, je la récupère dans le catch correspondant, et le rollback fonctionne bien (je récupère à chaque fois mon exception de test)
Donc voilà j'aimerai que JBoss me laisse gérer entièrement manuellement mes transactions !
Après je débute un peu sur le sujet, peut être que je fait totalement fausse route, dans ce cas là je suis d'accord pour changer ma façon de faire !
Ma seule contrainte est de pouvoir continuer à tout faire en SQL, mon modèle est relativement simple et ne justifie pas d'utiliser Hibernate ou autre...
Merci, toute suggestion pourra m'être utile, ça fait un moment que je cherche sur ce problème, mais sans rien trouver de concret !
Partager