2017-09-25 5 views
0

Je travaille avec des canaux dynamiques pour la réplication pull à couchbase lite. Si j'utilise un seul objet de réplication, je dois d'abord arrêter, puis démarrer. C'est un problème si le tirage est en cours. Comment résoudre ce problème .Comment je vais savoir est en cours d'exécution. Tout moyen de créer plusieurs objets de la réplication?Comment ajouter un canal si la réplication est en cours d'exécution?

+0

Pourquoi avez-vous besoin d'arrêter la réplication? Filtrez-vous les réplications par canal? Sinon, vous ne devriez pas avoir besoin de. Quel est le problème avec l'arrêt d'une réplication pendant son exécution? Vous pouvez avoir plusieurs objets de réplication, mais je m'assurerais que vous en avez besoin. – Hod

+0

J'ai obtenu une solution qui redémarre avec continuer les deux canaux. pas besoin d'arrêter, il suffit de changer le réglage et de redémarrer la traction. –

Répondre

0

Utilisez un Replication ChangeListener. Voici un exemple qui surveille l'arrêt d'une réplication.

public class DBHelper implements Replication.ChangeListener { 
    private boolean replicationActive = false; 
    private List stateListeners = new ArrayList<>(); 
    ... 

    public interface ReplicationStateListener { 
    void onChange(boolean isActive); 
    } 

    public void startReplication(URL gateway, boolean continuous) { 
    ... 

    pushReplication.addChangeListener(this); 
    pushReplication.start(); 
    } 

    public void stopReplication() { 
    ... 
    } 

    public void addReplicationStateListener(ReplicationStateListener listener) { 
    stateListeners.add(listener); 
    } 

    public void removeReplicationStateListener(ReplicationStateListener listener) { 
    stateListeners.remove(listener); 
    } 

    // Replication.ChangeListener 
    @Override 
    public void changed(Replication.ChangeEvent changeEvent) { 
    if (changeEvent.getError() != null) { 
     Throwable lastError = changeEvent.getError(); 

     // React to the error 

     return; 
    } 

    if (changeEvent.getTransition() == null) return; 

    ReplicationState dest = changeEvent.getTransition().getDestination(); 

    replicationActive = ((dest == ReplicationState.STOPPING || dest == ReplicationState.STOPPED) ? false : true); 

    stateListeners.forEach(listener -> listener.onChange(replicationActive)); 
    } 
} 

Vous pouvez lire plus de détails ici: https://blog.couchbase.com/determining-status-replication-couchbase-lite/