org.nuiton.topia.replication
Class ReplicationEngine

java.lang.Object
  extended by org.nuiton.topia.replication.ReplicationEngine
All Implemented Interfaces:
TopiaService, TopiaReplicationImplementor, TopiaReplicationService

public class ReplicationEngine
extends Object
implements TopiaReplicationImplementor

Implantation du service de replication.

Author:
chemit

Field Summary
protected  TopiaContextImplementor context
          le contexte sur la base source de la replication
protected static TopiaReplicationOperation[] operations
          la liste des operations disponibles (chargee automatiquement via un ServiceLoader sur le contract TopiaReplicationOperation)
 
Fields inherited from interface org.nuiton.topia.replication.TopiaReplicationService
SERVICE_NAME, TOPIA_SERVICE_NAME
 
Constructor Summary
ReplicationEngine()
           
 
Method Summary
 void addAfterOperation(ReplicationModel model, TopiaEntityEnum type, Class<? extends TopiaReplicationOperation> operationClass, Object... parameters)
          Ajouter une nouvelle operation post-replication, sur un type de donnee.
 void addBeforeOperation(ReplicationModel model, TopiaEntityEnum type, Class<? extends TopiaReplicationOperation> operationClass, Object... parameters)
          Ajouter une nouvelle operation pre-replication, sur un type de donnee.
static void checkNotNull(String methodName, String parameterName, Object value)
           
static void checkParameters(Class<?>[] paramsType, Object... params)
           
static void checkSize(int size, Object[] params)
           
static void checkType(Class<?>[] paramsType, int index, Object[] params)
           
 ReplicationModel createModel(TopiaEntityEnum[] contracts, String... topiaIds)
          Creation d'un modele de replication non initialise.
 ReplicationModel createModelForAll(TopiaEntityEnum[] contracts)
          Creation d'un modele de replication (en mode tout dupliquer) non initialise.
 ReplicationModel createModelWithComputedOrder(TopiaEntityEnum[] contracts, String... topiaIds)
          Creation d'un modele de replication non initialise avec un ordre fixe (celui des contrats donnés).
 void createOperation(ReplicationModel model, TopiaEntityEnum type, ReplicationOperationPhase phase, Class<? extends TopiaReplicationOperation> operationClass, Object... parameters)
           
 Set<Class<? extends TopiaEntity>> detectTypes(TopiaEntityEnum[] contracts, String... ids)
           
 void doReplicate(ReplicationModel model, TopiaContext dstCtxt)
          Lance l'operation de replication a partir du context source vers le context de destination sur les entites donnees et en utilisant le model de replication precedemment construit via la methode TopiaReplicationService.prepare(TopiaEntityEnum[], String...) ou TopiaReplicationService.prepareForAll(TopiaEntityEnum[]).
 void doReplicateNode(ReplicationNode node, TopiaContext srcCtxt, TopiaContext dstCtxt, Map<Class<? extends TopiaEntity>,List<String>> data, List<ReplicationNode> treated)
           
static
<E extends TopiaEntity>
List<E>
getEntities(TopiaContextImplementor srcCtxt, List<E> entityList, boolean canBeNull)
           
static TopiaEntity[] getEntities(TopiaContext srcCtxt, String... entityList)
           
static List<? extends TopiaEntity> getEntitiesList(TopiaContext srcCtxt, String... entityList)
           
 Map<Class<? extends TopiaEntity>,List<String>> getIds(ReplicationModel model, TopiaContextImplementor srcCtxt)
          Recupere les ids des entites a repliquer.
 TopiaReplicationOperation getOperation(Class<? extends TopiaReplicationOperation> operationClass)
          Récupération d'une opération de réplication à partir de son type.
 Class<?>[] getPersistenceClasses()
           
 String getServiceName()
           
 ReplicationModel initModel(ReplicationModel model, boolean computeOrder)
          Initialisation du modele de replication.
 boolean postInit(TopiaContextImplementor context)
           
 boolean preInit(TopiaContextImplementor context)
           
 ReplicationModel prepare(TopiaEntityEnum[] contracts, String... entities)
          Prepare le modele de replication pour les entites dans les topiaIds sont donnes.
 ReplicationModel prepareForAll(TopiaEntityEnum[] contracts)
          Prepare le modele de replication pour toutes les entites des types donnes.
 ReplicationModel prepareWithComputedOrder(TopiaEntityEnum[] contracts, String... topiaIds)
          Prepare le modele de replication pour les entites données en ne faisant pas de calcul sur l'ordre des entités à répliquer.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

context

protected TopiaContextImplementor context
le contexte sur la base source de la replication


operations

protected static TopiaReplicationOperation[] operations
la liste des operations disponibles (chargee automatiquement via un ServiceLoader sur le contract TopiaReplicationOperation)

See Also:
preInit(TopiaContextImplementor)
Constructor Detail

ReplicationEngine

public ReplicationEngine()
Method Detail

getServiceName

public String getServiceName()
Specified by:
getServiceName in interface TopiaService

getPersistenceClasses

public Class<?>[] getPersistenceClasses()
Specified by:
getPersistenceClasses in interface TopiaService

preInit

public boolean preInit(TopiaContextImplementor context)
Specified by:
preInit in interface TopiaService

postInit

public boolean postInit(TopiaContextImplementor context)
Specified by:
postInit in interface TopiaService

prepare

public ReplicationModel prepare(TopiaEntityEnum[] contracts,
                                String... entities)
                         throws TopiaException
Description copied from interface: TopiaReplicationService
Prepare le modele de replication pour les entites dans les topiaIds sont donnes.

Specified by:
prepare in interface TopiaReplicationService
Parameters:
contracts - les contrats a repliquer
entities - la liste des ids d'entites a repliquer
Returns:
le model de replication initialise
Throws:
TopiaException - pour toute erreur recontree

prepareForAll

public ReplicationModel prepareForAll(TopiaEntityEnum[] contracts)
                               throws TopiaException
Description copied from interface: TopiaReplicationService
Prepare le modele de replication pour toutes les entites des types donnes.

La méthode calcule l'ordre de replication des données.

Actuellement, on n'est pas capable de calculer l'ordre si le graphe des entités contient des cycles.

TODO : faire en sorte de pouvoir gérer les cycles.

Specified by:
prepareForAll in interface TopiaReplicationService
Parameters:
contracts - les contrats des types a repliquer
Returns:
le modele pour la replication
Throws:
TopiaException - pour toute erreur rencontree

prepareWithComputedOrder

public ReplicationModel prepareWithComputedOrder(TopiaEntityEnum[] contracts,
                                                 String... topiaIds)
                                          throws TopiaException
Description copied from interface: TopiaReplicationService
Prepare le modele de replication pour les entites données en ne faisant pas de calcul sur l'ordre des entités à répliquer.

L'ordre des types donnees sera celui utilisé.

Specified by:
prepareWithComputedOrder in interface TopiaReplicationService
Parameters:
contracts - les contrats a repliquer (dans l'ordre donnée)
topiaIds - les ids des entites a repliquer
Returns:
le model de replication initialise
Throws:
TopiaException - pour toute erreur recontree

addBeforeOperation

public void addBeforeOperation(ReplicationModel model,
                               TopiaEntityEnum type,
                               Class<? extends TopiaReplicationOperation> operationClass,
                               Object... parameters)
Description copied from interface: TopiaReplicationService
Ajouter une nouvelle operation pre-replication, sur un type de donnee.

Specified by:
addBeforeOperation in interface TopiaReplicationService
Parameters:
model - le modele de replication
type - le type du noeud de replication
operationClass - l'implantation de l'operation
parameters - les parametres supplementaires pour l'operation

addAfterOperation

public void addAfterOperation(ReplicationModel model,
                              TopiaEntityEnum type,
                              Class<? extends TopiaReplicationOperation> operationClass,
                              Object... parameters)
Description copied from interface: TopiaReplicationService
Ajouter une nouvelle operation post-replication, sur un type de donnee.

Specified by:
addAfterOperation in interface TopiaReplicationService
Parameters:
model - le modele de replication
type - le type du noeud de replication
operationClass - l'implantation de l'operation
parameters - les parametres supplementaires pour l'operation

doReplicate

public void doReplicate(ReplicationModel model,
                        TopiaContext dstCtxt)
                 throws Exception
Description copied from interface: TopiaReplicationService
Lance l'operation de replication a partir du context source vers le context de destination sur les entites donnees et en utilisant le model de replication precedemment construit via la methode TopiaReplicationService.prepare(TopiaEntityEnum[], String...) ou TopiaReplicationService.prepareForAll(TopiaEntityEnum[]).

Specified by:
doReplicate in interface TopiaReplicationService
Parameters:
model - le modele de replication
dstCtxt - le context sur la source de donnees ou repliquer
Throws:
Exception - pour toute erreur pendant la replication

createModel

public ReplicationModel createModel(TopiaEntityEnum[] contracts,
                                    String... topiaIds)
                             throws TopiaException
Description copied from interface: TopiaReplicationImplementor
Creation d'un modele de replication non initialise.

Specified by:
createModel in interface TopiaReplicationImplementor
Parameters:
contracts - le contrats d'entites autorises
topiaIds - les ids des entites a repliquer
Returns:
le modele instancie mais non initialise
Throws:
TopiaException - pour toute erreur

createModelWithComputedOrder

public ReplicationModel createModelWithComputedOrder(TopiaEntityEnum[] contracts,
                                                     String... topiaIds)
                                              throws TopiaException
Description copied from interface: TopiaReplicationImplementor
Creation d'un modele de replication non initialise avec un ordre fixe (celui des contrats donnés).

Specified by:
createModelWithComputedOrder in interface TopiaReplicationImplementor
Parameters:
contracts - le contrats d'entites autorises
topiaIds - les ids des entities a repliquer
Returns:
le modele instancie mais non initialise
Throws:
TopiaException - pour toute erreur

createModelForAll

public ReplicationModel createModelForAll(TopiaEntityEnum[] contracts)
                                   throws TopiaException
Description copied from interface: TopiaReplicationImplementor
Creation d'un modele de replication (en mode tout dupliquer) non initialise.

Specified by:
createModelForAll in interface TopiaReplicationImplementor
Parameters:
contracts - le contrats d'entites autorises
Returns:
le modele instancie mais non initialise
Throws:
TopiaException - pour toute erreur

initModel

public ReplicationModel initModel(ReplicationModel model,
                                  boolean computeOrder)
                           throws TopiaException
Description copied from interface: TopiaReplicationImplementor
Initialisation du modele de replication.

Cette methode realise les calculs sur le modele pour obtenir l'ordre de replication des entites ReplicationModel.getOrder() et les operations a realiser lors de la replication sur chaque noeud de replication ReplicationNode.getOperations().

Specified by:
initModel in interface TopiaReplicationImplementor
Parameters:
model - le modele a initialise
computeOrder - drapeau pour effectuer le calcul d'ordre des entites a repliquer, sinon on utilise l'ordre de creation des noeuds dans le model.
Returns:
le modele initialise
Throws:
TopiaException - pour toute erreur

getOperation

public TopiaReplicationOperation getOperation(Class<? extends TopiaReplicationOperation> operationClass)
Description copied from interface: TopiaReplicationImplementor
Récupération d'une opération de réplication à partir de son type.

Specified by:
getOperation in interface TopiaReplicationImplementor
Parameters:
operationClass - le type de l'opération
Returns:
l'opération du type donne

createOperation

public void createOperation(ReplicationModel model,
                            TopiaEntityEnum type,
                            ReplicationOperationPhase phase,
                            Class<? extends TopiaReplicationOperation> operationClass,
                            Object... parameters)
Specified by:
createOperation in interface TopiaReplicationImplementor
Parameters:
model - le modele en cours
type - le contrat de l'entite concerne
phase - la phase de l'operation
operationClass - le type de l'operation
parameters - les parametres dynamiques de l'operation

detectTypes

public Set<Class<? extends TopiaEntity>> detectTypes(TopiaEntityEnum[] contracts,
                                                     String... ids)
                                              throws TopiaException
Specified by:
detectTypes in interface TopiaReplicationImplementor
Throws:
TopiaException

getIds

public Map<Class<? extends TopiaEntity>,List<String>> getIds(ReplicationModel model,
                                                             TopiaContextImplementor srcCtxt)
                                                      throws TopiaException
Description copied from interface: TopiaReplicationImplementor
Recupere les ids des entites a repliquer.

Specified by:
getIds in interface TopiaReplicationImplementor
Parameters:
model - le modele utilise
srcCtxt - le context de la base source
Returns:
les ids des donnes a repliquer.
Throws:
TopiaException - pour toute erreur de recuperation d'ids en base

doReplicateNode

public void doReplicateNode(ReplicationNode node,
                            TopiaContext srcCtxt,
                            TopiaContext dstCtxt,
                            Map<Class<? extends TopiaEntity>,List<String>> data,
                            List<ReplicationNode> treated)
                     throws Exception
Specified by:
doReplicateNode in interface TopiaReplicationImplementor
Parameters:
node - le noeud de replication
srcCtxt - la base source
dstCtxt - la base destination
data - le dictionnaire des ids a repliquer
treated - l'ensemble des noeuds deja repliques
Throws:
Exception - pour tout erreur

getEntities

public static <E extends TopiaEntity> List<E> getEntities(TopiaContextImplementor srcCtxt,
                                                          List<E> entityList,
                                                          boolean canBeNull)
                                               throws TopiaException
Throws:
TopiaException

getEntities

public static TopiaEntity[] getEntities(TopiaContext srcCtxt,
                                        String... entityList)
                                 throws TopiaException
Throws:
TopiaException

getEntitiesList

public static List<? extends TopiaEntity> getEntitiesList(TopiaContext srcCtxt,
                                                          String... entityList)
                                                   throws TopiaException
Throws:
TopiaException

checkNotNull

public static void checkNotNull(String methodName,
                                String parameterName,
                                Object value)

checkParameters

public static void checkParameters(Class<?>[] paramsType,
                                   Object... params)

checkSize

public static void checkSize(int size,
                             Object[] params)

checkType

public static void checkType(Class<?>[] paramsType,
                             int index,
                             Object[] params)


Copyright © 2004-2010 CodeLutin. All Rights Reserved.