blob: d99961d45a4294a84386c683c54da67d899128fd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.management;
import java.util.Set;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import org.apache.geode.cache.Cache;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.management.internal.BaseManagementService;
import org.apache.geode.management.membership.MembershipListener;
/**
* Interface to the GemFire management service for a single Cache.
*
* @since GemFire 7.0
*/
public abstract class ManagementService {
/**
* Returns a newly created or the existing instance of the management service for a cache.
*
* @param cache Cache for which to get the management service.
*/
public static ManagementService getManagementService(Cache cache) {
return BaseManagementService
.getManagementService(((InternalCache) cache).getCacheForProcessingClientRequests());
}
/**
* Returns the existing instance of the management service for a cache.
*
* @param cache Cache for which to get the management service.
* @return The existing management service if one exists, null otherwise.
*/
public static ManagementService getExistingManagementService(Cache cache) {
return BaseManagementService.getExistingManagementService((InternalCache) cache);
}
/**
* Returns whether this member is running the management service.
*
* @return True if this member is running the management service, false otherwise.
*/
public abstract boolean isManager();
/**
* Starts the management service on this member.
*/
public abstract void startManager();
/**
* Stops the management service running on this member.
*/
public abstract void stopManager();
/**
* Registers an MBean in the GemFire domain. Any other domain specified as part of the object will
* be ignored.
*
* @param object MBean to register.
* @param objectName Object name of the MBean to register.
* @return Object name, which may have been modified to use the GemFire domain.
*/
public abstract ObjectName registerMBean(Object object, ObjectName objectName);
/**
* Unregisters an MBean.
*
* @param objectName Object name of the MBean to unregister.
*/
public abstract void unregisterMBean(ObjectName objectName);
/**
* Adds a bean to the list of those being federated, meaning that it's state will be periodically
* pushed to managing members. It's possible to simply register MBeans in the GemFire domain
* without calling federate if the developer doesn't need their state to be shared amongst
* members. Note that Dynamic MBeans are not supported by this service.
*
* <pre>
* Example Usage:
*
* <code>CustomMXBean bean = new CustomMBean();
* ObjectName beanName = ObjectName.getInstance("DefualtDomain:type=CustomType");
* ObjectName gemfireBeanName = service.registerMBean(customMBean, customMBeanName);
* service.federate(gemfireBeanName, CustomMXBean.class, true);</code>
* </pre>
*
* @param objectName Object name of the MBean.
* @param interfaceClass Interface which this MBean exposes.
* @param notificationEmitter True if the MBean is a notification emitter.
*/
public abstract <T> void federate(ObjectName objectName, Class<T> interfaceClass,
boolean notificationEmitter);
/**
* Returns the MemberMXBean for managing and monitoring the local member.
*/
public abstract MemberMXBean getMemberMXBean();
/**
* Returns a RegionMXBbean for managing and monitoring a Region.
*
* @param regionPath Path of the region.
* @return A RegionMXBean if the region exists, null otherwise.
*/
public abstract RegionMXBean getLocalRegionMBean(String regionPath);
/**
* Returns a LockServiceMXBean for managing and monitoring a lock service.
*
* @param lockServiceName Name of the lock service.
* @return A LockServiceMXBean if the lock service exists, null otherwise.
*/
public abstract LockServiceMXBean getLocalLockServiceMBean(String lockServiceName);
/**
* Returns a DiskStoreMXBean for managing and monitoring a disk store.
*
* @param diskStoreName Name of the disk store.
* @return A DiskStoreMXBean if the disk store exists, null otherwise.
*/
public abstract DiskStoreMXBean getLocalDiskStoreMBean(String diskStoreName);
/**
* Returns a CacheServerMXBean for managing and monitoring a cache server.
*
* @param serverPort Port on which the cache server is listening.
* @return A CacheServerMXBean if the cache server is found, null otherwise.
*/
public abstract CacheServerMXBean getLocalCacheServerMXBean(int serverPort);
/**
* Returns the DistributedSystemMXBean for managing and monitoring the distributed system as a
* whole.
*
* @return A DistributedSystemMXBean if one is found, null otherwise.
*/
public abstract DistributedSystemMXBean getDistributedSystemMXBean();
/**
* Returns the ManagerMXBean for the management service.
*
* @return A ManagerMXBean if one is found, null otherwise.
*/
public abstract ManagerMXBean getManagerMXBean();
/**
* Returns a DistributedRegionMXBean for managing and monitoring a region from a system wide
* perspective.
*
* @param regionPath Path of the Region.
* @return A DistributedRegionMXBean if the region exists, null otherwise.
*/
public abstract DistributedRegionMXBean getDistributedRegionMXBean(String regionPath);
/**
* Returns a LockServiceMXBean for managing and monitoring a lock service from a system wide
* perspective.
*
* @param lockServiceName Name of the LockService.
* @return A DistributedLockServiceMXBean if the lock service exists, null otherwise.
*/
public abstract DistributedLockServiceMXBean getDistributedLockServiceMXBean(
String lockServiceName);
/**
* Returns the GatewayReceiverMXBean for managing and monitoring the gateway receiver.
*
* @return A GatewayReceiverMXBean if one is found, null otherwise.
*/
public abstract GatewayReceiverMXBean getLocalGatewayReceiverMXBean();
/**
* Returns a GatewaySenderMXBean for managing and monitoring a gateway sender.
*
* @param senderId ID of the gateway sender.
* @return A GatewaySenderMXBean if the gateway sender is found, null otherwise.
*/
public abstract GatewaySenderMXBean getLocalGatewaySenderMXBean(String senderId);
/**
* Returns a AsyncEventQueueMXBean for managing and monitoring an asynchronous queue.
*
* @param queueId ID of the asynchronous queue.
* @return An AsyncEventQueueMXBean if the asynchronous queue is found, null otherwise.
*/
public abstract AsyncEventQueueMXBean getLocalAsyncEventQueueMXBean(String queueId);
/**
* Returns the LocatorMXBean for managing and monitoring the locator.
*
* @return A LocatorMXBean if the locator is found, null otherwise.
*/
public abstract LocatorMXBean getLocalLocatorMXBean();
/**
* Returns the object names for all MBeans associated with a member.
*
* @param member Member for which to find MBeans.
*/
public abstract Set<ObjectName> queryMBeanNames(DistributedMember member);
/**
* Returns the ids of the async event queues on this member
*/
public abstract Set<ObjectName> getAsyncEventQueueMBeanNames(DistributedMember member);
/**
* Returns an instance of an MBean. This is a reference to the MBean instance and not a
* {@link ObjectInstance}.
*
* @param objectName Object name of the MBean.
* @param interfaceClass Interface which this MBean exposes.
* @throws ClassCastException if the MBean does not implement the given interface.
*/
public abstract <T> T getMBeanInstance(ObjectName objectName, Class<T> interfaceClass);
/**
* Returns the last updated time of the remote MBean as reported by Sysem.currentTimeMillis().
*
* @param objectName Object name of the MBean.
* @return Last updated time or 0 if the MBean is local or the management service is not running
* on this member.
*/
public abstract long getLastUpdateTime(ObjectName objectName);
/**
* Returns the object name of the MemberMBean representing a distributed member. This is a utility
* method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
*/
public abstract ObjectName getMemberMBeanName(DistributedMember member);
/**
* Returns the object name of the RegionMBean representing a region. This is a utility method for
* generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param regionPath Path of the region.
*/
public abstract ObjectName getRegionMBeanName(DistributedMember member, String regionPath);
/**
* Returns the object name of the DiskStoreMBean representing a disk store. This is a utility
* method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param diskName Name of the disk store.
*/
public abstract ObjectName getDiskStoreMBeanName(DistributedMember member, String diskName);
/**
* Returns the object name of the CacheServerMBean representing a cache server. This is a utility
* method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param serverPort Port on which the cache server is listening.
*/
public abstract ObjectName getCacheServerMBeanName(int serverPort, DistributedMember member);
/**
* Returns the object name of the LockServiceMBean representing a lock service. This is a utility
* method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param lockServiceName Name of the lock service.
*/
public abstract ObjectName getLockServiceMBeanName(DistributedMember member,
String lockServiceName);
/**
* Returns the object name of the GatewayReciverMBean representing a gateway receiver. This is a
* utility method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
*/
public abstract ObjectName getGatewayReceiverMBeanName(DistributedMember member);
/**
* Returns the object name of the GatewaySenderMBean representing a gateway sender. This is a
* utility method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param gatwaySenderId ID of the gateway sender.
*/
public abstract ObjectName getGatewaySenderMBeanName(DistributedMember member,
String gatwaySenderId);
/**
* Returns the object name of the AsyncEventQueueMBean representing a asynchronous queue. This is
* a utility method for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
* @param queueId ID of the asynchronous queue.
*/
public abstract ObjectName getAsyncEventQueueMBeanName(DistributedMember member, String queueId);
/**
* Returns the object name of the DistributedRegionMBean representing a region. This is a utility
* method for generating an object name and it does not register an MBean.
*
* @param regionName Name of the region.
*/
public abstract ObjectName getDistributedRegionMBeanName(String regionName);
/**
* Returns the object name of the DistributedLockServiceMBean representing a lock service. This is
* a utility method for generating an object name and it does not register an MBean.
*
* @param lockService Name of the lock service.
*/
public abstract ObjectName getDistributedLockServiceMBeanName(String lockService);
/**
* Returns the object name of the getDistributedSystemMBeanName representing a distributed system.
* This is a utility method for generating an object name and it does not register an MBean.
*/
public abstract ObjectName getDistributedSystemMBeanName();
/**
* Returns the object name of the ManagerMBean representing a manager. This is a utility method
* for generating an object name and it does not register an MBean.
*/
public abstract ObjectName getManagerMBeanName();
/**
* Returns the object name of the LocatorMBean representing a locator. This is a utility method
* for generating an object name and it does not register an MBean.
*
* @param member Distributed member used to generate the object name.
*/
public abstract ObjectName getLocatorMBeanName(DistributedMember member);
/**
* Registers a listener that receives call backs when a member joins or leaves the distributed
* system.
*/
public abstract void addMembershipListener(MembershipListener listener);
/**
* Unregisters a membership listener
*
* @see #addMembershipListener
*/
public abstract void removeMembershipListener(MembershipListener listener);
}