Requisitos para establecer los niveles de aislamiento de acceso a datos
En este artículo se describen los criterios y los efectos de establecer niveles de aislamiento para los componentes de acceso a datos que se incluyen en los módulos EJB (Enterprise JavaBeans) 2.x.
En un módulo EJB 1.1, puede establecer el nivel de aislamiento en el nivel de método o en el nivel de bean. Esta posibilidad también se aplica a los beans CMP (persistencia gestionada por contenedor) 1.1 que se ensamblan en módulos EJB 2.x. WebSphere Application Server permite al descriptor de despliegue de un bean CMP declarar el nivel de versión 1.1, independientemente de la versión de módulo general).
No obstante, la posibilidad de establecer el nivel de aislamiento a nivel de método o de bean no se aplica a otros enterprise beans dentro de un módulo EJB 2.x, incluidos los beans CMP 2.x. WebSphere Application Server Versión 5.0 ha eliminado esta posibilidad de los módulos EJB 2.0 para proporcionar una arquitectura que en última instancia permita un uso de conexiones más eficaz.
- No puede especificar el nivel de aislamiento a nivel de método EJB ni a nivel de bean.
- Si configura una aplicación JDBC, un bean BMP (persistencia gestionada por bean) o un servlet para que participen en transacciones globales, las conexiones que se compartan no pueden aceptar un nivel de aislamiento especificado por el usuario. WebSphere Application Server sólo puede establecer un nivel de aislamiento especificado por el usuario en una conexión que no esté compartida dentro de una transacción global. Generalmente, deberá evitar la especificación de niveles de aislamiento en conexiones compartibles.
- Nivel de aislamiento en las conexiones utilizadas por los beans CMP 2.x
- En un módulo EJB 2.x, cuando un bean CMP 2.x utiliza un nuevo origen de datos para acceder a una base de datos de programa de fondo, el nivel de aislamiento viene determinado por el tiempo de ejecución de WebSphere Application Server, según el tipo de intento de acceso asignado al bean o al método de llamada. Los demás usuarios de conexiones que no sean CMP pueden acceder al mismo origen de datos y también pueden utilizar el intento de acceso y el soporte de perfil de aplicación para gestionar su control de simultaneidad.
- Conexiones utilizadas por otros enterprise beans 2.x y otros componentes no CMP
- Para todas las demás instancias de conexión JDBC (conexiones distintas de
las utilizadas por los beans
CMP), puede especificar un nivel de aislamiento en la referencia de recurso
del origen de datos. Para las
conexiones compartibles que se ejecutan en transacciones globales, este método es la
única forma de establecer el isolationLevel de las conexiones. No está permitido establecer
directamente el nivel de aislamiento a través del método setTransactionIsolation() en
una conexión compartible que se ejecuta en una transacción global. Para utilizar otro nivel
de aislamiento en las conexiones, debe proporcionar otra referencia de recurso. Establezca estos valores predeterminados mediante la
herramienta de ensamblaje.
Cada referencia de recurso se asocia con un nivel de aislamiento. Cuando la aplicación utiliza este nombre JNDI (Java™ Naming and Directory Interface) de referencia de recurso para buscar un origen de datos, todas las conexiones devueltas desde el origen de datos utilizando esta referencia de recurso tienen el mismo nivel de aislamiento.
Los componentes que necesitan utilizar conexiones compartibles con varios niveles de aislamiento pueden crear varias referencias de recursos, dándoles nombres JNDI diferentes, y que su código busque el origen de datos correspondiente para el nivel de aislamiento que necesiten. De esta forma, se utilizan varias conexiones con distintos niveles de aislamiento habilitados.
Las distintas referencias de recursos se pueden correlacionar con el mismo origen de datos configurado. No obstante, las conexiones provendrán de la misma agrupación subyacente; el gestor de conexiones no permite compartir conexiones solicitadas por referencias de recursos con distintos niveles de aislamiento. Consideremos el escenario siguiente:- Un origen de datos está enlazado con dos referencias de recursos: jdbc/RRResRef y jdbc/RCResRef.
- RRResRef tiene definido el nivel de aislamiento RepeatableRead. RCResRef tiene definido el nivel de aislamiento ReadCommitted.
El producto no necesita que se establezca el nivel de aislamiento en una referencia de recurso de origen de datos para un módulo de aplicación no CMP. Si no especifica el nivel de aislamiento en la referencia de recurso, o si especifica TRANSACTION_NONE, el tiempo de ejecución de WebSphere Application Server utiliza un nivel de aislamiento por omisión para el origen de datos. Application Server utiliza un valor predeterminado basado en el controlador JDBC.
Para la mayoría de controladores, WebSphere Application Server utiliza un valor predeterminado de nivel de aislamiento de TRANSACTION_REPEATABLE_READ. No obstante, para los controladores de Oracle, Application Server utiliza un nivel de aislamiento de TRANSACTION_READ_COMMITTED. Utilice la tabla siguiente como consulta rápida:
Base de datos: Nivel de aislamiento predeterminado: DB2 RR Oracle RC Sybase RR Informix RR Apache Derby RR SQL Server RR Nota: Estos mismos niveles de aislamiento por omisión se utilizan en los casos de búsquedas JNDI directas de un origen de datos.- RR = Lectura repetible de JDBC (TRANSACTION_REPEATABLE_READ)
- RC = Lectura comprometida de JDBC (TRANSACTION_READ_COMMITTED)
Para personalizar el nivel de aislamiento predeterminado, puede utilizar la propiedad personalizada webSphereDefaultIsolationLevel para el origen de datos. En la mayoría de los casos, debe definir el nivel de aislamiento en el descriptor de despliegue cuando empaquete el archivo EAR, pero en determinadas situaciones puede que deba personalizar el nivel de aislamiento predeterminado. Esta propiedad no entrará en vigor si se utiliza alguna de las opciones anteriores, y esta propiedad personalizada se proporciona para aquellas situaciones en las que no hay otro modo de establecer el nivel de aislamiento.
Utilice los valores siguientes para la propiedad personalizada webSphereDefaultIsolationLevel:
Para definir esta propiedad personalizada para un origen de datos:Valores posibles Nivel de aislamiento JDBC Nivel de aislamiento de DB2 8 TRANSACTION_SERIALIZABLE Lectura repetible (RR) 4 (predeterminado) TRANSACTION_REPEATABLE_READ Estabilidad de lectura (RS) 2 TRANSACTION_READ_COMMITTED Estabilidad de cursor (CS) 1 TRANSACTION_READ_UNCOMMITTED Lectura no comprometida (UR) 0
TRANSACTION_NONE Sin confirmar (NC) - Pulse .
- Pulse Orígenes de datos en la sección Propiedades adicionales.
- Pulse en el nombre del origen de datos.
- Pulse Propiedades personalizadas.
- Cree la propiedad personalizada webSphereDefaultIsolationLevel.
- Pulse Nuevo.
- Especifique webSphereDefaultIsolationLevel en el campo del nombre.
- Especifique uno de los valores posibles en el campo del valor.
- Nivel de aislamiento de la referencia del recurso
- Nivel de aislamiento especificado por la política de intento de acceso
- Propiedad personalizada que configura un nivel de aislamiento
- Valor predeterminado del servidor de aplicaciones.