Contenedor de transacciones locales
Un contenedor de transacciones locales (LTC) se utiliza para definir el comportamiento del servidor de aplicaciones en un contexto de transacción no especificado.
Un contexto de transacciones no especificado está definido en la especificación Enterprise JavaBeans, versión 2.0 o posterior. Por ejemplo, consulte la especificación para esta tecnología.
Un LTC es un ámbito de unidad de trabajo enlazado, en el que se puede acceder a cero o más RMLT (transacciones locales del gestor de recursos). El LTC define los límites en el que todas las RMLT deben completarse. Cualquier RMLT que no se haya completado la resolverá el contenedor, según lo que indique la política. Por omisión, un LTC es local respecto a una instancia de bean; no se comparte entre beans, aunque estos beans estén gestionados por el mismo contenedor. El contenedor inicia los LTC antes de asignar un método en un componente de aplicación de empresa, por ejemplo un enterprise bean o servlet, siempre que se produzca la asignación en ausencia de un contexto de transacción global. El contenedor completa los LTC dependiendo del límite de LTC configurado por la aplicación; por ejemplo, al final de la asignación de método. No hay ninguna interfaz programática para el soporte de LTC; los LTC son gestionados exclusivamente por el contenedor. El desplegador de aplicaciones configura contenedores LTC en componentes de aplicación individuales, una aplicación web o EJB, mediante atributos de transacción en el descriptor de despliegue de la aplicación.
Puede configurarse un contenedor de transacciones locales (LTC) como parte de un descriptor de despliegue del componente de aplicación que se puede compartir entre varios componentes de aplicación, incluidos los componentes de aplicación web y los enterprise beans que utilizan transacciones gestionadas por contenedor, de modo que dichos componentes pueden compartir conexiones sin utilizar una transacción global. El compartimiento de un único gestor de recursos entre componentes de la aplicación mejora el rendimiento, incrementa la escalabilidad y reduce la retención de bloqueos de los recursos.
Los LTC se pueden compartir entre varios componentes, incluidos los componentes de aplicación web y los enterprise bean que utilizan transacciones gestionadas por contenedor. Este compartimiento resulta útil en situaciones tales como un uso frecuente de llamadas al componente web include(), en que una hebra puede tener varias conexiones bloqueadas por los LTC en módulos web diferentes. En esta situación, la aplicación podría encontrar puntos muertos del código bajo la carga, cuando las hebras empiezan a esperar que haya conexiones libres. Para superar este problema sin utilizar una transacción global, especifique que los componentes de aplicaciones pueden compartir los LTC estableciendo el atributo Shareable en el descriptor de despliegue de cada componente. Deberá utilizar un descriptor de despliegue. No es posible especificar este atributo si se ha utilizado la anotación.
Al establecer el atributo compartible, el archivo XML del descriptor de despliegue ampliado incluye la línea siguiente de código:
<local-transaction boundary="BEAN_METHOD" resolver="CONTAINER_AT_BOUNDARY"
unresolved-action="COMMIT" shareable="true"/>
Para obtener todas las ventajas de un LTC compartido, asegúrese de que la referencia de recurso para cada componente sea utilizar por omisión conexiones compartibles.

Las aplicaciones que utilizan LTC compartibles no pueden confirmar o retrotraer de forma explícita las conexiones del gesto de recursos utilizadas en un LTC compartible. Aunque, pueden utilizar conexiones que tengan la posibilidad de autoCommit. Esto garantiza la encapsulación correcta del uso de conexión por parte de cada componente y evita que un componente tenga que realizar suposiciones sobre el comportamiento de otros componentes que comparten la conexión.
Si una aplicación inicia cualquier trabajo que no sea de confirmación automática en un LTC para el que el atributo Resolver está establecido en Application y el atributo Shareable está establecido en true, se produce una excepción en tiempo de ejecución. Por ejemplo, en una conexión JDBC, el trabajo que no es de confirmación automática es trabajo que la aplicación realiza después de utilizar el método setAutoCommit(false) para inhabilitar la opción de confirmación automática en la conexión. Los enterprise beans que utilizan transacciones gestionadas (BMT) no se pueden ensamblar con el atributo Shareable establecido en la configuración LTC.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- Se produce una asignación de componente de aplicación sin interposición de contenedor, por ejemplo para un bean de sesión sin estado el método create o una hebra iniciada por servlet.
- Los componentes web J2EE 1.2.
- Los enterprise beans de transacción gestionada por beans (BMT) J2EE 1.2.
Un contenedor de transacciones locales no puede existir simultáneamente con una transacción global. Si se asigna un componente de aplicación cuando no está presenta una
transacción global, el contenedor siempre establece un LTC. La única excepción a
este comportamiento se produce cuando se asigna un componente de aplicación sin la
interposición de contenedor; por ejemplo, para un método create
de bean de sesión sin estado.
Un contenedor de transacciones locales puede tener el ámbito de un contexto de sesión de actividad cuya duración es mayor que la del método de enterprise bean en el que se ha iniciado, como se describe en el tema que trata sobre las sesiones de actividad y los contextos de transacción.