L'approche par programmation représente la transaction gérée par composant (ou par bean) et l'approche déclarative représente la transaction gérée par conteneur.
L'application JavaEE 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 d'interaction CCI de Java EE ou JCA
// 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 le composant EJB.