cloudstack/thirdparty/ehcache/docs/net/sf/ehcache/distribution/RMISynchronousCacheReplicat...

761 lines
37 KiB
HTML
Executable File

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.5.0_13) on Sun Jul 13 13:05:42 EST 2008 -->
<TITLE>
RMISynchronousCacheReplicator (ehcache)
</TITLE>
<META NAME="keywords" CONTENT="net.sf.ehcache.distribution.RMISynchronousCacheReplicator class">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
parent.document.title="RMISynchronousCacheReplicator (ehcache)";
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RMISynchronousCacheReplicator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<a href="/" target="_top">ehcache</a></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../net/sf/ehcache/distribution/RMICacheReplicatorFactory.html" title="class in net.sf.ehcache.distribution"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RMISynchronousCacheReplicator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
net.sf.ehcache.distribution</FONT>
<BR>
Class RMISynchronousCacheReplicator</H2>
<PRE>
java.lang.Object
<IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>net.sf.ehcache.distribution.RMISynchronousCacheReplicator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Cloneable, <A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html" title="interface in net.sf.ehcache.distribution">CacheReplicator</A>, <A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../net/sf/ehcache/distribution/RMIAsynchronousCacheReplicator.html" title="class in net.sf.ehcache.distribution">RMIAsynchronousCacheReplicator</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>RMISynchronousCacheReplicator</B><DT>extends java.lang.Object<DT>implements <A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html" title="interface in net.sf.ehcache.distribution">CacheReplicator</A></DL>
</PRE>
<P>
Listens to <A HREF="../../../../net/sf/ehcache/CacheManager.html" title="class in net.sf.ehcache"><CODE>CacheManager</CODE></A> and <A HREF="../../../../net/sf/ehcache/Cache.html" title="class in net.sf.ehcache"><CODE>Cache</CODE></A> events and propagates those to
<A HREF="../../../../net/sf/ehcache/distribution/CachePeer.html" title="interface in net.sf.ehcache.distribution"><CODE>CachePeer</CODE></A> peers of the Cache.
<P>
<P>
<DL>
<DT><B>Version:</B></DT>
<DD>$Id: RMISynchronousCacheReplicator.java 519 2007-07-27 07:11:45Z gregluck $</DD>
<DT><B>Author:</B></DT>
<DD>Greg Luck</DD>
</DL>
<HR>
<P>
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#replicatePuts">replicatePuts</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether to replicate puts.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#replicateRemovals">replicateRemovals</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether to replicate removes</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#replicateUpdates">replicateUpdates</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether to replicate updates.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#replicateUpdatesViaCopy">replicateUpdatesViaCopy</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether an update (a put) should be by copy or by invalidation, (a remove).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../net/sf/ehcache/Status.html" title="class in net.sf.ehcache">Status</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#status">status</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The status of the replicator.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#RMISynchronousCacheReplicator(boolean, boolean, boolean, boolean)">RMISynchronousCacheReplicator</A></B>(boolean&nbsp;replicatePuts,
boolean&nbsp;replicateUpdates,
boolean&nbsp;replicateUpdatesViaCopy,
boolean&nbsp;replicateRemovals)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor for internal and subclass use</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#alive()">alive</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks that the replicator is is <code>STATUS_ALIVE</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#clone()">clone</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a clone of this listener.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#dispose()">dispose</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Give the replicator a chance to cleanup and free resources when no longer needed</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#isReplicateUpdatesViaCopy()">isReplicateUpdatesViaCopy</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether update is through copy or invalidate</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>(package private) static&nbsp;java.util.List</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#listRemoteCachePeers(net.sf.ehcache.Ehcache)">listRemoteCachePeers</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Package protected List of cache peers</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notAlive()">notAlive</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Asserts that the replicator is active.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementEvicted(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementEvicted</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called immediately after an element is evicted from the cache.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementExpired(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementExpired</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called immediately after an element is <i>found</i> to be expired.
<p/>
This implementation does not propagate expiries.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementPut(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementPut</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called immediately after an element has been put into the cache.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementRemoved(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementRemoved</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called immediately after an attempt to remove an element.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementUpdated(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementUpdated</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called immediately after an element has been put into the cache and the element already
existed in the cache.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyRemoveAll(net.sf.ehcache.Ehcache)">notifyRemoveAll</A></B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called during <A HREF="../../../../net/sf/ehcache/Ehcache.html#removeAll()"><CODE>Ehcache.removeAll()</CODE></A> to indicate that the all
elements have been removed from the cache in a bulk operation.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ============ FIELD DETAIL =========== -->
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="status"><!-- --></A><H3>
status</H3>
<PRE>
protected <A HREF="../../../../net/sf/ehcache/Status.html" title="class in net.sf.ehcache">Status</A> <B>status</B></PRE>
<DL>
<DD>The status of the replicator. Only replicates when <code>STATUS_ALIVE</code>
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="replicatePuts"><!-- --></A><H3>
replicatePuts</H3>
<PRE>
protected final boolean <B>replicatePuts</B></PRE>
<DL>
<DD>Whether to replicate puts.
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="replicateUpdates"><!-- --></A><H3>
replicateUpdates</H3>
<PRE>
protected final boolean <B>replicateUpdates</B></PRE>
<DL>
<DD>Whether to replicate updates.
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="replicateUpdatesViaCopy"><!-- --></A><H3>
replicateUpdatesViaCopy</H3>
<PRE>
protected final boolean <B>replicateUpdatesViaCopy</B></PRE>
<DL>
<DD>Whether an update (a put) should be by copy or by invalidation, (a remove).
<p/>
By copy is best when the entry is expensive to produce. By invalidation is best when
we are really trying to force other caches to sync back to a canonical source like a database.
An example of a latter usage would be a read/write cache being used in Hibernate.
<p/>
This setting only has effect if <code>#replicateUpdates</code> is true.
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="replicateRemovals"><!-- --></A><H3>
replicateRemovals</H3>
<PRE>
protected final boolean <B>replicateRemovals</B></PRE>
<DL>
<DD>Whether to replicate removes
<P>
<DL>
</DL>
</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="RMISynchronousCacheReplicator(boolean, boolean, boolean, boolean)"><!-- --></A><H3>
RMISynchronousCacheReplicator</H3>
<PRE>
public <B>RMISynchronousCacheReplicator</B>(boolean&nbsp;replicatePuts,
boolean&nbsp;replicateUpdates,
boolean&nbsp;replicateUpdatesViaCopy,
boolean&nbsp;replicateRemovals)</PRE>
<DL>
<DD>Constructor for internal and subclass use
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>replicatePuts</CODE> - <DD><CODE>replicateUpdates</CODE> - <DD><CODE>replicateUpdatesViaCopy</CODE> - <DD><CODE>replicateRemovals</CODE> - </DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="notifyElementPut(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><!-- --></A><H3>
notifyElementPut</H3>
<PRE>
public void <B>notifyElementPut</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)
throws <A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></PRE>
<DL>
<DD>Called immediately after an element has been put into the cache. The <A HREF="../../../../net/sf/ehcache/Cache.html#put(net.sf.ehcache.Element)"><CODE>Cache.put(net.sf.ehcache.Element)</CODE></A> method
will block until this method returns.
<p/>
Implementers may wish to have access to the Element's fields, including value, so the element is provided.
Implementers should be careful not to modify the element. The effect of any modifications is undefined.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyElementPut(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementPut</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification<DD><CODE>element</CODE> - the element which was just put into the cache.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></CODE></DL>
</DD>
</DL>
<HR>
<A NAME="notifyElementUpdated(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><!-- --></A><H3>
notifyElementUpdated</H3>
<PRE>
public void <B>notifyElementUpdated</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)
throws <A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></PRE>
<DL>
<DD>Called immediately after an element has been put into the cache and the element already
existed in the cache. This is thus an update.
<p/>
The <A HREF="../../../../net/sf/ehcache/Cache.html#put(net.sf.ehcache.Element)"><CODE>Cache.put(net.sf.ehcache.Element)</CODE></A> method
will block until this method returns.
<p/>
Implementers may wish to have access to the Element's fields, including value, so the element is provided.
Implementers should be careful not to modify the element. The effect of any modifications is undefined.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyElementUpdated(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementUpdated</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification<DD><CODE>element</CODE> - the element which was just put into the cache.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></CODE></DL>
</DD>
</DL>
<HR>
<A NAME="notifyElementRemoved(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><!-- --></A><H3>
notifyElementRemoved</H3>
<PRE>
public void <B>notifyElementRemoved</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)
throws <A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></PRE>
<DL>
<DD>Called immediately after an attempt to remove an element. The remove method will block until
this method returns.
<p/>
This notification is received regardless of whether the cache had an element matching
the removal key or not. If an element was removed, the element is passed to this method,
otherwise a synthetic element, with only the key set is passed in.
<p/>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyElementRemoved(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementRemoved</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification<DD><CODE>element</CODE> - the element just deleted, or a synthetic element with just the key set if
no element was removed.param element just deleted
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../net/sf/ehcache/CacheException.html" title="class in net.sf.ehcache">CacheException</A></CODE></DL>
</DD>
</DL>
<HR>
<A NAME="notifyElementExpired(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><!-- --></A><H3>
notifyElementExpired</H3>
<PRE>
public final void <B>notifyElementExpired</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</PRE>
<DL>
<DD>Called immediately after an element is <i>found</i> to be expired. The
<A HREF="../../../../net/sf/ehcache/Cache.html#remove(java.lang.Object)"><CODE>Cache.remove(Object)</CODE></A> method will block until this method returns.
<p/>
As the <A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache"><CODE>Element</CODE></A> has been expired, only what was the key of the element is known.
<p/>
Elements are checked for expiry in ehcache at the following times:
<ul>
<li>When a get request is made
<li>When an element is spooled to the diskStore in accordance with a MemoryStore
eviction policy
<li>In the DiskStore when the expiry thread runs, which by default is
<A HREF="../../../../net/sf/ehcache/Cache.html#DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS"><CODE>Cache.DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS</CODE></A>
</ul>
If an element is found to be expired, it is deleted and this method is notified.
<p/>
This implementation does not propagate expiries. It does not need to do anything because the element will
expire in the remote cache at the same time. If the remote peer is not configured the same way they should
not be in an cache cluster.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyElementExpired(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementExpired</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification<DD><CODE>element</CODE> - the element that has just expired
<p/>
Deadlock Warning: expiry will often come from the <code>DiskStore</code>
expiry thread. It holds a lock to the DiskStorea the time the
notification is sent. If the implementation of this method calls into a
synchronized <code>Cache</code> method and that subsequently calls into
DiskStore a deadlock will result. Accordingly implementers of this method
should not call back into Cache.</DL>
</DD>
</DL>
<HR>
<A NAME="notifyElementEvicted(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><!-- --></A><H3>
notifyElementEvicted</H3>
<PRE>
public void <B>notifyElementEvicted</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache,
<A HREF="../../../../net/sf/ehcache/Element.html" title="class in net.sf.ehcache">Element</A>&nbsp;element)</PRE>
<DL>
<DD>Called immediately after an element is evicted from the cache. Evicted in this sense
means evicted from one store and not moved to another, so that it exists nowhere in the
local cache.
<p/>
In a sense the Element has been <i>removed</i> from the cache, but it is different,
thus the separate notification.
<p/>
This replicator does not propagate these events
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyElementEvicted(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)">notifyElementEvicted</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification<DD><CODE>element</CODE> - the element that has just been evicted</DL>
</DD>
</DL>
<HR>
<A NAME="notifyRemoveAll(net.sf.ehcache.Ehcache)"><!-- --></A><H3>
notifyRemoveAll</H3>
<PRE>
public void <B>notifyRemoveAll</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache)</PRE>
<DL>
<DD>Called during <A HREF="../../../../net/sf/ehcache/Ehcache.html#removeAll()"><CODE>Ehcache.removeAll()</CODE></A> to indicate that the all
elements have been removed from the cache in a bulk operation. The usual
<A HREF="../../../../net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html#notifyElementRemoved(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)"><CODE>notifyElementRemoved(net.sf.ehcache.Ehcache,net.sf.ehcache.Element)</CODE></A>
is not called.
<p/>
This notification exists because clearing a cache is a special case. It is often
not practical to serially process notifications where potentially millions of elements
have been bulk deleted.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#notifyRemoveAll(net.sf.ehcache.Ehcache)">notifyRemoveAll</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> - the cache emitting the notification</DL>
</DD>
</DL>
<HR>
<A NAME="listRemoteCachePeers(net.sf.ehcache.Ehcache)"><!-- --></A><H3>
listRemoteCachePeers</H3>
<PRE>
static java.util.List <B>listRemoteCachePeers</B>(<A HREF="../../../../net/sf/ehcache/Ehcache.html" title="interface in net.sf.ehcache">Ehcache</A>&nbsp;cache)</PRE>
<DL>
<DD>Package protected List of cache peers
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cache</CODE> -
<DT><B>Returns:</B><DD>a list of <A HREF="../../../../net/sf/ehcache/distribution/CachePeer.html" title="interface in net.sf.ehcache.distribution"><CODE>CachePeer</CODE></A> peers for the given cache, excluding the local peer.</DL>
</DD>
</DL>
<HR>
<A NAME="isReplicateUpdatesViaCopy()"><!-- --></A><H3>
isReplicateUpdatesViaCopy</H3>
<PRE>
public final boolean <B>isReplicateUpdatesViaCopy</B>()</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html#isReplicateUpdatesViaCopy()">CacheReplicator</A></CODE></B></DD>
<DD>Returns whether update is through copy or invalidate
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html#isReplicateUpdatesViaCopy()">isReplicateUpdatesViaCopy</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html" title="interface in net.sf.ehcache.distribution">CacheReplicator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>whether update is through copy or invalidate</DL>
</DD>
</DL>
<HR>
<A NAME="notAlive()"><!-- --></A><H3>
notAlive</H3>
<PRE>
public final boolean <B>notAlive</B>()</PRE>
<DL>
<DD>Asserts that the replicator is active.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html#notAlive()">notAlive</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html" title="interface in net.sf.ehcache.distribution">CacheReplicator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>true if the status is not STATUS_ALIVE</DL>
</DD>
</DL>
<HR>
<A NAME="alive()"><!-- --></A><H3>
alive</H3>
<PRE>
public final boolean <B>alive</B>()</PRE>
<DL>
<DD>Checks that the replicator is is <code>STATUS_ALIVE</code>.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html#alive()">alive</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/distribution/CacheReplicator.html" title="interface in net.sf.ehcache.distribution">CacheReplicator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>true if the replicator is is <code>STATUS_ALIVE</code>, else false.</DL>
</DD>
</DL>
<HR>
<A NAME="dispose()"><!-- --></A><H3>
dispose</H3>
<PRE>
public void <B>dispose</B>()</PRE>
<DL>
<DD>Give the replicator a chance to cleanup and free resources when no longer needed
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#dispose()">dispose</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="clone()"><!-- --></A><H3>
clone</H3>
<PRE>
public java.lang.Object <B>clone</B>()
throws java.lang.CloneNotSupportedException</PRE>
<DL>
<DD>Creates a clone of this listener. This method will only be called by ehcache before a cache is initialized.
<p/>
This may not be possible for listeners after they have been initialized. Implementations should throw
CloneNotSupportedException if they do not support clone.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html#clone()">clone</A></CODE> in interface <CODE><A HREF="../../../../net/sf/ehcache/event/CacheEventListener.html" title="interface in net.sf.ehcache.event">CacheEventListener</A></CODE><DT><B>Overrides:</B><DD><CODE>clone</CODE> in class <CODE>java.lang.Object</CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>a clone
<DT><B>Throws:</B>
<DD><CODE>java.lang.CloneNotSupportedException</CODE> - if the listener could not be cloned.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RMISynchronousCacheReplicator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<a href="/" target="_top">ehcache</a></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../net/sf/ehcache/distribution/RMICacheReplicatorFactory.html" title="class in net.sf.ehcache.distribution"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?net/sf/ehcache/distribution/RMISynchronousCacheReplicator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RMISynchronousCacheReplicator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>