J'ai un EJB impliqué dans une transaction globale. Il y a une partie du code qui, si elle échoue, je veux annuler explicitement, bien que je ne veux pas que toute la transaction échoue.Annulation de légende dans une transaction distribuée: possible?
Comme rollback est interdit dans un CMT J'ai créé un BMT et essayé le code suivant:
connection.setAutoCommit(false);
Savepoint sp= connection.setSavepoint();
try{
//my code editing DB that could possibly fail
}catch(SomeException ex){
connection.rollback(sp);
}
De cette façon, je défais tout simplement ma modification db locale mais je aussi ne se propagent pas ce ne parviennent pas à l'extérieur. Quoi qu'il en soit ce programme échoue avec comme:
« est interdite dans un point d'enregistrement d'une transaction distribuée »
Y at-il une autre approche pour résoudre ce problème?
La nouvelle transaction sera également validée si cela fonctionne. Sachez simplement que la nouvelle transaction est indépendante de la première, et si quelque chose fait reculer la première transaction (pour une autre raison), la nouvelle pièce aura encore été validée. – kaczyns