public abstract class UniversalMembershipListenerAdapter extends java.lang.Object implements MembershipListener
The UniversalMembershipListenerAdapter
is a wrapper for
MembershipListener
and
ClientMembershipListener
, providing a facade that makes both appear
as a single MembershipListener
. This includes adapting
ClientMembershipListener
events to appear as events for the
MembershipListener
.
UniversalMembershipListenerAdapter
implements
MembershipListener
, exposing the callback in that interface as
methods to be overridden by implementing classes.
An internal implementation of ClientMembershipListener
is
registered when this class is instantiated. This implementation creates a
MembershipEvent
and calls
the corresponding MembershipListener
public methods on
UniversalMembershipListenerAdapter
.The
ClientMembershipEvent
s are wrapped to appear as
MembershipEvent
s. In this way, both types of membership events
appear as MembershipEvent
s.
Any CacheServer using the UniversalMembershipListenerAdapter
will receive notifications of peer membership changes and client membership
changes through a single listener.
Any cache client using the UniversalMembershipListenerAdapter
would receive notifications of cache server connection changes. If that cache
client also creates a connection to the GemFire
DistributedSystem
, then it will also
register the adapter for membership events. But it wont be an automatic
process. User needs to register the UniversalMembershipListenerAdapter with
ManagementService to receive membership events. How to register
UniversalMembershipListenerAdapter with ManagementService is explained below.
Subclasses of UniversalMembershipListenerAdapter
may be
registered as a MembershipListener
using
ManagementService.addMembershipListener(org.apache.geode.management.membership.MembershipListener)
.It is best, however, to register the listener using
registerMembershipListener(org.apache.geode.management.ManagementService)
since this allows the adapter to prevent
duplicate events for members that are both a peer member and a client.
Simply constructing the UniversalMembershipListenerAdapter
results in the underlying ClientMembershipListener
also being
registered.
The following code illustrates how a CacheServer application would use
UniversalMembershipListenerAdapter
. The code in this example
assumes that the class MyMembershipListenerImpl extends
UniversalMembershipListenerAdapter
:
public class MyMembershipListenerImpl extends UniversalMembershipListenerAdapter {
public void memberCrashed(MembershipEvent event) {
// customer code
}
public void memberLeft(MembershipEvent event) {
// customer code
}
public void memberJoined(MembershipEvent event) {
// customer code
}
}
Cache cache = //Get hold of GemFire Cache instance
ManagementService service = ManagementService.getExistingManagementService(cache);
MyMembershipListenerImpl myListener = new MyMembershipListenerImpl();
myListener.registerMembershipListener(service);
The callback on MyMembershipListenerImpl would then be invoked for all
MembershipEvent
s and ClientMembershipEvent
s. The
latter will appear to be MembershipEvent
s.
Similarly, the following code illustrates how a client application would use
UniversalMembershipListenerAdapter
, where
MyMembershipListenerImpl is a subclass.Simply by constructing this subclass
of UniversalMembershipListenerAdapter
it is registering itself
as a ClientMembershipListener
:
new MyMembershipListenerImpl();
A client that also connects to the DistributedSystem
could
register with theManagementService
as shown above.
It is recommended that subclasses register with the
ManagementService
using registerMembershipListener(org.apache.geode.management.ManagementService)
, as
this will prevent duplicate events for members that are both clients and peer
members.If duplicate events are acceptable, you may register subclasses using
ManagementService#addMembershipListener
.
Modifier and Type | Class and Description |
---|---|
static class |
UniversalMembershipListenerAdapter.AdaptedMembershipEvent
Adapts ClientMembershipEvent to look like a MembershipEvent
|
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_HISTORY_SIZE
Default number of historical events to track in order to avoid duplicate
events for members that are both clients and peer members; value is 100.
|
protected MembershipListener |
membershipListener |
Constructor and Description |
---|
UniversalMembershipListenerAdapter()
Constructs an instance of UniversalMembershipListenerAdapter.
|
UniversalMembershipListenerAdapter(int historySize)
Constructs an instance of UniversalMembershipListenerAdapter.
|
Modifier and Type | Method and Description |
---|---|
void |
memberCrashed(MembershipEvent event)
Invoked when a member has unexpectedly left the distributed system.
|
void |
memberJoined(MembershipEvent event)
Invoked when a member has joined the distributed system.
|
void |
memberLeft(MembershipEvent event)
Invoked when a member has gracefully left the distributed system.
|
void |
registerClientMembershipListener()
Registers this adapter as a
ClientMembershipListener . |
void |
registerMembershipListener(ManagementService service)
Registers this adapter with the
ManagementService . |
void |
unregisterClientMembershipListener()
Unregisters this adapter as a
ClientMembershipListener . |
void |
unregisterMembershipListener(ManagementService service)
Unregisters this adapter with the
ManagementService . |
public static final int DEFAULT_HISTORY_SIZE
protected final MembershipListener membershipListener
public UniversalMembershipListenerAdapter()
public UniversalMembershipListenerAdapter(int historySize)
historySize
- number of historical events to track in order to avoid duplicate
events for members that are both client and peer members; must a
number between 10 and Integer.MAX_INT
java.lang.IllegalArgumentException
- if historySize is less than 10public void registerMembershipListener(ManagementService service)
ManagementService
. Registering
in this way allows the adapter to ensure that callback will not be invoked
twice for members that have a client connection and a peer connection. If
you register with
ManagementService.addMembershipListener(org.apache.geode.management.membership.MembershipListener)
then duplicate events may occur for members that are both client and peer.public void unregisterMembershipListener(ManagementService service)
ManagementService
. If
registration is performed with registerMembershipListener(org.apache.geode.management.ManagementService)
then
this method must be used to successfully unregister the adapter.public void registerClientMembershipListener()
ClientMembershipListener
.
Registration is automatic when constructing this adapter, so this call is
not necessary unless it was previously unregistered by calling
unregisterClientMembershipListener()
.public void unregisterClientMembershipListener()
ClientMembershipListener
.registerClientMembershipListener()
public void memberJoined(MembershipEvent event)
CacheServer
.memberJoined
in interface MembershipListener
public void memberLeft(MembershipEvent event)
CacheServer
.memberLeft
in interface MembershipListener
public void memberCrashed(MembershipEvent event)
CacheServer
.memberCrashed
in interface MembershipListener