Puede habilitar un bean de sesión, un servlet o un componente
cliente de aplicaciones para utilizar transacciones gestionadas por
componentes, con el fin de gestionar sus propias transacciones directamente en
lugar de permitir que el contenedor gestione las transacciones.
Acerca de esta tarea
Nota: Los beans de entidad no pueden gestionar transacciones (de modo que no pueden
utilizar transacciones gestionadas por bean).
Para habilitar un bean de sesión,
un servlet o un componente cliente de aplicaciones para utilizar transacciones gestionadas por
componentes, siga estos pasos:
Procedimiento
- Para beans de sesión, establezca el atributo Tipo de
transacción del descriptor de despliegue del componente en
Bean, como se describe en
Configuración de los atributos de despliegue transaccionales.
- Para componentes de cliente de aplicaciones, habilite el soporte de
demarcación de transacciones estableciendo el atributo Permitir
demarcación de JTA del descriptor de despliegue del componente, como
se describe en Configuración de los atributos de despliegue transaccionales.
- Escriba el código de componente para gestionar transacciones de forma activa.
Para beans de sesión con estado, una transacción iniciada en un método
determinado no tiene que realizarse (es decir, confirmarse ni retrotraerse)
antes de llevar a cabo ese método. La transacción se puede llevar a cabo más
tarde, por ejemplo en una llamada posterior al mismo método o incluso dentro de
otro método. Sin embargo, se prefiere la construcción de la aplicación para que se inicie
y se complete una transacción dentro de la misma llamada a método, ya que simplifica la
depuración y el mantenimiento de la aplicación.
En el siguiente extracto de código se muestra el código estándar necesario para
obtener un objeto que encapsula el contexto de transacción con los pasos siguientes:
- Cree un objeto javax.transaction.UserTransaction mediante la
llamada a una búsqueda en java:comp/UserTransaction.
- Utilice el objeto UserTransaction para marcar el límite de una
transacción con métodos de transacciones como begin y
commit, según sea necesario. Si un componente de aplicación comienza
una transacción, también debe completar esa transacción llamando al método
commit o al método rollback.
. ..
import javax.transaction.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
...
public float doSomething(long arg1)throws NamingException {
InitialContext initCtx = new InitialContext();
UserTransaction userTran = (UserTransaction)initCtx.lookup(
"java:comp/UserTransaction");
...
//Utilizar el objeto userTran para llamar a métodos de transacciones
userTran.begin();
//Efectuar el trabajo transaccional
...
userTran.commit();
...
}
...
}