Question

J'utilise la gestion des transactions Spring 2.5 et je l'installation suivante:

Bean1

@Transactional(noRollbackFor = { Exception.class })
public void execute() {
  try {
    bean2.execute();
  } catch (Exception e) {
    // persist failure in database (so the transaction shouldn't fail)
    // the exception is not re-thrown
  }
}

Bean2

@Transactional
public void execute() {
  // do something which throws a RuntimeException
}

L'échec est jamais persisté dans DB de Bean1 parce que l'ensemble de la transaction est annulée.

Je ne veux pas ajouter noRollbackFor Bean2 parce qu'il est utilisé dans beaucoup d'endroits qui n'ont pas la logique des exceptions d'exécution de gérer correctement.

Y at-il un moyen d'éviter ma transaction rollback que lorsque Bean2.execute () est appelée à partir Bean1?

Sinon, je pense que ma meilleure option est de persister mon échec dans une nouvelle transaction? Tout ce que je peux nettoyer le faire?

Était-ce utile?

La solution

Ceci est l'une des mises en garde des annotations ... votre classe n'est pas réutilisable!

Si vous souhaitez configurer vos transactions dans le fichier XML, si cela aurait été possible.

En supposant que vous utilisez la configuration XML: si elle est de ne pas consommer les ressources coûteuses, vous pouvez créer une autre instance de Bean2 pour l'utilisation du code que vous avez spécifié. C'est, vous pouvez configurer un été comme spécifié ci-dessus, et un sans retour de rouleau pour exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top