com.netflix.curator.framework.recipes.cache
Class PathChildrenCache

java.lang.Object
  extended by com.netflix.curator.framework.recipes.cache.PathChildrenCache
All Implemented Interfaces:
java.io.Closeable

public class PathChildrenCache
extends java.lang.Object
implements java.io.Closeable

A utility that attempts to keep all data from all children of a ZK path locally cached. This class will watch the ZK path, respond to update/create/delete events, pull down the data, etc. You can register a listener that will get notified when changes occur.

IMPORTANT - it's not possible to stay transactionally in sync. Users of this class must be prepared for false-positives and false-negatives. Additionally, always use the version number when updating data to avoid overwriting another process' change.


Constructor Summary
PathChildrenCache(com.netflix.curator.framework.CuratorFramework client, java.lang.String path, boolean cacheData)
           
PathChildrenCache(com.netflix.curator.framework.CuratorFramework client, java.lang.String path, boolean cacheData, boolean dataIsCompressed, java.util.concurrent.ThreadFactory threadFactory)
           
PathChildrenCache(com.netflix.curator.framework.CuratorFramework client, java.lang.String path, boolean cacheData, java.util.concurrent.ThreadFactory threadFactory)
           
PathChildrenCache(com.netflix.curator.framework.CuratorFramework client, java.lang.String path, PathChildrenCacheMode mode)
          Deprecated. use PathChildrenCache(CuratorFramework, String, boolean) instead
PathChildrenCache(com.netflix.curator.framework.CuratorFramework client, java.lang.String path, PathChildrenCacheMode mode, java.util.concurrent.ThreadFactory threadFactory)
          Deprecated. use PathChildrenCache(CuratorFramework, String, boolean, ThreadFactory) instead
 
Method Summary
 void clear()
          Clears the current data without beginning a new query and without generating any events for listeners.
 void clearAndRefresh()
          Clear out current data and begin a new query on the path
 void close()
          Close/end the cache
 java.util.List<ChildData> getCurrentData()
          Return the current data.
 ChildData getCurrentData(java.lang.String fullPath)
          Return the current data for the given path.
 com.netflix.curator.framework.listen.ListenerContainer<PathChildrenCacheListener> getListenable()
          Return the cache listenable
protected  void handleException(java.lang.Throwable e)
          Default behavior is just to log the exception
 void rebuild()
          NOTE: this is a BLOCKING method.
 void start()
          Start the cache.
 void start(boolean buildInitial)
          Same as start() but gives the option of doing an initial build
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PathChildrenCache

public PathChildrenCache(com.netflix.curator.framework.CuratorFramework client,
                         java.lang.String path,
                         PathChildrenCacheMode mode)
Deprecated. use PathChildrenCache(CuratorFramework, String, boolean) instead

Parameters:
client - the client
path - path to watch
mode - caching mode

PathChildrenCache

public PathChildrenCache(com.netflix.curator.framework.CuratorFramework client,
                         java.lang.String path,
                         PathChildrenCacheMode mode,
                         java.util.concurrent.ThreadFactory threadFactory)
Deprecated. use PathChildrenCache(CuratorFramework, String, boolean, ThreadFactory) instead

Parameters:
client - the client
path - path to watch
mode - caching mode
threadFactory - factory to use when creating internal threads

PathChildrenCache

public PathChildrenCache(com.netflix.curator.framework.CuratorFramework client,
                         java.lang.String path,
                         boolean cacheData)
Parameters:
client - the client
path - path to watch
cacheData - if true, node contents are cached in addition to the stat

PathChildrenCache

public PathChildrenCache(com.netflix.curator.framework.CuratorFramework client,
                         java.lang.String path,
                         boolean cacheData,
                         java.util.concurrent.ThreadFactory threadFactory)
Parameters:
client - the client
path - path to watch
cacheData - if true, node contents are cached in addition to the stat
threadFactory - factory to use when creating internal threads

PathChildrenCache

public PathChildrenCache(com.netflix.curator.framework.CuratorFramework client,
                         java.lang.String path,
                         boolean cacheData,
                         boolean dataIsCompressed,
                         java.util.concurrent.ThreadFactory threadFactory)
Parameters:
client - the client
path - path to watch
cacheData - if true, node contents are cached in addition to the stat
dataIsCompressed - if true, data in the path is compressed
threadFactory - factory to use when creating internal threads
Method Detail

start

public void start()
           throws java.lang.Exception
Start the cache. The cache is not started automatically. You must call this method.

Throws:
java.lang.Exception - errors

start

public void start(boolean buildInitial)
           throws java.lang.Exception
Same as start() but gives the option of doing an initial build

Parameters:
buildInitial - if true, rebuild() will be called before this method returns in order to get an initial view of the node
Throws:
java.lang.Exception - errors

rebuild

public void rebuild()
             throws java.lang.Exception
NOTE: this is a BLOCKING method. Completely rebuild the internal cache by querying for all needed data WITHOUT generating any events to send to listeners.

Throws:
java.lang.Exception - errors

close

public void close()
           throws java.io.IOException
Close/end the cache

Specified by:
close in interface java.io.Closeable
Throws:
java.io.IOException - errors

getListenable

public com.netflix.curator.framework.listen.ListenerContainer<PathChildrenCacheListener> getListenable()
Return the cache listenable

Returns:
listenable

getCurrentData

public java.util.List<ChildData> getCurrentData()
Return the current data. There are no guarantees of accuracy. This is merely the most recent view of the data. The data is returned in sorted order.

Returns:
list of children and data

getCurrentData

public ChildData getCurrentData(java.lang.String fullPath)
Return the current data for the given path. There are no guarantees of accuracy. This is merely the most recent view of the data. If there is no child with that path, null is returned.

Parameters:
fullPath - full path to the node to check
Returns:
data or null

clearAndRefresh

public void clearAndRefresh()
                     throws java.lang.Exception
Clear out current data and begin a new query on the path

Throws:
java.lang.Exception - errors

clear

public void clear()
Clears the current data without beginning a new query and without generating any events for listeners.


handleException

protected void handleException(java.lang.Throwable e)
Default behavior is just to log the exception

Parameters:
e - the exception