2016-06-22 7 views
0

Ich habe einen Basispfad, der mehrere Kinder hat. Ich bin Beobachter auf dem Basispfad und alle Kinder beim Start der Anwendung hinzufügen.Watches in Kurator wird nicht ausgelöst, nachdem es auf Ablauf zurückgesetzt wurde

void init(){ 
       List<String> children = zkCfg.getClient().getChildren().usingWatcher(this).forPath(basePath); 
       Stat stat = zkCfg.getClient().checkExists().usingWatcher(this).forPath(basePath); 
       lastKnownVersion.put(basePath.substring(basePath.lastIndexOf('/') + 1), stat.getVersion()); 
       for (String child : children) { 
        stat = zkCfg.getClient().checkExists().usingWatcher(this).forPath(basePath + "/" + child); 
        lastKnownVersion.put(child, stat.getVersion()); 
       } 
} 

Jetzt fange ich die abgelaufene Event-in-Process-Methode.

public void process(WatchedEvent event) { 

     try {  
      synchronized (this) { 
       if (event.getState().equals(Event.KeeperState.Expired)) {   
        init() 
       } 
} 

Diese Methode wird nach Ablauf ausgeführt, aber die Uhren werden bei Änderungen im Knoten nicht ausgelöst.

Antwort

0

Endlich eine Lösung von mir selbst.

Stattdessen Verwalten von Beobachtern auf einem Knoten und alle seine Kind-Knoten von mir selbst. Benutzt Treecycache, verwaltet es alle Ihre Beobachter bei Ablauf der Sitzung auch.

Verwandte Themen