Control de simultaneidad
El control de simultaneidad es la gestión de la contienda por recursos de datos. Un esquema de control de simultaneidad se considera pesimista cuando bloquea un recurso determinado al principio de la transacción de acceso a datos y no lo libera hasta que se cierra la transacción. Un esquema de control de simultaneidad se considera optimista cuando se adquieren bloqueos y se liberan después de un breve período de tiempo al final de una transacción.
El objetivo de la simultaneidad optimista es minimizar el tiempo durante el cual un recurso determinado no estará disponible para que lo utilice otra transacción. Esto es especialmente importante en las transacciones de larga ejecución, que en un esquema pesimista bloquean un recurso durante períodos de tiempo excesivamente prolongados.
En un esquema optimista, los bloqueos se obtienen inmediatamente antes de una operación de lectura y se liberan inmediatamente después. Los bloqueos de actualización se obtienen inmediatamente antes de una operación de actualización y se mantienen hasta el final de la transacción.
Para habilitar la simultaneidad optimista, este producto utiliza un esquema de actualización sobrecualificada para comprobar si el origen de datos subyacente lo ha actualizado otra transacción desde el inicio de la transacción actual. Con este esquema, las columnas marcadas para actualización y sus valores originales se añaden explícitamente mediante una cláusula WHERE en la sentencia UPDATE, de modo que la sentencia no se ejecuta correctamente si los valores de columna subyacentes se han modificado. Como resultado, este esquema puede proporcionar el control de simultaneidad al nivel de columnas; los esquemas pesimistas pueden controlar la simultaneidad solamente al nivel de filas.
Los esquemas optimistas generalmente realizan este tipo de comprobación solamente al final de una transacción. Si las columnas subyacentes no se han actualizado desde el inicio de la transacción, las actualizaciones pendientes en los campos de persistencia gestionada por contenedor se confirman y los bloqueos se liberan. Si no se pueden adquirir los bloqueos o si otra transacción ha actualizado las columnas desde el inicio de la transacción actual, la transacción se retrotrae: todo el trabajo que se haya realizado en la transacción se pierde.
Los esquemas de simultaneidad pesimista y optimista requieren diferentes niveles de aislamiento de transacciones. Los enterprise beans que participan en la misma transacción y requieren esquemas de control de simultaneidad diferentes no pueden funcionar con la misma conexión de datos subyacente.