Confinement de transaction locale
Un confinement de transaction locale (LTC) permet de définir le comportement du serveur d'applications dans un contexte de transaction non spécifié.
Un contexte de transaction non indiqué est défini dans la spécification Enterprise JavaBeans, version 2.0 et ultérieure. Par exemple, voir la spécification de cette technologie.
Une LTC est une portée d'unité de travail liée dans laquelle aucune transaction locale de gestionnaire de ressources (RMLT) n'est accessible ou plusieurs transactions locales de gestionnaires de ressources (RMLT) sont accessibles. Le confinement LTC définit la limite à laquelle toutes les transactions RMLT doivent être terminées. Toutes les RMLT non terminées sont converties, en fonction de la stratégie, par le conteneur. Par défaut, un confinement LTC est local par rapport à une instance de bean et n'est pas partagé entre des beans, même s'ils sont gérés par le même conteneur. Les LTC sont démarrées par le conteneur avant l'envoi d'une méthode dans un composant d'application d'entreprise, telle qu'un bean enterprise ou une servlet, chaque fois que l'envoi est effectué en l'absence d'un contexte de transaction global. Les LTC sont exécutés par le conteneur en fonction de la limite LTC configurée par l'application, par exemple, à la fin de l'envoi de la méthode. Il n'existe pas d'interface de programmation pour le support des confinements LTC ; les confinements LTC sont gérés exclusivement par le conteneur. Le déployeur d'application configure les LTC dans des composants individuels, soit une application Web ou EJB, en utilisant les attributs de transaction du descripteur de déploiement d'application.
Un confinement de transaction locale (LTC) peut être configuré dans le descripteur de déploiement du composant d'application pour être partagé entre les composants d'application, notamment les composants d'application web et les beans enterprise qui utilisent des transactions gérées par conteneur pour que les composants puissent gérer les connexions sans utiliser une transaction globale. Le partage d'un gestionnaire de ressources unique entre des composants d'application améliore la performance, augmente l'évolutivité et réduit le conflit d'accès pour les ressources.
Les confinements LTC peuvent être partagés par plusieurs composants, notamment des composants d'application web et des beans enterprise utilisant des transactions gérées par conteneur. Ce partage est utile lorsque, par exemple, des appels include() de composant web sont fréquemment utilisés, où une unité d'exécution peut avoir plusieurs connexions bloquées par des LTC dans différents modules Web. Dans un tel cas, l'application peut rencontrer des blocages de code sous charge, lorsque les unités d'exécution commencent à s'attendre elles-mêmes pour libérer des connexions. Pour résoudre cette difficulté sans utiliser une transaction globale, indiquez que les composants d'application peuvent partager les LTC en définissant l'attribut Shareable dans le descripteur de déploiement de chaque composant. Vous devez utiliser un descripteur de déploiement. Vous ne pouvez pas indiquer cet attribut si une annotation a été utilisée.
Lorsque vous définissez l'attribut Shareable, le fichier XML du descripteur de déploiement étendu contient les lignes de code suivantes :
<local-transaction boundary="BEAN_METHOD" resolver="CONTAINER_AT_BOUNDARY"
unresolved-action="COMMIT" shareable="true"/>
Pour bénéficier de tous les avantages d'un LTC partagé, vérifiez également que la référence de ressource de chaque composant adopte par défaut les connexions partageables.

Les applications qui utilisent des LTC partageables ne peuvent pas valider ou annuler explicitement les connexions de gestionnaire de ressources utilisées dans un LTC partageable, bien qu'elles puissent utiliser des connexions ayant une fonction autoCommit. Cela permet à chaque composant d'encapsuler correctement l'utilisation des connexions et d'éviter à un composant d'avoir à supposer le comportement des autres composants qui partagent la connexion.
Si une application démarre une tâche de validation non automatique dans un LTC pour lequel l'attribut Resolver Application a la valeur true, une exception se produit lors de l'exécution. Par exemple dans une connexion JDBC, une tâche de validation non automatique est une tâche qu'exécute l'application après avoir utilisé la méthode setAutoCommit(false) pour désactiver l'option de validation automatique sur la connexion. Les beans enterprise utilisant des transactions gérées par bean (BMT) ne peuvent pas être assemblés avec l'attribut Shareable défini sur la configuration LTC.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- La répartition des composants de l'application se produit sans interposition du conteneur : par exemple, pour une méthode de bean session sans état create ou une unité d'exécution lancée par un servlet.
- Composants Web J2EE 1.2.
- Beans enterprise de transaction gérée par bean (BMT) J2EE 1.2.
Un confinement de transaction locale et une transaction globale ne peuvent pas coexister. Si la répartition des composants de l'application est effectuée en l'absence de transaction globale, le conteneur établit toujours un confinement LTC. La seule exception à ce comportement est liée à un envoi de composant d'application sans interposition de conteneur, par exemple, pour une méthode create de bean session sans état.
La portée d'un confinement de transaction locale peut être définie dans un contexte ActivitySession dont la durée de vie dépasse celle de la méthode de bean enterprise dans laquelle il est lancé, comme indiqué dans la rubrique relative aux sessions ActivitySession et aux contextes de transaction.