Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

GemFire federation takes care of the following functionality

 

  1. MBean proxy creation
  2. MBean state propagation
  3. notifications propagation
  4. 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 {
     
    
      /**
       * It will a singleton instance across a Cache. This instance will
       * act
    as th einterface 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 * @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);

...