L'approche par programmation représente la transaction gérée par composant et l'approche déclarative représente la transaction gérée par conteneur.
L'application J2EE utilise l'interface JTA javax.transaction.UserTransaction pour délimiter par programmation une frontière de transaction pour un ensemble de changements apportés à la ressource protégée. Vous pouvez utiliser les transactions gérées par composant dans l'environnement du servlet et l'environnement EJB. Pour ce dernier, vous devez définir l'attribut de la transaction dans son descripteur de déploiement en tant que TX_BEAN_MANAGED.
Une transaction commence généralement par un appel de la méthode UserTransaction.begin(). Lorsque le composant de l'application est prêt pour la validation des changements, il appelle la méthode UserTransaction.commit() pour coordonner et valider ces changements. S'il doit annuler la transaction, il appelle la méthode UserTransaction.rollback() et tous les changements sont annulés. Par exemple :
// Obtenir la transaction utilisateur javax.transaction.UserTransaction transaction = ejbcontext.getUserTransaction(); // Démarrer la transaction transaction.begin(); // Apporter des changements aux ressources.protégées // Par exemple, utiliser l'interface de l'interaction CCI de J2EE/CA // pour soumettre des changements à un système EIS interaction.execute(interactionSpec, input, output); if (/* decide to commit */) { // valider la transaction transaction.commit(); } else { /* decide to roll back */ // annuler la transaction transaction.rollback(); }
Les transactions gérées par conteneur s'utilisent uniquement dans l'environnement EJB. Le composant EJB définit une transaction gérée par conteneur de manière déclarative via l'attribut de transaction dans le descripteur de déploiement (tel que TX_REQUIRED). Une transaction gérée par conteneur est géré par le conteneur d'EJB. Le conteneur appelle les méthodes appropriées (démarrer, valider ou annuler) pour le composant EJB. Cette approche déclarative simplifie les appels par programmation dans l'EJB.
Informations connexes : pour plus d'informations sur l'architecture J2EE et les définitions JTA, voir http://java.sun.com/j2ee/docs.html.