Se podrían producir colisiones de cambio si se pueden cambiar en dos lugares a la vez los mismos registros. En una topología de réplica multimaestro, los dominios de servicio de catálogo detectan automáticamente las colisiones.
Cuando el dominio de servicio de catálogo detecta una colisión, invoca un árbitro.
Normalmente, las colisiones se resuelven con el árbitro de colisión predeterminado.
No obstante, una aplicación puede proporcionar un árbitro de colisión personalizado.
Acerca de esta tarea
Si un dominio de servicio de catálogo recibe una entrada replicada que colisiona con un registro de colisión, el árbitro predeterminado utiliza los cambios del dominio de servicio de catálogo nombrado léxicamente inferior. Por ejemplo, si el dominio A y B generan un conflicto de un registro, el cambio del dominio B se pasa por alto. El dominio A mantiene su versión y el registro del dominio B se modifica para que coincida con el registro del dominio A. Los nombres de dominio se convierten a mayúsculas para la comparación.
Una opción alternativa para la topología de réplica con varios maestros es llamar en un plug-in de colisión personalizado para determinar el resultado. Estas instrucciones esbozan cómo desarrollar un árbitro de colisión personalizado y configurar una topología de réplica con varios maestros para utilizarla.
Procedimiento
- Desarrolle un árbitro de colisión personalizado e intégrelo en la aplicación.
La clase debe implementar la interfaz:
com.ibm.websphere.objectgrid.revision.CollisionArbiter
Un plug-in de colisión tiene tres opciones para determinar el resultado de una colisión. Puede seleccionar la copia local o puede proporcionar una versión revisada de la entrada. Un dominio de servicio de catálogo proporciona la siguiente información a un árbitro de colisión personalizado:
- La versión existente del registro
- La versión de colisión del registro
- Un objeto Session que se debe utilizar para crear la versión revisada de la entrada que ha entrado en colisión
El método del plug-in devuelve un objeto que indica su decisión.
El método invocado por el dominio para llamar al plug-in debe devolver true
o false, donde false indica que se ignora la colisión. Cuando se ignora la colisión, la versión local permanece sin cambios y el árbitro olvida que alguna vez vió la versión existente. El método devuelve un valor true si el método ha utilizado la sesión proporcionada para crear una versión nueva fusionada del registro, con lo que se reconcilia el cambio.
- En el archivo objectgrid.xml, especifique el plug-in de árbitro personalizado.
El ID debe ser
CollisionArbiter.
<dgc:objectGrid name="revisionGrid" txTimeout="10">
<dgc:bean className="com.you.your_application.
CustomArbiter" id="CollisionArbiter">
<dgc:property name="property" type="java.lang.String"
value="propertyValue"/>
</dgc:bean>
</dgc:objectGrid>