...
This spec only points out federation strategy for Mbeans. The Mbean modeling and details about the Mbeans are mentioned in related document section.
Related Document
- https://wikicwiki.gemstoneapache.comorg/confluence/display/ToolingGEODE/Proposed+GemFire+MBeans
- https://wikicwiki.gemstoneapache.comorg/confluence/display/ToolingGEODE/MBeanServer+Federation+Strategy
- https://wiki.gemstone.com/download/attachments/33456981/JMXFederation-POC.pdf
...
GemFire will provide following services for Management and Monitoring. - Single Agent View of Distributed System MBeans
- Management Resources : Connectors and predefined MBeans.
- Inbuilt Federation Mechanism
Single-Agent ViewWith a single-agent view, the application or manager interacts with one MBeanServer. Application and manager development is much easier because they don't have to find the right MBeanServer to make a request on an MBean. That MBeanServer is responsible for aggregating all of the MBeans in the MBeanServers with which it is federated. This is very convenient because the application or manager can interact with a local MBeanServer that has services and adapters to interact with other local or remote MBeanServers. The location of the federated MBeanServers does not change how the application or manager is programmed to interact with its MBeanServer. For the sake of this discussion, we will refer to the single-agent MBeanServer as Managing Node. The MBeanServers that the master interacts with (and the application does not) will be referred to as Managed Node. GemFire achieves Single-Agent View by creating MBean proxies at Managing Node side and keeping their state in sync with their Managed node counterpart. Management Resources- An RMI Connector which will allow JMX Client to connect directly to the node to and get access to all local MBeans.
- Local MBeans : representing the local monitored components on this node.
- MemberMBean
- RegionMBean
- ClientServiceMBean
- LockServiceMBean
- DiskStoreMBean
- GatewaySenderMBean
- GatewayReceiverMBean
- LocatorMBean
- Management MBean with Scope=LOCAL
- Built in platform MBeans
- Custom MBeans
- An RMI Connector which will allow JMX Client to connect to and get access to all MBeans of the distributed system
- Local MBeans : representing the local monitored components on this node. Same as any other managed node
- Aggregate MBeans :
- DistributedSystemMBean
- DistributedRegionMBean
- MemberGroupMBean
- DistributedLockServiceMBean
- Management MBean with Scope=ALL which allows various DS-wide operations.
- Proxy to MBeans on managed nodes
- Built in platform MBeans
- Custom MBeans
Inbuilt Federation MechanismGemFire federation mechanism is the process by virtue of which we can achieve single agent view.The protocol used is internal to GemFire and does not interfere with any application and manager implementation. 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 ConventionEach 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 InterfacesGemFire 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 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 |
---|
| public class ManagementService {
|
* It will a singleton instance across a Cache. This instance will
| * act as th einterface between user and GemFire Management.
| * @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 | * domain should use this * Note: The ObjectName will be modified here. Hence returning the
| 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 interfaceClass MBean interface class
| * @param notificationEmitter is the MBean a notification emitter
|
public <T> boolean federate(ObjectName name, Class<T> interfaceClass, |
boolean notificationEmitter) {}
boolean notificationEmitter) {}
/**
| * This method is used to process a command
| * This takes an String is a parameter.
| public Object processComand(String commandString){}
|
* Interfaces to get all GemFire specific MBeans
| public RegionMXBean getLocalRegionMXBean(Region region) {}
|
public LockServiceMXBean getLocalLockServiceMXBean(String name){} |
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);
APIs useful at Managing Node public class ManagementService {
/**
* This method will be invoked whenever a member wants to be a managing node. The
* exception Management exception has to be handled by the caller.
*/
public void startManager() {}
/**
* This method will be invoked whenever a member stops being a managing node.
* The exception Management exception has to be handled by the caller.
* This will stop all the activities and clean up resources pertaining to
* Managing Node
*
*/
public void stopManager() {}
....
....
/**
* This will return a set of MBean proxy names for a given member name
* @param memberName
* @return
*/
public Set<ObjectName> queryProxyMBeans(DistributedMember memberName) {}
/**
* The method will return the proxy instance represented by the ObjectName.
*
* It will be an actual reference to the proxy instance rather than an
* ObjectInstance.
*
* @param <T>
* @param objectName
* @return
* @throws ManagementException
* @throws InstanceNotFoundException
*/
public <T> T getMBeanProxy(DistributedMember memberName,
ObjectName objectName, Class<T> interfaceClass){}
/**
* This will return the last updated time of the proxyMBean
*
* @param memberName
* @return
*/
public long getLastUpdateTime(ObjectName objectName) {}
public Object processComand(String commandString) {}
/**
* Methods to get remote MBean proxy reference
*/
public RegionMXBean getRemoteRegionMXBean(DistributedMember memberName ,Region region) {}
public LockServiceMXBean getRemoteLockServiceMXBean(DistributedMember memberName, String name) {}
..........
.............
}
|
...