...
GemFire federation takes care of the following functionality
- MBean proxy creation
- MBean state propagation
- notifications propagation
- operation invocation.
GemFire federation is not limited to predefined MBeans only. In fact users can write their own MBeans and GemFire will provide a federated view of their MBean.
MBean/Proxy Naming Convention
Each GemFire MBean will follow a particular naming convention for easier grouping
e.g. GemFire:type=Member,service=LockService,name=<dlsName>,memberName=<memberName>
At the managing node this MBean will be registered with GemFire/<memberId> as domain
e.g. GemFire:type=Member,service=LockService,name=<dlsName>,memberName=<memberName>
...
Application Program Interfaces
GemFire Management API represent the Gemfire System view to a JMX user. However it does not intend to provide functionality which is otherwise present in JMX. It only provides a gateway into various services exclusively offered by GemFire Management.
The entry point to GemFire Management is through interface ManagementService
Code Block |
---|
ManagementService service = ManagementService.getManagementService(cache); |
...
|
The implementation of getManagementService is a singleton for now but it allows us to eventually support multiple cache instances (probably multiple client caches and on peer cache). The resulting ManagementService instance will be specific to the provided cache and its distributed system. Also the instance will behave differently when the cache is a client cache vs a peer cache. When its a client cache then execution of a command string should be forwarded to the cache server instead of processed in the local JVM. More detailing needs to be done for client cache.
APIs useful at Managed Node
Code Block language java public
class
ManagementService {
as th einterface between user and GemFire Management. * @param Cache * @return ManagementService *//** * It will a singleton instance across a Cache. This instance will * act
public
static
ManagementService getManagementService(Cache cache){}
/** * This will register the MBean in default GemFire domain. * Any MBean which wishes to register itself in Gemfire * domain should use this method. * Note: The ObjectName will be modified here. Hence returning the * modified ObjectName. */
public
ObjectName registerMBean(Object object, ObjectName objectName){}
/** * For consistency and clean up of GemFire resources * use this method to unregister the MBean from GemFire Domain */
public
void
unregisterMBean(ObjectName objectName){}
/** * This method is used to mark an MBean for federation. * * Users may want to only register their MBean in GemFire domain. In that * case they don't have to call federate(); * * @param <T> * @param name MBean name * @param interfaceClass MBean interface class * @param notificationEmitter is the MBean a notification emitter * @return */
public
<T>
boolean
federate(ObjectName name, Class<T> interfaceClass,
boolean
notificationEmitter) {}
/** * This method is used to process a command * This takes an String is a parameter. * @param commandString * @return */
public
Object processComand(String commandString){}
/** * Interfaces to get all GemFire specific MBeans * */
public
RegionMXBean getLocalRegionMXBean(Region region) {}
public
LockServiceMXBean getLocalLockServiceMXBean(String name){}as the interface between user and GemFire Management. * * @param Cache * @return ManagementService */ public static ManagementService getManagementService(Cache cache) { } /** * This will register the MBean in default GemFire domain. * Any MBean which wishes to register itself in Gemfire * domain should use this method. * Note: The ObjectName will be modified here. Hence returning the * modified ObjectName. */ public ObjectName registerMBean(Object object, ObjectName objectName) { } /** * For consistency and clean up of GemFire resources * use this method to unregister the MBean from GemFire Domain */ public void unregisterMBean(ObjectName objectName) { } /** * This method is used to mark an MBean for federation. * * Users may want to only register their MBean in GemFire domain. In that * case they don't have to call federate(); * * @param <T> * @param name MBean name * @param interfaceClass MBean interface class * @param notificationEmitter is the MBean a notification emitter */ public <T> boolean federate(ObjectName name, Class<T> interfaceClass, boolean notificationEmitter) { } /** * This method is used to process a command * This takes an String is a parameter. * * @param commandString * @return */ public Object processComand(String commandString) { } /** * Interfaces to get all GemFire specific MBeans * */ public RegionMXBean getLocalRegionMXBean(Region region) { } public LockServiceMXBean getLocalLockServiceMXBean(String name){ } ........ }
APIs useful for MBean Federation
Usage :
MyCustomMXBean myMbean =
new
MyCustomMBean(); ManagementService service = ManagementService.getManagementService(cache);
//To register in Gemfire domain // GemFire will modify the given ObjectName to append memberName ObjectName newObjectName service.register(myMbean, name); /** * To allow MyCustomMBean to be federated */ service.federate(newObjectName, MyCustomMXBean.class, false);
...