Sugerencias de resolución de problemas de intento de acceso
Se da respuestas a las siguientes preguntas más frecuentes relacionadas con el intento de acceso.
La base de datos Oracle falla si no se aplican políticas de intento de acceso
No se han aplicado políticas de intento de acceso y la aplicación se ejecuta con una base de datos DB2, pero falla con una base de datos Oracle con el siguiente mensaje: com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: PMGR1001E: No existe DataAccessSpec :FindAllCustomers. El almacén de datos del programa de fondo no da soporte a la SQLStatement que necesita este AccessIntent: (pessimistic update-weakestLockAtLoad)(collections: transaction/25) (resource manager prefetch: 0) (AccessIntentImpl@d23690a).
Si no ha configurado el intento de acceso, se accede a todos los datos con la política de intento de acceso predeterminada (wsPessimisticUpdate-WeakestLockAtLoad). En DB2 el bloqueo más débil es de compartimiento. Sin embargo, en las bases de datos Oracle, el bloqueo más débil es de actualización; esto significa que la consulta SQL debe contener una cláusula FOR UPDATE. Para evitar este problema, intente aplicar una política de intento de acceso que dé soporte a la simultaneidad optimista.
Al llamar a un método de buscador se visualiza una excepción InconsistentAccessIntentException durante la ejecución.
Esto puede ocurrir cuando se utilizan políticas de intento de acceso a nivel de método para aplicar más control sobre cómo se carga una instancia de bean. Esta excepción indica que el bean de entidad se había cargado anteriormente en la misma transacción. Esto puede ocurrir si ha llamado a un método de varios buscadores que ha devuelto la instancia de bean con la política de intento de acceso X aplicada; ahora está intentando cargar de nuevo el segundo bean llamando al método findByPrimaryKey con la política de intento de acceso Y aplicada. Ambos métodos deben tener la misma política de intento de acceso aplicada.
De la misma manera, si se había cargado la entidad una vez en la transacción utilizando una política de intento de acceso configurada en un buscador, puede que haya llamado a un método de objeto usuario CMR (relación gestionada por contenedor) que ha devuelto el bean de entidad configurado para cargarse utilizando el intento de acceso predeterminado de esa entidad.
Para evitar este problema, asegúrese de que el código no carga la misma instancia de bean dos veces dentro de la misma transacción con distintas políticas de intento de acceso aplicadas. No utilice el intento de acceso a nivel de método a menos que sea absolutamente necesario.
Aparece una excepción InconsistentAccessIntentException en una relación gestionada por contenedor con dos beans
Hay dos beans en una relación gestionada por contenedor. Se llama al método findByPrimaryKey() en el primer bean y después se llama al método getBean2( ), se llama a un método de objeto usuario CMR en la instancia devuelta y aparece una excepción InconsistentAccessIntentException.
Probablemente está utilizando la lectura hacia adelante. Cuando cargó el primer bean, hizo que se cargara el segundo bean con la política de intento de acceso aplicada al método de buscador del primer bean. No obstante, ha configurado el método de objeto usuario CMR desde el primer bean al segundo con una política de intento de acceso diferente. Los métodos de objeto usuario CMR son realmente métodos de buscador disfrazados: el entorno de tiempo de ejecución se comporta como si estuviera intentando cambiar el intento de acceso de una instancia que ya hubiera leído del almacén persistente.
Para evitar este problema, los beans configurados en una sugerencia de lectura hacia adelante se controlan todos para cargarse con la misma política de intento de acceso que el bean en el que se ha aplicado la sugerencia de lectura hacia adelante.
Un bean con una relación de uno con muchos con un segundo bean muestra un error
Un bean con una relación de uno con muchos con un segundo bean muestra un error UpdateCannotProceedWithIntegrityException si una instancia del segundo bean se añade a la colección del primer bean
Un bean con una relación de uno con muchos con un segundo bean muestra un error UpdateCannotProceedWithIntegrityException si una instancia del segundo bean se añade a la colección del primer bean. El primer bean tiene una política de intento de actualización pesimista aplicada.
El segundo bean tiene probablemente una política de intento de lectura aplicada. Cuando añade el segundo bean a la colección del primer bean, no está actualizando el estado del primer bean, está modificando implícitamente el estado del segundo bean. El segundo bean contiene una clave externa para el primer bean, que se ha modificado.
Para evitar este problema, asegúrese de que los dos extremos de la relación tienen una política de intento de actualización aplicada, si tiene previsto cambiar la relación en el tiempo de ejecución.