public abstract class UniversalMembershipListenerAdapter extends 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
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.service
- the ManagementService
with which to register this adapterpublic 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.service
- the ManagementService
with which to unregister this adapterpublic 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
event
- the triggering eventpublic void memberLeft(MembershipEvent event)
CacheServer
.memberLeft
in interface MembershipListener
event
- the triggering eventpublic void memberCrashed(MembershipEvent event)
CacheServer
.memberCrashed
in interface MembershipListener
event
- the triggering event