Développement d'arbitres personnalisés pour la réplication multi-maître

Des collisions entre des modifications peuvent se produire s'il est possible à des enregistrements identiques d'être modifiés simultanément en deux endroits différents. Dans une topologie de réplication multimaître, les domaines de service de catalogue détectent les collisions automatiquement. Lorsqu'un domaine de service de catalogue détecte une collision, il démarre un arbitre. En général, les collisions sont résolues avec l'arbitre de collision par défaut. Mais une application peut très bien fournir un arbitre personnalisé.

Avant de commencer

Pourquoi et quand exécuter cette tâche

Si un domaine de service de catalogue reçoit une entrée répliquée qui entre en collision avec un enregistrement de collision, l'arbitre par défaut utilise les modifications dans le domaine de service de catalogue le nom vient en premier par ordre alphabétique. Supposons que les domaines A et B génèrent un conflit pour un enregistrement, dans ce cas, la modification du domaine B sera ignorée. Le domaine A conserve sa version et l'enregistrement dans le domaine B est modifié pour correspondre à l'enregistrement dans le domaine A. Les noms de domaine sont convertis en majuscules pour la comparaison.

Une autre possibilité est que la topologie de réplication multi-maître fasse appel à un plug-in de collisions personnalisé pour décider de l'issue à donner. Les instructions qui suivent expliquent comment développer un arbitre personnalisé et configurer son utilisation par une topologie de réplication multi-maître.

Procédure

  1. Développez un arbitre personnalisé et intégrez-le à votre application.
    La classe doit implémenter l'interface suivante :
    com.ibm.websphere.objectgrid.revision.CollisionArbiter
    Pour décider de l'issue d'une collision, un plug-in peut faire trois choix : il peut choisir la copie locale, la copie distante ou de fournir une version révisée de l'entrée. Un domaine de service de catalogue fournit les informations suivantes pour un arbitre de collisions personnalisé :
    • Version existante de l'enregistrement
    • Version de collision de l'enregistrement
    • Objet Session qui doit servir à créer la version révisée de l'entrée en collision
    La méthode du plug-in retourne un objet qui indique sa décision. La méthode invoquée par le domaine pour appeler le plug-in doit retourner true ou false, false indiquant d'ignorer le conflit. Lorsque la collision est ignorée, la version locale demeure inchangée et l'arbitre oublie qu'il a vu la version existante. En revanche, la méthode retourne une valeur true si elle a utilisé la session fournie pour créer une nouvelle version fusionnée de l'enregistrement, réconciliant les modifications.
  2. Dans le fichier objectgrid.xml, indiquez le plug-in d'arbitre personnalisé.
    L'ID doit être 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>