J'utilise une transaction gérée par conteneur dans mon application EJB.Comment savoir si une méthode Java utilise ou non une nouvelle transaction JTA?
J'ai deux objets Java sans état, qui sont de classe A et classe B.
classe B est instancié dans une méthode de classe A.
dispose de deux méthodes de classe B: méthode A et la méthode B.
Méthode A utilise le type de transaction = REQUIRES_NEW
méthode B utilise le type d'opération requise =
Il y a Déclaration d'insertion de 2 sql dans les deux méthodes respectivement. La méthode A et la méthode B ont une instruction sql différente.
Je découvre que s'il y a une erreur dans la méthode B, tout dans la méthode A est l'annulation. Ce n'est pas ce que je veux. Je veux que tout dans la méthode A soit validé même si la méthode B soulève l'exception du système.
Ainsi, je ne pense pas que les méthodes A et B s'exécutent en utilisant une transaction différente. Puis-je savoir s'il existe un moyen pour system.out.println d'afficher une valeur booléenne indiquant qu'une transaction JTA est nouvelle ou non?
Merci.
Voici l'extrait de pseudo-code supplémentaire pour clarifier ma question ci-dessus.
stateless class A{
method(){
Class b = new Class B();
b.methodA();
b.methodB():
}
}
stateless class B(){
method A(){ // There is an insert statement here.}
method B(){ // There is another insert statement here.}
//If anything happen in method B, only rollback B, don't rollback A.
}
La transaction associée au thread courant peut être obtenue à partir de TransactionManager (https://docs.oracle.com/javaee/7/api/javax/transaction/TransactionManager.html) et comparée à une autre par son code de hachage. –
Si methodA a Requires_new, il ne devrait pas être annulé en cas de problèmes dans la méthode B, car elle devrait déjà être validée. Voir ce [post] (http://stackoverflow.com/a/10821117/3701228). Quel serveur utilisez-vous? – Gas
Salut Gas. J'utilise weblogic Je doute fortement que le problème soit causé par le réglage du serveur weblogic. Mon code devrait fonctionner. –