Para beans de entidad de persistencia gestionada por contenedor (CMP) EJB 2.x, utilice la
operación parcial de opción de persistencia para especificar cómo desea actualizar los
atributos persistentes del bean CMP en la base de datos.
Para la operación parcial puede seleccionar entre dos valores: NONE o UPDATE_ONLY.
El valor por omisión para la operación parcial es NONE, donde todos los
atributos persistentes del bean CMP en la base de datos se almacenan en
la base de datos, aún cuando sólo haya cambiado quizá un único subconjunto
de campos de atributos persistentes.
La opción UPDATE_ONLY de la operación parcial, limita la actualización en la base de datos a
únicamente atributos persistentes del bean CMP que se han modificado. Los métodos
setter en el bean determinan si se han modificado los atributos CMP correspondientes.
La modificación no se basa en el valor real que se está cambiando.
En otras palabras, si se invoca al método setter pero los valores antiguo y nuevo
siguen iguales, el atributo CMP se considera dirty.
Puede especificar la operación parcial como una opción persistente a nivel de bean en la política de propósito de acceso configurada para el bean. Para obtener más detalles sobre cómo especificar
las operaciones parciales, consulte el tema Añadir el propósito de acceso a nivel de bean para beans de entidad 2.x.
Ventajas funcionales
El uso de la actualización parcial (al seleccionar el valor UPDATE_ONLY para la operación parcial)
se ha diseñado para tener estas ventajas funcionales:
- Si siempre se actualizan todas las columnas, siempre se activan
los desencadenantes de actualización en la tabla correlacionados con el bean CMP.
Esto puede llevar a la base de datos a un estado incoherente.
Además, cualquier lógica de desencadenante que dependa del número de veces que se
actualiza una columna concreta o de la hora a la que se actualiza una columna concreta
no funcionará correctamente con la actualización completa. El uso de la actualización
parcial supera estas limitaciones y permite el uso de desencadenantes de actualización con beans CMP.
- Admite el uso de columnas que admiten valores nulos como predicados para la concurrencia optimista.
Ventajas de rendimiento
El uso de la actualización parcial está diseñado para tener estas ventajas de rendimiento:
- Reduce el tiempo de ejecución de consultas, dado que sólo un subconjunto de las columnas están en
la consulta. Las mejoras pueden aumentar para tablas con muchas columnas e índices.
Por ejemplo, si la tabla tiene muchos índices, la base de datos de programa de fondo
tiene que actualizar sólo los índices afectados por las columnas actualizadas.
- Reduce la E/S de red dado que hay menos datos para transmitir.
- Ahorra tiempo de proceso en los campos CMP sin modificar que tienen conversores o compositores caros
u otras transformaciones complejas. En otras palabras, para campos CMP que
no se han correlacionado trivialmente con la base de datos de programa de fondo, como,
cuando se tiene una correlación con conversores, compositores u otras transformaciones complejas,
se ahorra el tiempo de ejecución de este proceso si ese campo CMP permanece sin cambios.
- Elimina la activación innecesaria de desencadenantes de actualización. Por ejemplo, si un campo CMP
permanece sin cambios, no se activará ningún desencadenante que depende de la columna correspondiente.
Efectos adversos al rendimiento
Aunque la actualización parcial está diseñada para mejorar el rendimiento, puede afectar adversamente al rendimiento también. Cuando se considera utilizar la actualización parcial, también se tienen en cuenta estos factores:
- Para beans CMP con n atributos CMP que se pueden modificar, hay
2n-1 consultas de actualización parcial distintas posibles.
Si utiliza la actualización parcial para un bean y la aplicación modifica varias
combinaciones de atributos distintas en ese bean en un breve período, esto podría
generar hasta 2n-1 consultas parciales distintas y se llenaría rápidamente
la antememoria de sentencias preparadas. Como consecuencia, los manejadores de sentencias preparadas
se descartan de la antememoria y algunas sentencias se preparan una y otra vez. Esto disminuye el rendimiento.
- Cuando se selecciona el valor UPDATE_ONLY para la operación
parcial y el recuadro de selección Proceso por lotes como opciones persistentes para el mismo
bean, podría verse afectado el rendimiento de actualización por lotes para consultas de actualización.
Esto se debe a que cada consulta parcial es distinta y sólo las mismas consultas parciales se agrupan para la actualización por lotes. Por omisión, está inhabilitada la actualización por lotes de
las consultas de actualización. Para obtener detalles sobre cómo puede alterar temporalmente la prioridad de la actualización parcial sobre la actualización por lotes consulte el apartado Restricciones.
Aunque la propiedad de
la máquina virtual Java (JVM), -Dcom.ibm.ws.pm.grouppartialupdate=true, establecida en el
archivo server.xml se puede utilizar para agrupar las consultas similares de actualización parcial en una actualización por lotes, esto sólo serviría si las consultas parciales de una transacción
tienen la misma forma la mayoría del tiempo. Es necesario determinar qué podría
proporcionar el mayor rendimiento para su uso: actualización por lotes sólo, actualización
parcial sólo o el uso de las dos (cuando el distintivo grouppartialupdate está establecido en true).
- Dado que las consultas de actualización parcial se ensamblan dinámicamente durante la ejecución basándose en los campos CMP que se hayan modificado, hay un coste en tiempo de ejecución que es proporcional
al número de campos CMP modificados.
Restricciones
- Cuando se utiliza la actualización parcial podría disminuir el rendimiento
de la actualización por lotes. El valor por omisión es que están
inhabilitadas las actualizaciones por lotes de consultas de actualización para todo el bean CMP cuando
está habilitada la actualización parcial. En otras palabras, la actualización parcial tiene la prioridad
sobre la actualización por lotes. No obstante, el comportamiento de la actualización por lotes para consultas de supresión e inserción no se ve afectado por la actualización parcial y permanece sin cambios.
Para alterar temporalmente la prioridad de la actualización parcial sobre la actualización por lotes:
- Abra el archivo server.xml.
- Cambie el valor de la propiedad -Dcom.ibm.ws.pm.grouppartialupdate con true.
Cuando esta propiedad está establecida en true y se selecciona la actualización parcial, la actualización por lotes de las consultas de actualización agrupará consultas parciales similares.
- No se admite la actualización parcial para SQLJ ni CMP/A.