Puntos muertos de base de datos provocados por actualizaciones de bloqueos
Para evitar los puntos muertos de base de datos provocados por actualizaciones de bloqueos, puede cambiar la política de intento de acceso de los beans de entidad del valor predeterminado wsPessimisticUpdate-WeakestLockAtLoad al valor wsPessimisticUpdate o puede utilizar un enfoque de bloqueo optimista.
Al acceder a los datos de forma simultánea, asegúrese de que la aplicación esté preparada para el bloqueo de base de datos que debe producirse para garantizar la integridad de los datos.
Si un bean de entidad ejecuta un método findByPrimaryKey, que obtiene por omisión un bloqueo de Lectura en la base de datos, y el bean de entidad se actualiza en la misma transacción, se produce una actualización del bloqueo a Exclusivo.
Si este escenario se produce de forma simultánea en varias hebras, es posible que se produzca un punto muerto. Esto se debe a que se pueden obtener varios bloqueos de lectura al mismo tiempo pero sólo puede obtenerse un bloqueo exclusivo cuando se eliminan los demás bloqueos. Puesto que todas las transacciones están intentado realizar la actualización de bloqueos en este escenario, no es posible obtener el bloqueo exclusivo.
Para evitar este problema, puede cambiar la política de intento de acceso del bean de entidad desde el método wsPessimisticUpdate-WeakestLockAtLoad al método wsPessimisticUpdate. Este cambio permite a la aplicación informar al producto y a la base de datos de que la transacción ha actualizado el enterprise bean. El bloqueo de actualización es obtiene inmediatamente en el método findByPrimaryKey. Esto evitará la actualización del bloqueo cuando se ejecute posteriormente la actualización.
La técnica preferida para definir políticas de intento de acceso es cambiar el intento de acceso de todo el bean de entidad. Puede cambiar el intento de acceso para el método findByPrimaryKey, pero éste quedó en desuso en la versión 6. Es recomendable que cambie el intento de acceso para un método individual si, por ejemplo, el bean de entidad está implicado en algunas transacciones que son de sólo lectura.
Una técnica alternativa es utilizar un enfoque optimista, donde el método findByPrimaryKey no mantiene un bloqueo de 'Lectura', por lo que no se actualiza ningún bloqueo. No obstante, para ello, es necesario que la aplicación esté codificada para manejar las retroacciones. El bloqueo optimista está indicado para aquellas aplicaciones que no esperen normalmente una competencia de base de datos.
Para cambiar la política de intento de acceso de un bean de entidad, puede utilizar la herramienta de ensamblaje para establecer el nivel del bean, tal como se describe en Aplicación de políticas de propósito de acceso a beans.