org.apache.lucene.replicator
Class ReplicationClient

java.lang.Object
  extended by org.apache.lucene.replicator.ReplicationClient
All Implemented Interfaces:
Closeable

public class ReplicationClient
extends Object
implements Closeable

A client which monitors and obtains new revisions from a Replicator. It can be used to either periodically check for updates by invoking startUpdateThread(long, java.lang.String), or manually by calling updateNow().

Whenever a new revision is available, the requiredFiles(Map) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Nested Class Summary
static interface ReplicationClient.ReplicationHandler
          Handler for revisions obtained by the client.
static interface ReplicationClient.SourceDirectoryFactory
          Resolves a session and source into a Directory to use for copying the session files to.
 
Field Summary
static String INFO_STREAM_COMPONENT
          The component name to use with InfoStream.isEnabled(String).
 
Constructor Summary
ReplicationClient(Replicator replicator, ReplicationClient.ReplicationHandler handler, ReplicationClient.SourceDirectoryFactory factory)
          Constructor.
 
Method Summary
 void close()
           
protected  void ensureOpen()
          Throws AlreadyClosedException if the client has already been closed.
protected  void handleUpdateException(Throwable t)
          Called when an exception is hit by the replication thread.
 boolean isUpdateThreadAlive()
          Returns true if the update thread is alive.
protected  Map<String,List<RevisionFile>> requiredFiles(Map<String,List<RevisionFile>> newRevisionFiles)
          Returns the files required for replication.
 void setInfoStream(InfoStream infoStream)
          Sets the InfoStream to use for logging messages.
 void startUpdateThread(long intervalMillis, String threadName)
          Start the update thread with the specified interval in milliseconds.
 void stopUpdateThread()
          Stop the update thread.
 String toString()
           
 void updateNow()
          Executes the update operation immediately, irregardess if an update thread is running or not.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

INFO_STREAM_COMPONENT

public static final String INFO_STREAM_COMPONENT
The component name to use with InfoStream.isEnabled(String).

See Also:
Constant Field Values
Constructor Detail

ReplicationClient

public ReplicationClient(Replicator replicator,
                         ReplicationClient.ReplicationHandler handler,
                         ReplicationClient.SourceDirectoryFactory factory)
Constructor.

Parameters:
replicator - the Replicator used for checking for updates
handler - notified when new revisions are ready
factory - returns a Directory for a given source and session
Method Detail

ensureOpen

protected final void ensureOpen()
Throws AlreadyClosedException if the client has already been closed.


handleUpdateException

protected void handleUpdateException(Throwable t)
Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the InfoStream set in setInfoStream(InfoStream), or the default one. You can override to log the exception elswhere.

NOTE: if you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call stopUpdateThread() followed by startUpdateThread(long, String).


requiredFiles

protected Map<String,List<RevisionFile>> requiredFiles(Map<String,List<RevisionFile>> newRevisionFiles)
Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler.


close

public void close()
Specified by:
close in interface Closeable

startUpdateThread

public void startUpdateThread(long intervalMillis,
                              String threadName)
Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Thread.setName(String). If you pass null, a default name will be set.

Throws:
IllegalStateException - if the thread has already been started

stopUpdateThread

public void stopUpdateThread()
Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped.


isUpdateThreadAlive

public boolean isUpdateThreadAlive()
Returns true if the update thread is alive. The update thread is alive if it has been started and not stopped, as well as didn't hit an error which caused it to terminate (i.e. handleUpdateException(Throwable) threw the exception further).


toString

public String toString()
Overrides:
toString in class Object

updateNow

public void updateNow()
               throws IOException
Executes the update operation immediately, irregardess if an update thread is running or not.

Throws:
IOException

setInfoStream

public void setInfoStream(InfoStream infoStream)
Sets the InfoStream to use for logging messages.



Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.