http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertsAggregator.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertsAggregator.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertsAggregator.java deleted file mode 100644 index b80b18b..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertsAggregator.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import org.apache.geode.internal.admin.GemFireVM; -import org.apache.geode.internal.admin.StatAlert; -import org.apache.geode.internal.admin.StatAlertDefinition; - -/** - * This interface represents an Aggregator entity and resides in JMXAgent. - * Responsibilities are as follows: - * <ol> - * <li> set AlertsManager in the newly joined members - * <li> create/update/remove alert - * <li> manage refresh interval - * <li> process notification from members - * <li> Aggregate stats & make available for clients thro' JMXAgent - * </ol> - * - */ -public interface StatAlertsAggregator { - - /** - * This method can be used to get an alert definition. - * - * @param alertDefinition - * StatAlertDefinition to retrieve - * @return StatAlertDefinition - */ - public StatAlertDefinition getAlertDefinition( - StatAlertDefinition alertDefinition); - - /** - * This method can be used to retrieve all available stat alert definitions. - * - * @return An array of all available StatAlertDefinition objects - */ - public StatAlertDefinition[] getAllStatAlertDefinitions(); - - /** - * This method can be used to update alert definition for the Stat mentioned. - * This method should update the collection maintained at the aggregator and - * should notify members for the newly added alert definitions. - * <p> - * A new alert definition will be created if matching one not found. - * - * @param alertDefinition - * alertDefinition to be updated - */ - public void updateAlertDefinition(StatAlertDefinition alertDefinition); - - /** - * This method can be used to remove alert definition for the Stat mentioned. - * <p> - * This method should update the collection maintained at the aggregator and - * should notify members for the newly added alert definitions. - * - * @param defId - * id of the alert definition to be removed - */ - public void removeAlertDefinition(Integer defId); - - /** - * Convenience method to check whether an alert definition is created. - * - * @param alert - * alert definition to check whether already created - * @return true if the alert definition is already created, false otherwise - */ - public boolean isAlertDefinitionCreated(StatAlertDefinition alert); - - /** - * This method can be used to set the AlertManager for the newly joined member - * VM. - * - * @param memberVM - * Member VM to set AlertsManager for - */ - public void setAlertsManager(GemFireVM memberVM); - - /** - * Returns the refresh interval for the Stats in seconds. - * - * @return refresh interval for the Stats(in seconds) - */ - public int getRefreshIntervalForStatAlerts(); - - /** - * This method is used to set the refresh interval for the Stats Alerts in - * seconds - * - * @param refreshInterval - * refresh interval for the Stats(in seconds) - */ - public void setRefreshIntervalForStatAlerts(int refreshInterval); - - /** - * This method can be used to process the notifications sent by the member(s). - * Actual aggregation of stats can occur here. The array contains alert - * objects with alert def. ID & value. AlertHelper class can be used to - * retrieve the corresponding alert definition. - * - * @param alerts - * array of Alert class(contains alert def. ID & value) - * @param remoteVM - */ - public void processNotifications(StatAlert[] alerts, GemFireVM remoteVM); - - public void processSystemwideNotifications(); -}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticAttributeInfo.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticAttributeInfo.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticAttributeInfo.java deleted file mode 100755 index 92c6091..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticAttributeInfo.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import org.apache.geode.admin.Statistic; -import org.apache.geode.internal.Assert; - -import javax.management.Descriptor; -import javax.management.modelmbean.DescriptorSupport; -import javax.management.modelmbean.ModelMBeanAttributeInfo; - -/** - * Subclass of AttributeInfo with {@link org.apache.geode.admin.Statistic} - * added for use as the {@link - * javax.management.modelmbean.ModelMBeanAttributeInfo} descriptor's - * <i>targetObject</i> value. - * - * @since GemFire 3.5 - * - */ -class StatisticAttributeInfo extends org.apache.commons.modeler.AttributeInfo { - private static final long serialVersionUID = 28022387514935560L; - - private Statistic stat; - - public StatisticAttributeInfo() { - super(); - } - - public Statistic getStat() { - return this.stat; - } - public void setStat(Statistic stat) { - //System.out.println(">> stat = " + stat); - Assert.assertTrue(stat != null, "Attempting to set stat to null"); - this.stat = stat; - } - - @Override - public ModelMBeanAttributeInfo createAttributeInfo() { - Descriptor desc = new DescriptorSupport( - new String[] { - "name=" + this.displayName, - "descriptorType=attribute", - "currencyTimeLimit=-1", // always stale - "displayName=" + this.displayName, - "getMethod=getValue" }); - - Assert.assertTrue(this.stat != null, "Stat target object is null!"); - desc.setField("targetObject", this.stat); - - ModelMBeanAttributeInfo info = new ModelMBeanAttributeInfo( - this.displayName, // name - this.type, // type - this.description, // description - this.readable, // isReadable - this.writeable, // isWritable - this.is, // isIs - desc); - - return info; - } -} - http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticResourceJmxImpl.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticResourceJmxImpl.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticResourceJmxImpl.java deleted file mode 100755 index 3e04500..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatisticResourceJmxImpl.java +++ /dev/null @@ -1,360 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import javax.management.Notification; -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBean; -import javax.naming.OperationNotSupportedException; - -import org.apache.commons.modeler.ManagedBean; -import org.apache.logging.log4j.Logger; - -import org.apache.geode.CancelException; -import org.apache.geode.LogWriter; -import org.apache.geode.SystemFailure; -import org.apache.geode.admin.AdminException; -import org.apache.geode.admin.Statistic; -import org.apache.geode.internal.admin.StatResource; -import org.apache.geode.internal.i18n.LocalizedStrings; -import org.apache.geode.internal.logging.LogService; - -/** - * Provides MBean support for the monitoring of a statistic resource. - * - * @since GemFire 3.5 - * - */ -public class StatisticResourceJmxImpl -extends org.apache.geode.admin.internal.StatisticResourceImpl -implements javax.management.NotificationListener, - org.apache.geode.admin.jmx.internal.ManagedResource { - - private static final Logger logger = LogService.getLogger(); - - /** - * Interval in seconds between refreshes. Values less than one results in no - * refreshing . - */ - private int refreshInterval = 0; - - /** The JMX object name of this managed resource */ - private ObjectName objectName; - - /** A flag to indicate if time is inited. MBeanUtil lookup is costly */ - private boolean timerInited = false; - - // ------------------------------------------------------------------------- - // Constructor(s) - // ------------------------------------------------------------------------- - - /** - * Constructor for the StatisticResource object - * - * @param statResource the admin StatResource to manage/monitor - * @param member the SystemMember owning this resource - * @exception org.apache.geode.admin.AdminException - * if unable to create this StatisticResource for administration - */ - public StatisticResourceJmxImpl(StatResource statResource, - SystemMemberJmx member) - throws org.apache.geode.admin.AdminException { - super(statResource, member); - initializeMBean(); - } - - /** Create and register the MBean to manage this resource */ - private void initializeMBean() - throws org.apache.geode.admin.AdminException { - this.mbeanName = new StringBuffer("GemFire.Statistic:") - .append("source=").append(MBeanUtil.makeCompliantMBeanNameProperty(this.member.getId())) - .append(",type=").append(MBeanUtil.makeCompliantMBeanNameProperty(getType())) - .append(",name=").append(MBeanUtil.makeCompliantMBeanNameProperty(getName())) - .append(",uid=").append(getUniqueId()).toString(); - - this.objectName = - MBeanUtil.createMBean(this, - addDynamicAttributes(MBeanUtil.lookupManagedBean(this))); - - // Refresh Interval - AdminDistributedSystemJmxImpl sysJmx = (AdminDistributedSystemJmxImpl)this.member.getDistributedSystem(); - if (sysJmx.getRefreshInterval()>0) - this.refreshInterval = sysJmx.getRefreshInterval(); - } - - // ------------------------------------------------------------------------- - // MBean attributes - accessors/mutators - // ------------------------------------------------------------------------- - - /** - * Gets the interval in seconds between statistics refreshes - * - * @return the current refresh interval in seconds - */ - public int getRefreshInterval() { - return this.refreshInterval; - } - - /** - * Sets interval in seconds between statistic refreshes; zero or less turns - * off auto refreshing. Manual refreshing has no effect on when the next - * scheduled refresh will occur. - * - * @param refreshInterval the new refresh interval in seconds - */ - private void _setRefreshInterval(int refreshInterval) { - boolean isRegistered = MBeanUtil.isRefreshNotificationRegistered(this, - RefreshNotificationType.STATISTIC_RESOURCE_STATISTICS); - - if (isRegistered && (getRefreshInterval() == refreshInterval)) - return; - - try { - MBeanUtil.registerRefreshNotification( - this, // NotificationListener - getMBeanName(), // User Data as MBean Name - RefreshNotificationType.STATISTIC_RESOURCE_STATISTICS, - refreshInterval); // int - - this.refreshInterval = refreshInterval; - timerInited = true; - } catch (RuntimeException e) { - logger.warn(e.getMessage(), e); // dead in water, print, and then ignore - this.refreshInterval = 0; // zero out to avoid more exceptions - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); // dead in water, print, and then ignore - this.refreshInterval = 0; // zero out to avoid more exceptions - } - } - - /** - * RefreshInterval is now set only through the AdminDistributedSystem property - * refreshInterval. Attempt to set refreshInterval on StatisticResourceJmx - * MBean would result in an OperationNotSupportedException - * Auto-refresh is enabled on demand when a call to getStatistics is made - * - * @param refreshInterval - * the new refresh interval in seconds - * @deprecated since 6.0 use DistributedSystemConfig.refreshInterval instead - */ - @Deprecated - public void setRefreshInterval(int refreshInterval) - throws OperationNotSupportedException { - throw new OperationNotSupportedException( - LocalizedStrings.MANAGED_RESOURCE_REFRESH_INTERVAL_CANT_BE_SET_DIRECTLY.toLocalizedString()); - } - - // ------------------------------------------------------------------------- - // JMX Notification listener - // ------------------------------------------------------------------------- - - /** - * Handles notification to refresh. Reacts by refreshing the values of this - * SystemMember's ConfigurationParamaters. Any other notification is ignored. - * Given notification is handled only if there is any JMX client connected to - * the system. - * <p> - * TODO: investigate use of NotificationFilter instead of explicit check... - * - * @param notification - * the JMX notification being received - * @param hb - * handback object is unused - */ - public void handleNotification(Notification notification, Object hb) { - AdminDistributedSystemJmxImpl adminDSJmx = - (AdminDistributedSystemJmxImpl) this.member.getDistributedSystem(); - - String typeStatResourceStats = - RefreshNotificationType.STATISTIC_RESOURCE_STATISTICS.getType(); - - if (typeStatResourceStats.equals(notification.getType()) && - getMBeanName().equals(notification.getUserData()) && - !adminDSJmx.isRmiClientCountZero()) { - try { - refresh(); - - } catch (org.apache.geode.admin.AdminException e) { - logger.warn(e.getMessage(), e); - } catch (org.apache.geode.admin.OperationCancelledException e) { - // underlying resource is no longer reachable by remote admin - logger.warn(e.getMessage(), e); - _setRefreshInterval(0); - } catch (CancelException e) { - // shutting down - okay to ignore - } catch (java.lang.RuntimeException e) { - logger.debug(e.getMessage(), e); // dead in water, print, and then ignore - _setRefreshInterval(0); // zero out to avoid more exceptions - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (java.lang.Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); // dead in water, print, and then ignore - this.refreshInterval = 0; // zero out to avoid more exceptions - } - } - } - - // ------------------------------------------------------------------------- - // Create MBean attributes for each Statistic - // ------------------------------------------------------------------------- - - /** - * Add MBean attribute definitions for each Statistic. - * - * @param managed the mbean definition to add attributes to - * @return a new instance of ManagedBean copied from <code>managed</code> but - * with the new attributes added - */ - ManagedBean addDynamicAttributes(ManagedBean managed) - throws org.apache.geode.admin.AdminException { - if (managed == null) { - throw new IllegalArgumentException(LocalizedStrings.StatisticResourceJmxImpl_MANAGEDBEAN_IS_NULL.toLocalizedString()); - } - - refresh(); // to get the stats... - - // need to create a new instance of ManagedBean to clean the "slate"... - ManagedBean newManagedBean = new DynamicManagedBean(managed); - for (int i = 0; i < this.statistics.length; i++) { - StatisticAttributeInfo attrInfo = new StatisticAttributeInfo(); - - attrInfo.setName(this.statistics[i].getName()); - attrInfo.setDisplayName(this.statistics[i].getName()); - attrInfo.setDescription(this.statistics[i].getDescription()); - attrInfo.setType("java.lang.Number"); - - attrInfo.setIs(false); - attrInfo.setReadable(true); - attrInfo.setWriteable(false); - - attrInfo.setStat(this.statistics[i]); - - newManagedBean.addAttribute(attrInfo); - } - return newManagedBean; - } - - public Statistic[] getStatistics() { - if (!timerInited) { - // 1st call to getStatistics would trigger - // the auto-refresh if an interval is set - if (this.refreshInterval>0) { - this._setRefreshInterval(this.refreshInterval); - } - } - - if (this.statistics == null) { - try { - this.refresh(); - } - catch (AdminException e) { - this.statistics = new Statistic[0]; - } - } - - return this.statistics; - } - - // ------------------------------------------------------------------------- - // ManagedResource implementation - // ------------------------------------------------------------------------- - - /** The name of the MBean that will manage this resource */ - private String mbeanName; - - /** The ModelMBean that is configured to manage this resource */ - private ModelMBean modelMBean; - - public String getMBeanName() { - return this.mbeanName; - } - - public ModelMBean getModelMBean() { - return this.modelMBean; - } - public void setModelMBean(ModelMBean modelMBean) { - this.modelMBean = modelMBean; - } - - public ObjectName getObjectName() { - return this.objectName; - } - - public ManagedResourceType getManagedResourceType() { - return ManagedResourceType.STATISTIC_RESOURCE; - } - - public void cleanupResource() { - this.modelMBean = null; - this.member = null; - this.statistics = null; - this.statResource = null; - } - - /** - * Checks equality of the given object with <code>this</code> based on the - * type (Class) and the MBean Name returned by <code>getMBeanName()</code> - * methods. - * - * @param obj - * object to check equality with - * @return true if the given object is if the same type and its MBean Name is - * same as <code>this</code> object's MBean Name, false otherwise - */ - @Override - public boolean equals(Object obj) { - if ( !(obj instanceof StatisticResourceJmxImpl) ) { - return false; - } - - StatisticResourceJmxImpl other = (StatisticResourceJmxImpl) obj; - - return this.getMBeanName().equals(other.getMBeanName()); - } - - /** - * Returns hash code for <code>this</code> object which is based on the MBean - * Name generated. - * - * @return hash code for <code>this</code> object - */ - @Override - public int hashCode() { - return this.getMBeanName().hashCode(); - } -} - http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java deleted file mode 100644 index 0040cb0..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import org.apache.geode.admin.AdminException; -import org.apache.geode.admin.internal.SystemMemberBridgeServerImpl; -import org.apache.geode.admin.internal.SystemMemberCacheImpl; -import org.apache.geode.internal.admin.AdminBridgeServer; -import org.apache.geode.internal.admin.GemFireVM; - -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBean; - -/** - * MBean representation of a {@link - * org.apache.geode.admin.SystemMemberBridgeServer}. - * - * @since GemFire 4.0 - */ -public class SystemMemberBridgeServerJmxImpl - extends SystemMemberBridgeServerImpl implements ManagedResource { - - /** The object name of this managed resource */ - private ObjectName objectName; - - /** The name of the MBean that will manage this resource */ - private String mbeanName; - - /** The ModelMBean that is configured to manage this resource */ - private ModelMBean modelMBean; - - ////////////////////// Constructors ////////////////////// - - /** - * Creates a new <code>SystemMemberBridgeServerJmxImpl</code> that - * serves the contents of the given cache. - */ - SystemMemberBridgeServerJmxImpl(SystemMemberCacheImpl cache, - AdminBridgeServer bridgeInfo) - throws AdminException { - - super(cache, bridgeInfo); - initializeMBean(cache); - } - - ////////////////////// Instance Methods ////////////////////// - - /** - * Creates and registers the MBean to manage this resource - */ - private void initializeMBean(SystemMemberCacheImpl cache) - throws AdminException { - - GemFireVM vm = cache.getVM(); - this.mbeanName = new StringBuffer("GemFire.Cache:") - .append("name=") - .append(MBeanUtil.makeCompliantMBeanNameProperty(cache.getName())) - .append(",id=") - .append(this.getBridgeId()) - .append(",owner=") - .append(MBeanUtil.makeCompliantMBeanNameProperty(vm.getId().toString())) - .append(",type=CacheServer").toString(); - - this.objectName = MBeanUtil.createMBean(this); - } - - public String getMBeanName() { - return this.mbeanName; - } - - public ModelMBean getModelMBean() { - return this.modelMBean; - } - public void setModelMBean(ModelMBean modelMBean) { - this.modelMBean = modelMBean; - } - - public ObjectName getObjectName() { - return this.objectName; - } - - public ManagedResourceType getManagedResourceType() { - return ManagedResourceType.SYSTEM_MEMBER_CACHE_SERVER; - } - - public void cleanupResource() {} - - /** - * Checks equality of the given object with <code>this</code> based on the - * type (Class) and the MBean Name returned by <code>getMBeanName()</code> - * methods. - * - * @param obj - * object to check equality with - * @return true if the given object is if the same type and its MBean Name is - * same as <code>this</code> object's MBean Name, false otherwise - */ - @Override - public boolean equals(Object obj) { - if ( !(obj instanceof SystemMemberBridgeServerJmxImpl) ) { - return false; - } - - SystemMemberBridgeServerJmxImpl other = - (SystemMemberBridgeServerJmxImpl) obj; - - return this.getMBeanName().equals(other.getMBeanName()); - } - - /** - * Returns hash code for <code>this</code> object which is based on the MBean - * Name generated. - * - * @return hash code for <code>this</code> object - */ - @Override - public int hashCode() { - return this.getMBeanName().hashCode(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberCacheJmxImpl.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberCacheJmxImpl.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberCacheJmxImpl.java deleted file mode 100644 index b8cc255..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberCacheJmxImpl.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBean; - -import org.apache.commons.modeler.ManagedBean; -import org.apache.logging.log4j.Level; - -import org.apache.geode.SystemFailure; -import org.apache.geode.admin.AdminException; -import org.apache.geode.admin.SystemMemberCacheServer; -import org.apache.geode.admin.SystemMemberRegion; -import org.apache.geode.admin.internal.SystemMemberBridgeServerImpl; -import org.apache.geode.cache.Region; -import org.apache.geode.internal.admin.AdminBridgeServer; -import org.apache.geode.internal.admin.GemFireVM; -import org.apache.geode.internal.i18n.LocalizedStrings; -import org.apache.geode.internal.logging.InternalLogWriter; - -/** - * MBean representation of {@link org.apache.geode.admin.SystemMemberCache}. - * - * @since GemFire 3.5 - */ -public class SystemMemberCacheJmxImpl -extends org.apache.geode.admin.internal.SystemMemberCacheImpl -implements org.apache.geode.admin.jmx.internal.ManagedResource { - - /** The object name of this managed resource */ - private ObjectName objectName; - - /** collection to collect all the resources created for this member */ - private Map<String, SystemMemberRegionJmxImpl> managedRegionResourcesMap = new HashMap<String, SystemMemberRegionJmxImpl>(); - private Map<Number, SystemMemberBridgeServerJmxImpl> managedCacheServerResourcesMap = new HashMap<Number, SystemMemberBridgeServerJmxImpl>(); - - // ------------------------------------------------------------------------- - // Constructor(s) - // ------------------------------------------------------------------------- - - /** - * Constructs an instance of SystemMemberCacheJmxImpl. - * - * @param vm - * The vm owning the cache this object will manage - */ - public SystemMemberCacheJmxImpl(GemFireVM vm) - throws org.apache.geode.admin.AdminException { - super(vm); - initializeMBean(); - } - - /** Create and register the MBean to manage this resource */ - private void initializeMBean() - throws org.apache.geode.admin.AdminException { - this.mbeanName = new StringBuffer("GemFire.Cache:") - .append("name=") - .append(MBeanUtil.makeCompliantMBeanNameProperty(getName())) - .append(",id=") - .append(getId()) - .append(",owner=") - .append(MBeanUtil.makeCompliantMBeanNameProperty(vm.getId().toString())) - .append(",type=Cache").toString(); - - this.objectName = - MBeanUtil.createMBean(this, - addDynamicAttributes(MBeanUtil.lookupManagedBean(this))); - } - - // ------------------------------------------------------------------------- - // Template methods overriden from superclass... - // ------------------------------------------------------------------------- - - /** - * Override createSystemMemberRegion by instantiating - * SystemMemberRegionJmxImpl. This instance is also added to the - * managedResources collection. - * - * @param r - * reference to Region instance for which this JMX resource is to be - * created - * @return SystemMemberRegionJmxImpl - JMX Implementation of - * SystemMemberRegion - * @throws AdminException - * if constructing SystemMemberRegionJmxImpl instance fails - */ - @Override - protected SystemMemberRegion createSystemMemberRegion(Region r) - throws org.apache.geode.admin.AdminException { - SystemMemberRegionJmxImpl managedSystemMemberRegion = null; - boolean needsRefresh = false; - synchronized (this.managedRegionResourcesMap) { - /* - * Ensuring that a single instance of System Member Region is created - * per Region. - */ - SystemMemberRegionJmxImpl managedResource = managedRegionResourcesMap.get(r.getFullPath()); - if (managedResource != null) { - managedSystemMemberRegion = managedResource; - } else { - managedSystemMemberRegion = new SystemMemberRegionJmxImpl(this, r); - managedRegionResourcesMap.put(r.getFullPath(), managedSystemMemberRegion); - needsRefresh = true; - } - } - if (needsRefresh) { - managedSystemMemberRegion.refresh(); - } - return managedSystemMemberRegion; - } - - /** - * Creates a SystemMemberBridgeServerJmxImpl instance. This instance is also - * added to the managedResources collection. - * - * @param bridge - * reference to AdminBridgeServer for which this JMX resource is to - * be created - * @return SystemMemberBridgeServerJmxImpl - JMX Implementation of - * SystemMemberBridgeServerImpl - * @throws AdminException - * if constructing SystemMemberBridgeServerJmxImpl instance fails - */ - @Override - protected SystemMemberBridgeServerImpl - createSystemMemberBridgeServer(AdminBridgeServer bridge) - throws AdminException { - SystemMemberBridgeServerJmxImpl managedSystemMemberBridgeServer = null; - synchronized (this.managedCacheServerResourcesMap) { - /* - * Ensuring that a single instance of SystemMember BridgeServer is - * created per AdminBridgeServer. - */ - SystemMemberBridgeServerJmxImpl managedCacheServerResource = managedCacheServerResourcesMap.get(bridge.getId()); - if (managedCacheServerResource != null) { - managedSystemMemberBridgeServer = managedCacheServerResource; - } else { - managedSystemMemberBridgeServer = new SystemMemberBridgeServerJmxImpl(this, bridge); - managedCacheServerResourcesMap.put(bridge.getId(), managedSystemMemberBridgeServer); - } - } - return managedSystemMemberBridgeServer; - } - - // ------------------------------------------------------------------------- - // Create MBean attributes for each Statistic - // ------------------------------------------------------------------------- - - /** - * Add MBean attribute definitions for each Statistic. - * - * @param managed the mbean definition to add attributes to - * @return a new instance of ManagedBean copied from <code>managed</code> but - * with the new attributes added - */ - ManagedBean addDynamicAttributes(ManagedBean managed) - throws org.apache.geode.admin.AdminException { - if (managed == null) { - throw new IllegalArgumentException(LocalizedStrings.SystemMemberCacheJmxImpl_MANAGEDBEAN_IS_NULL.toLocalizedString()); - } - - refresh(); // to get the stats... - - // need to create a new instance of ManagedBean to clean the "slate"... - ManagedBean newManagedBean = new DynamicManagedBean(managed); - for (int i = 0; i < this.statistics.length; i++) { - StatisticAttributeInfo attrInfo = new StatisticAttributeInfo(); - - attrInfo.setName(this.statistics[i].getName()); - attrInfo.setDisplayName(this.statistics[i].getName()); - attrInfo.setDescription(this.statistics[i].getDescription()); - attrInfo.setType("java.lang.Number"); - - attrInfo.setIs(false); - attrInfo.setReadable(true); - attrInfo.setWriteable(false); - - attrInfo.setStat(this.statistics[i]); - - newManagedBean.addAttribute(attrInfo); - } - - return newManagedBean; - } - - // ------------------------------------------------------------------------- - // MBean Operations - // ------------------------------------------------------------------------- - - /** - * Returns the ObjectName of the Region for the specified path. - * - * @throws AdminException - * If no region with path <code>path</code> exists - */ - public ObjectName manageRegion(String path) - throws AdminException, MalformedObjectNameException { - try { - SystemMemberRegionJmxImpl region = null; - - try { - region = (SystemMemberRegionJmxImpl) getRegion(path); - - } catch (AdminException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } - - if (region == null) { - throw new AdminException(LocalizedStrings.SystemMemberCacheJmxImpl_THIS_CACHE_DOES_NOT_CONTAIN_REGION_0.toLocalizedString(path)); - - } else { - return ObjectName.getInstance(region.getMBeanName()); - } - } catch (RuntimeException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - MBeanUtil.logStackTrace(Level.ERROR, e); - throw e; - } - } - - /** - * Creates a new cache server MBean and returns its - * <code>ObjectName</code>. - * - * @since GemFire 5.7 - */ - public ObjectName manageCacheServer() - throws AdminException, MalformedObjectNameException { - - try { - SystemMemberBridgeServerJmxImpl bridge = - (SystemMemberBridgeServerJmxImpl) addCacheServer(); - return ObjectName.getInstance(bridge.getMBeanName()); - } catch (AdminException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } catch (RuntimeException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - MBeanUtil.logStackTrace(Level.ERROR, e); - throw e; - } - } - - /** - * Returns the MBean <code>ObjectName</code>s for all cache servers - * that serve this cache to clients. - * - * @since GemFire 4.0 - */ - public ObjectName[] manageCacheServers() - throws AdminException, MalformedObjectNameException { - - try { - SystemMemberCacheServer[] bridges = getCacheServers(); - ObjectName[] names = new ObjectName[bridges.length]; - for (int i = 0; i < bridges.length; i++) { - SystemMemberBridgeServerJmxImpl bridge = - (SystemMemberBridgeServerJmxImpl) bridges[i]; - names[i] = ObjectName.getInstance(bridge.getMBeanName()); - } - - return names; - } catch (AdminException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } catch (RuntimeException e) { - MBeanUtil.logStackTrace(Level.WARN, e); - throw e; - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - MBeanUtil.logStackTrace(Level.ERROR, e); - throw e; - } - } - - /** - * Returns the MBean <code>ObjectName</code>s for all bridge servers - * that serve this cache. - * - * @since GemFire 4.0 - * @deprecated as of 5.7 - */ - @Deprecated - public ObjectName[] manageBridgeServers() - throws AdminException, MalformedObjectNameException { - return manageCacheServers(); - } - - // ------------------------------------------------------------------------- - // ManagedResource implementation - // ------------------------------------------------------------------------- - - /** The name of the MBean that will manage this resource */ - private String mbeanName; - - /** The ModelMBean that is configured to manage this resource */ - private ModelMBean modelMBean; - - public String getMBeanName() { - return this.mbeanName; - } - - public ModelMBean getModelMBean() { - return this.modelMBean; - } - public void setModelMBean(ModelMBean modelMBean) { - this.modelMBean = modelMBean; - } - - public ObjectName getObjectName() { - return this.objectName; - } - - public ManagedResourceType getManagedResourceType() { - return ManagedResourceType.SYSTEM_MEMBER_CACHE; - } - - - /** - * Un-registers all the statistics & cache managed resource created for this - * member. After un-registering the resource MBean instances, clears - * this.memberResources collection. - * - * Creates ConfigurationParameterJmxImpl, StatisticResourceJmxImpl and - * SystemMemberCacheJmxImpl. But cleans up only StatisticResourceJmxImpl and - * SystemMemberCacheJmxImpl which are of type ManagedResource. - */ - public void cleanupResource() { - synchronized (this.managedRegionResourcesMap) { - Collection<SystemMemberRegionJmxImpl> values = managedRegionResourcesMap.values(); - - for (SystemMemberRegionJmxImpl systemMemberRegionJmxImpl : values) { - MBeanUtil.unregisterMBean(systemMemberRegionJmxImpl); - } - - this.managedRegionResourcesMap.clear(); - } - - synchronized (this.managedCacheServerResourcesMap) { - Collection<SystemMemberBridgeServerJmxImpl> values = managedCacheServerResourcesMap.values(); - - for (SystemMemberBridgeServerJmxImpl SystemMemberBridgeServerJmxImpl : values) { - MBeanUtil.unregisterMBean(SystemMemberBridgeServerJmxImpl); - } - - this.managedCacheServerResourcesMap.clear(); - } - } - - /** - * Cleans up managed resources created for the region that was (created and) - * destroyed in a cache represented by this Managed Resource. - * - * @param regionPath - * path of the region that got destroyed - * @return a managed resource related to this region path - */ - public ManagedResource cleanupRegionResources(String regionPath) { - ManagedResource cleaned = null; - - synchronized (this.managedRegionResourcesMap) { - Set<Entry<String, SystemMemberRegionJmxImpl>> entries = managedRegionResourcesMap.entrySet(); - for (Iterator<Entry<String, SystemMemberRegionJmxImpl>> it = entries.iterator(); it.hasNext();) { - Entry<String, SystemMemberRegionJmxImpl> entry = it.next(); - SystemMemberRegionJmxImpl managedResource = entry.getValue(); - ObjectName objName = managedResource.getObjectName(); - - String pathProp = objName.getKeyProperty("path"); - if (pathProp != null && pathProp.equals(regionPath)) { - cleaned = managedResource; - it.remove(); - - break; - } - } - } - - return cleaned; - } - - /** - * Checks equality of the given object with <code>this</code> based on the - * type (Class) and the MBean Name returned by <code>getMBeanName()</code> - * methods. - * - * @param obj - * object to check equality with - * @return true if the given object is if the same type and its MBean Name is - * same as <code>this</code> object's MBean Name, false otherwise - */ - @Override - public boolean equals(Object obj) { - if ( !(obj instanceof SystemMemberCacheJmxImpl) ) { - return false; - } - - SystemMemberCacheJmxImpl other = (SystemMemberCacheJmxImpl) obj; - - return this.getMBeanName().equals(other.getMBeanName()); - } - - /** - * Returns hash code for <code>this</code> object which is based on the MBean - * Name generated. - * - * @return hash code for <code>this</code> object - */ - @Override - public int hashCode() { - return this.getMBeanName().hashCode(); - } -} - http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmx.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmx.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmx.java deleted file mode 100644 index dd52a4e..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmx.java +++ /dev/null @@ -1,494 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import org.apache.geode.SystemFailure; -import org.apache.geode.admin.*; -import org.apache.geode.cache.Operation; -import org.apache.geode.distributed.internal.DistributionConfig; -import org.apache.geode.internal.admin.ClientMembershipMessage; -import org.apache.geode.internal.i18n.LocalizedStrings; -import org.apache.geode.internal.logging.LogService; -import org.apache.geode.internal.logging.log4j.LocalizedMessage; -import org.apache.commons.modeler.ManagedBean; -import org.apache.logging.log4j.Logger; - -import javax.management.*; -import javax.naming.OperationNotSupportedException; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Defines methods that all <code>SystemMember</code> MBeans should - * implement. - * - * @since GemFire 4.0 - */ -public interface SystemMemberJmx - extends SystemMember, NotificationListener { - /** - * Notification type for indicating a cache got created on a member of this - * distributed system. - */ - public static final String NOTIF_CACHE_CREATED = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.created"; - /** - * Notification type for indicating a cache is closed on a member of this - * distributed system. - */ - public static final String NOTIF_CACHE_CLOSED = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.closed"; - /** - * Notification type for indicating a region is created in a cache on a member - * of this distributed system. - */ - public static final String NOTIF_REGION_CREATED = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.region.created"; - /** - * Notification type for indicating a region was removed from a cache on a - * member of this distributed system. - */ - public static final String NOTIF_REGION_LOST = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.region.lost"; - - /** Notification type for indicating client joined */ - public static final String NOTIF_CLIENT_JOINED = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.client.joined"; - - /** Notification type for indicating client left */ - public static final String NOTIF_CLIENT_LEFT = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.client.left"; - - /** Notification type for indicating client crashed */ - public static final String NOTIF_CLIENT_CRASHED = - DistributionConfig.GEMFIRE_PREFIX + "distributedsystem.cache.client.crashed"; - - /** - * Gets the interval in seconds between config refreshes - * - * @return the current refresh interval in seconds - */ - public int getRefreshInterval(); - - /** - * RefreshInterval is now set only through the AdminDistributedSystem property - * refreshInterval. Attempt to set refreshInterval on SystemMemberJmx MBean - * would result in an OperationNotSupportedException Auto-refresh is enabled - * on demand when a call to refreshConfig is made - * - * @param refreshInterval - * the new refresh interval in seconds - * @deprecated since 6.0 use DistributedSystemConfig.refreshInterval instead - */ - @Deprecated - public void setRefreshInterval(int refreshInterval) throws OperationNotSupportedException; - - /** - * Sets the refresh interval field. - * Sets interval in seconds between config refreshes; zero or less turns - * off auto refreshing. Manual refreshing has no effect on when the next - * scheduled refresh will occur. - */ - public void _setRefreshInterval(int refreshInterval); - - /** - * Gets this member's cache. - * - * @return <code>ObjectName</code> for this member's cache - * - * @throws AdminException - * If this system member does not host a cache - */ - public ObjectName manageCache() - throws AdminException, MalformedObjectNameException; - - /** - * Gets all active StatisticResources for this manager. - * - * @return array of ObjectName instances - */ - public ObjectName[] manageStats() - throws AdminException, MalformedObjectNameException; - - /** - * Gets the active StatisticResources for this manager, based on the - * typeName as the key - * - * @return ObjectName of StatisticResourceJMX instance - */ - public ObjectName[] manageStat(String statisticsTypeName) - throws AdminException, MalformedObjectNameException; - - /** - * Handles notification to refresh. Reacts by refreshing the values of this - * GemFireManager's ConfigurationParamaters. Any other notification is - * ignored. - * - * @param notification the JMX notification being received - * @param hb handback object is unused - */ - public void handleNotification(Notification notification, Object hb); - - /** - * Add MBean attribute definitions for each ConfigurationParameter. - * - * @param managed the mbean definition to add attributes to - * @return a new instance of ManagedBean copied from <code>managed</code> but - * with the new attributes added - */ - public ManagedBean addDynamicAttributes(ManagedBean managed) - throws AdminException; - - - /** - * Implementation should handle creation of cache by extracting the details - * from the given event object. - * - * @param event - * event object corresponding to the creation of the cache - */ - public void handleCacheCreate(SystemMemberCacheEvent event); - - /** - * Implementation should handle closure of cache by extracting the details - * from the given event object. - * - * @param event - * event object corresponding to the closure of the cache - */ - public void handleCacheClose(SystemMemberCacheEvent event); - - /** - * Implementation should handle creation of region by extracting the details - * from the given event object. - * - * @param event - * event object corresponding to the creation of a region - */ - public void handleRegionCreate(SystemMemberRegionEvent event); - - /** - * Implementation should handle loss of region by extracting the details - * from the given event object. - * - * @param event - * event object corresponding to the loss of a region - */ - public void handleRegionLoss(SystemMemberRegionEvent event); - - /** - * Implementation should handle client membership changes. - * - * @param clientId - * id of the client for whom membership change happened - * @param eventType - * membership change type; one of - * {@link ClientMembershipMessage#JOINED}, - * {@link ClientMembershipMessage#LEFT}, - * {@link ClientMembershipMessage#CRASHED} - */ - public void handleClientMembership(String clientId, int eventType); - - ////////////////////// Inner Classess ////////////////////// - - /** - * A helper class that provides implementation of the - * <code>SystemMemberJmx</code> interface as static methods. - */ - public static class Helper { - private static final Logger logger = LogService.getLogger(); - - private static AtomicInteger notificationSequenceNumber = new AtomicInteger(); - - public static int setAndReturnRefreshInterval(SystemMemberJmx member, - int refreshInterval) { - int ret = refreshInterval; - - try { - MBeanUtil.registerRefreshNotification( - member, // NotificationListener - ((ManagedResource)member).getMBeanName(), // User Data - RefreshNotificationType.SYSTEM_MEMBER_CONFIG, - refreshInterval); // int - - } catch (RuntimeException e) { - logger.warn(e.getMessage(), e); // dead in water, print, and then ignore - ret = 0; // zero out to avoid more exceptions - - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); // dead in water, print, and then ignore - ret = 0; // zero out to avoid more exceptions - } - - return ret; - } - - public static ObjectName manageCache(SystemMemberJmx member) - throws AdminException, MalformedObjectNameException { - boolean IthrewIt = false; - try { - SystemMemberCache cache = member.getCache(); - if (cache == null) { - IthrewIt = true; - throw new AdminException(LocalizedStrings.SystemMemberJmx_THIS_SYSTEM_MEMBER_DOES_NOT_HAVE_A_CACHE.toLocalizedString()); - } -// Assert.assertTrue(cache != null); (cannot be null) - SystemMemberCacheJmxImpl cacheJmx = (SystemMemberCacheJmxImpl) cache; - return ObjectName.getInstance(cacheJmx.getMBeanName()); - } catch (AdminException e) { - if (!IthrewIt) { - logger.warn(e.getMessage(), e); - } - throw e; - } catch (RuntimeException e) { - logger.warn(e.getMessage(), e); - throw e; - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); - throw e; - } - } - - public static ObjectName[] manageStats(SystemMemberJmx member) - throws AdminException, MalformedObjectNameException { - try { - StatisticResource[] stats = member.getStats(); - ObjectName[] onames = new ObjectName[stats.length]; - for (int i = 0; i < stats.length; i++) { - StatisticResourceJmxImpl stat = - (StatisticResourceJmxImpl) stats[i]; - onames[i] = ObjectName.getInstance(stat.getMBeanName()); - } - return onames; - } catch (AdminException e) { - logger.warn(e.getMessage(), e); - throw e; - } catch (RuntimeException e) { - logger.warn(e.getMessage(), e); - throw e; - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); - throw e; - } - } - - public static ObjectName[] manageStat(SystemMemberJmx member, String statisticsTypeName) - throws AdminException, MalformedObjectNameException { - try { - StatisticResource[] stats = member.getStat(statisticsTypeName); - if (stats==null) - return null; - else { - ObjectName[] statNames = new ObjectName[stats.length]; - for (int i=0; i<stats.length; i++) { - StatisticResourceJmxImpl statJMX = (StatisticResourceJmxImpl) stats[i]; - statNames[i] = ObjectName.getInstance(statJMX.getMBeanName()); - } - return statNames; - } - } catch (AdminException e) { - logger.warn(e.getMessage(), e); - throw e; - } catch (RuntimeException e) { - logger.warn(e.getMessage(), e); - throw e; - } catch (Error e) { - logger.error(e.getMessage(), e); - throw e; - } - } - - public static void handleNotification(SystemMemberJmx member, - Notification notification, - Object hb) { - if (RefreshNotificationType.SYSTEM_MEMBER_CONFIG. - getType().equals(notification.getType()) && - ((ManagedResource)member).getMBeanName(). - equals(notification.getUserData()) - ) { - - try { - member.refreshConfig(); - - } catch (org.apache.geode.admin.AdminException e) { - logger.warn(e.getMessage(), e); - } catch (OperationCancelledException e) { - // underlying resource is no longer reachable by remote admin - logger.warn(e.getMessage(), e); - member._setRefreshInterval(0); - - } catch (java.lang.RuntimeException e) { - logger.warn(e.getMessage(), e); // dead in water, print, and then ignore - member._setRefreshInterval(0); // zero out to avoid more exceptions - - } catch (VirtualMachineError err) { - SystemFailure.initiateFailure(err); - // If this ever returns, rethrow the error. We're poisoned - // now, so don't let this thread continue. - throw err; - } catch (java.lang.Error e) { - // Whenever you catch Error or Throwable, you must also - // catch VirtualMachineError (see above). However, there is - // _still_ a possibility that you are dealing with a cascading - // error condition, so you also need to check to see if the JVM - // is still usable: - SystemFailure.checkFailure(); - logger.error(e.getMessage(), e); // dead in water, print, and then ignore - member._setRefreshInterval(0); // zero out to avoid more exceptions - } - } - } - - public static ManagedBean - addDynamicAttributes(SystemMemberJmx member, ManagedBean managed) - throws AdminException { - - if (managed == null) { - throw new IllegalArgumentException(LocalizedStrings.SystemMemberJmx_MANAGEDBEAN_IS_NULL.toLocalizedString()); - } - - member.refreshConfig(); // to get the config parms... - - // need to create a new instance of ManagedBean to clean the "slate"... - ManagedBean newManagedBean = new DynamicManagedBean(managed); - ConfigurationParameter[] params = member.getConfiguration(); - for (int i = 0; i < params.length; i++) { - ConfigurationParameterJmxImpl parm = - (ConfigurationParameterJmxImpl) params[i]; - ConfigAttributeInfo attrInfo = new ConfigAttributeInfo(parm); - - attrInfo.setName(parm.getName()); - attrInfo.setDisplayName(parm.getName()); - attrInfo.setDescription(parm.getDescription()); - attrInfo.setType(parm.getJmxValueType().getName()); - - attrInfo.setIs(false); - attrInfo.setReadable(true); - attrInfo.setWriteable(parm.isModifiable()); - - newManagedBean.addAttribute(attrInfo); - } - return newManagedBean; - } - - /** - * Returns the next notification sequence number. - * - * @return the notificationSequenceNumber - */ - /*default*/static int getNextNotificationSequenceNumber() { - return notificationSequenceNumber.incrementAndGet(); - } - - /** - * Returns the cache event details extracted from the given - * SystemMemberCacheEvent - * - * @param event - * SystemMemberCacheEvent instance - * @return the cache event details extracted from the given - * SystemMemberCacheEvent - */ - /*default*/static String getCacheEventDetails(SystemMemberCacheEvent event) { - String memberId = event.getMemberId(); - Operation operation = event.getOperation(); - - return "CacheEvent[MemberId: "+memberId+", operation: "+operation+"]"; - } - - /** - * Returns the region event details extracted from the given - * SystemMemberRegionEvent - * - * @param event - * SystemMemberRegionEvent instance - * @return the cache event details extracted from the given - * SystemMemberRegionEvent - */ - /*default*/static String getRegionEventDetails(SystemMemberRegionEvent event) { - String memberId = event.getMemberId(); - Operation operation = event.getOperation(); - - return "RegionEvent[MemberId: " + memberId + ", operation: " + operation - + ", region:" + event.getRegionPath() + "]"; - } - - /** - * Sends the given notification. - * - * @param notif - * notification to send - * - * @throws NullPointerException - * if resource or ModelMBean for resource is null - */ - /*default*/static void sendNotification(ManagedResource resource, Notification notif) { - try { - if (MBeanUtil.isRegistered(resource.getObjectName())) { - resource.getModelMBean().sendNotification(notif); - if (logger.isDebugEnabled()) { - logger.debug("Sent '{}' notification", notif.getType()); - } - } - } catch (RuntimeOperationsException e) { - logger.info(LocalizedMessage.create( - LocalizedStrings.SystemMemberJmx_FAILED_TO_SEND_0_NOTIFICATION_FOR_1, - new Object[] { "'" + notif.getType() + "'", - "'" + notif.getMessage() + "'" }), - e); - } catch (MBeanException e) { - logger.info(LocalizedMessage.create( - LocalizedStrings.SystemMemberJmx_FAILED_TO_SEND_0_NOTIFICATION_FOR_1, - new Object[] { "'" + notif.getType() + "'", - "'" + notif.getMessage() + "'" }), - e); - } - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c0221bed/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmxImpl.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmxImpl.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmxImpl.java deleted file mode 100755 index 2f5fca9..0000000 --- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/SystemMemberJmxImpl.java +++ /dev/null @@ -1,592 +0,0 @@ -/* - * 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.admin.jmx.internal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.management.MalformedObjectNameException; -import javax.management.Notification; -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBean; -import javax.naming.OperationNotSupportedException; - -import org.apache.commons.modeler.ManagedBean; -import org.apache.logging.log4j.Logger; - -import org.apache.geode.admin.AdminException; -import org.apache.geode.admin.ConfigurationParameter; -import org.apache.geode.admin.StatisticResource; -import org.apache.geode.admin.SystemMemberCache; -import org.apache.geode.admin.SystemMemberCacheEvent; -import org.apache.geode.admin.SystemMemberRegionEvent; -import org.apache.geode.admin.internal.ConfigurationParameterImpl; -import org.apache.geode.distributed.internal.membership.InternalDistributedMember; -import org.apache.geode.i18n.LogWriterI18n; -import org.apache.geode.internal.admin.ApplicationVM; -import org.apache.geode.internal.admin.ClientMembershipMessage; -import org.apache.geode.internal.admin.GemFireVM; -import org.apache.geode.internal.admin.StatResource; -import org.apache.geode.internal.i18n.LocalizedStrings; -import org.apache.geode.internal.logging.LogService; - -/** - * Provides MBean support for managing a SystemMember application. - * <p> - * TODO: refactor to implement SystemMember and delegate to SystemMemberImpl. - * Wrap all delegate calls w/ e.printStackTrace() since the HttpAdaptor devours - * them - * - * @since GemFire 3.5 - * - */ -public class SystemMemberJmxImpl -extends org.apache.geode.admin.internal.SystemMemberImpl -implements SystemMemberJmx, javax.management.NotificationListener, - org.apache.geode.admin.jmx.internal.ManagedResource { - - private static final Logger logger = LogService.getLogger(); - - /** - * Interval in seconds between refreshes. Value less than one results in no - * refreshing - */ - private int refreshInterval = 0; - - /** The JMX object name of this managed resource */ - private ObjectName objectName; - - /** Reference to the cache MBean representing a Cache in the Cache VM Member */ - private SystemMemberCacheJmxImpl managedSystemMemberCache; - - /** collection to collect all the resources created for this member */ - private Map<StatResource, StatisticResourceJmxImpl> managedStatisticsResourcesMap = new HashMap<StatResource, StatisticResourceJmxImpl>(); - - - // ------------------------------------------------------------------------- - // Constructor(s) - // ------------------------------------------------------------------------- - - /** - * Constructs an instance of SystemMemberJmxImpl. - * - * @param system the distributed system this SystemMember is a member of - * @param application the internal admin application to delegate actual work - */ - public SystemMemberJmxImpl(AdminDistributedSystemJmxImpl system, - ApplicationVM application) - throws org.apache.geode.admin.AdminException { - super(system, application); - initializeMBean(); - } - - /** - * Constructs the instance of SystemMember using the corresponding - * InternalDistributedMember instance of a DS member for the given - * AdminDistributedSystem. - * - * @param system - * Current AdminDistributedSystem instance - * @param member - * InternalDistributedMember instance for which a SystemMember - * instance is to be constructed. - * @throws AdminException - * if construction of SystemMember fails - * - * @since GemFire 6.5 - */ - protected SystemMemberJmxImpl(AdminDistributedSystemJmxImpl system, - InternalDistributedMember member) throws AdminException { - super(system, member); - initializeMBean(); - } - - /** Create and register the MBean to manage this resource */ - private void initializeMBean() - throws org.apache.geode.admin.AdminException { - //initialize Managed Resources for stats & cache first. -// initializeManagedResources(); - - this.mbeanName = new StringBuffer("GemFire.Member:id=") - .append(MBeanUtil.makeCompliantMBeanNameProperty(getId())) - .append(",type=").append(MBeanUtil.makeCompliantMBeanNameProperty(getType().getName())).toString(); - - this.objectName = - MBeanUtil.createMBean(this, - addDynamicAttributes(MBeanUtil.lookupManagedBean(this))); - - // Refresh Interval - AdminDistributedSystemJmxImpl sysJmx = (AdminDistributedSystemJmxImpl)system; - if (sysJmx.getRefreshInterval() > 0) - this.refreshInterval = sysJmx.getRefreshInterval(); - } - - // ------------------------------------------------------------------------- - // MBean attributes - accessors/mutators - // ------------------------------------------------------------------------- - - /** - * Gets the interval in seconds between config refreshes - * - * @return the current refresh interval in seconds - */ - public int getRefreshInterval() { - return this.refreshInterval; - } - - /** - * RefreshInterval is now set only through the AdminDistributedSystem property - * refreshInterval. Attempt to set refreshInterval on SystemMemberJmx MBean - * would result in an OperationNotSupportedException Auto-refresh is enabled - * on demand when a call to refreshConfig is made - * - * @param refreshInterval - * the new refresh interval in seconds - * @deprecated since 6.0 use DistributedSystemConfig.refreshInterval instead - */ - @Deprecated - public void setRefreshInterval(int refreshInterval) - throws OperationNotSupportedException { - throw new OperationNotSupportedException( - LocalizedStrings.MANAGED_RESOURCE_REFRESH_INTERVAL_CANT_BE_SET_DIRECTLY.toLocalizedString()); - } - - /** - * Sets interval in seconds between member config refreshes; zero or less - * turns off auto refreshing. Manual refreshing has no effect on when the next - * scheduled refresh will occur. - * - * @param refreshInterval - * the new refresh interval in seconds - */ - public void _setRefreshInterval(int refreshInterval) { - boolean isRegistered = MBeanUtil.isRefreshNotificationRegistered(this, - RefreshNotificationType.SYSTEM_MEMBER_CONFIG); - - if (isRegistered && (getRefreshInterval() == refreshInterval)) - return; - - this.refreshInterval = Helper.setAndReturnRefreshInterval(this, - refreshInterval); - } - - // ------------------------------------------------------------------------- - // MBean Operations - // ------------------------------------------------------------------------- - - public void refreshConfig() throws org.apache.geode.admin.AdminException { - // 1st call to refreshConfig would trigger - // the auto-refresh if an interval is set - if (this.refreshInterval > 0) { - this._setRefreshInterval(this.refreshInterval); - } - - super.refreshConfig(); - } - - /** - * Initializes Cache & Statistics managed resources. - * - * @throws AdminException - * if initialization of managed resources fails - */ -// private void initializeManagedResources() throws AdminException { -// try { -// manageCache(); -// } catch (MalformedObjectNameException e) { -// throw new AdminException(LocalizedStrings.SystemMemberJmxImpl_EXCEPTION_OCCURRED_WHILE_INITIALIZING_0_MBEANS_FOR_1.toLocalizedString( -// new Object[] {"Cache", getId()}), -// e); -// } catch (AdminException ae) { -// if (LocalizedStrings.SystemMemberJmx_THIS_SYSTEM_MEMBER_DOES_NOT_HAVE_A_CACHE.toLocalizedString().equals(ae.getMessage())) { -// //ignore this exception for a cache-less peer -// } else { -// throw ae; -// } -// } -// try { -// manageStats(); -// } catch (MalformedObjectNameException e) { -// throw new AdminException(LocalizedStrings.SystemMemberJmxImpl_EXCEPTION_OCCURRED_WHILE_INITIALIZING_0_MBEANS_FOR_1.toLocalizedString( -// new Object[] {"Statistics", getId()}), -// e); -// } -// } - - /** - * Gets this member's cache. - * - * @return <code>ObjectName</code> for this member's cache - * - * @throws AdminException - * If this system member does not host a cache - */ - public ObjectName manageCache() - throws AdminException, MalformedObjectNameException { - - return Helper.manageCache(this); - } - - /** - * Gets all active StatisticResources for this manager. - * - * @return array of ObjectName instances - */ - public ObjectName[] manageStats() - throws AdminException, MalformedObjectNameException { - - return Helper.manageStats(this); - } - - /** - * Gets the active StatisticResources for this manager, based on the - * typeName as the key - * - * @return ObjectName of StatisticResourceJMX instance - */ - public ObjectName[] manageStat(String statisticsTypeName) - throws AdminException, MalformedObjectNameException { - - return Helper.manageStat(this, statisticsTypeName); - } - - // ------------------------------------------------------------------------- - // JMX Notification listener - // ------------------------------------------------------------------------- - - /** - * Handles notification to refresh. Reacts by refreshing the values of this - * SystemMember's ConfigurationParamaters. Any other notification is ignored. - * Given notification is handled only if there is any JMX client connected to - * the system. - * - * @param notification - * the JMX notification being received - * @param hb - * handback object is unused - */ - public void handleNotification(Notification notification, Object hb) { - AdminDistributedSystemJmxImpl systemJmx = - (AdminDistributedSystemJmxImpl) this.system; - - if (!systemJmx.isRmiClientCountZero()) { - Helper.handleNotification(this, notification, hb); - } - } - - // ------------------------------------------------------------------------- - // Template methods overriden from superclass... - // ------------------------------------------------------------------------- - - /** - * Template method for creating instance of ConfigurationParameter. - * Overridden to return ConfigurationParameterJmxImpl. - */ - @Override - protected ConfigurationParameter createConfigurationParameter(String name, - String description, - Object value, - Class type, - boolean userModifiable) { - return new ConfigurationParameterJmxImpl( - name, description, value, type, userModifiable); - } - - /** - * Override createStatisticResource by instantiating StatisticResourceJmxImpl - * if it was not created earlier otherwise returns the same instance. - * - * @param stat - * StatResource reference for which this JMX resource is to be created - * @return StatisticResourceJmxImpl - JMX Implementation of StatisticResource - * @throws AdminException - * if constructing StatisticResourceJmxImpl instance fails - */ - @Override - protected StatisticResource createStatisticResource(StatResource stat) - throws org.apache.geode.admin.AdminException { - StatisticResourceJmxImpl managedStatisticResource = null; - - synchronized (this.managedStatisticsResourcesMap) { - /* - * Ensuring that a single instance of Statistic Resource is created per - * StatResource. - */ - StatisticResourceJmxImpl statisticResourceJmxImpl = managedStatisticsResourcesMap.get(stat); - if (statisticResourceJmxImpl != null) { - managedStatisticResource = statisticResourceJmxImpl; - } else { - managedStatisticResource = new StatisticResourceJmxImpl(stat, this); - managedStatisticResource.getStatistics();//inits timer - managedStatisticsResourcesMap.put(stat, managedStatisticResource); - } - } - return managedStatisticResource; - } - - /** - * Override createSystemMemberCache by instantiating SystemMemberCacheJmxImpl - * if it was not created earlier. - * - * @param vm - * GemFireVM reference for which this JMX resource is to be created - * @return SystemMemberCacheJmxImpl - JMX Implementation of SystemMemberCache - * @throws AdminException - * if constructing SystemMemberCacheJmxImpl instance fails - */ - @Override - protected SystemMemberCache createSystemMemberCache(GemFireVM vm) - throws org.apache.geode.admin.AdminException { - if (managedSystemMemberCache == null) { - managedSystemMemberCache = new SystemMemberCacheJmxImpl(vm); - } - return managedSystemMemberCache; - } - - // ------------------------------------------------------------------------- - // Create MBean attributes for each ConfigurationParameter - // ------------------------------------------------------------------------- - - /** - * Add MBean attribute definitions for each ConfigurationParameter. - * - * @param managed the mbean definition to add attributes to - * @return a new instance of ManagedBean copied from <code>managed</code> but - * with the new attributes added - */ - public ManagedBean addDynamicAttributes(ManagedBean managed) - throws AdminException { - - return Helper.addDynamicAttributes(this, managed); - } - - // ------------------------------------------------------------------------- - // ManagedResource implementation - // ------------------------------------------------------------------------- - - /** The name of the MBean that will manage this resource */ - private String mbeanName; - - /** The ModelMBean that is configured to manage this resource */ - private ModelMBean modelMBean; - - public String getMBeanName() { - return this.mbeanName; - } - - public ModelMBean getModelMBean() { - return this.modelMBean; - } - public void setModelMBean(ModelMBean modelMBean) { - this.modelMBean = modelMBean; - } - - public ObjectName getObjectName() { - return this.objectName; - } - - public ManagedResourceType getManagedResourceType() { - return ManagedResourceType.SYSTEM_MEMBER; - } - - /** - * Un-registers all the statistics & cache managed resource created for this - * member. After un-registering the resource MBean instances, clears - * managedStatisticsResourcesMap collection. - */ - public void cleanupResource() { - synchronized (this.managedStatisticsResourcesMap) { - ConfigurationParameter[] names = getConfiguration(); - if (names != null) { - for (int i = 0; i < names.length; i++) { - ConfigurationParameter parm = names[i]; - ((ConfigurationParameterImpl) parm).removeConfigurationParameterListener(this); - } - } - this.parms.clear(); - - Collection<StatisticResourceJmxImpl> statisticResources = managedStatisticsResourcesMap.values(); - - for (StatisticResourceJmxImpl statisticResource : statisticResources) { - MBeanUtil.unregisterMBean(statisticResource); - } - - this.managedStatisticsResourcesMap.clear(); - } - MBeanUtil.unregisterMBean(managedSystemMemberCache); - } - - - /** - * Cleans up Managed Resources created for the client that was connected to - * the server represented by this class. - * - * @param clientId - * id of the client to be removed - * @return List of ManagedResources associated with the client of given client - * id - */ - /* - * This clean up is for the clients. The clients are started with a loner DM. - * Hence the clientId is not supposed to contain '/' as per - * InternalDistributedMember.toString(). - */ - public List<ManagedResource> cleanupBridgeClientResources(String clientId) { - List<ManagedResource> returnedResources = new ArrayList<ManagedResource>(); - - String compatibleId = "id_"+MBeanUtil.makeCompliantMBeanNameProperty(clientId); - synchronized (this.managedStatisticsResourcesMap) { - Set<Entry<StatResource, StatisticResourceJmxImpl>> entrySet = this.managedStatisticsResourcesMap.entrySet(); - - for (Iterator<Entry<StatResource, StatisticResourceJmxImpl>> it = entrySet.iterator(); it.hasNext();) { - Entry<StatResource, StatisticResourceJmxImpl> entry = it.next(); - StatisticResourceJmxImpl resource = entry.getValue(); - if (resource.getMBeanName().contains(compatibleId)) { - it.remove(); //remove matching entry - returnedResources.add(resource); - } - } - } - return returnedResources; - } - - /** - * Implementation handles client membership changes. - * - * @param clientId - * id of the client for whom membership change happened - * @param eventType - * membership change type; one of - * {@link ClientMembershipMessage#JOINED}, - * {@link ClientMembershipMessage#LEFT}, - * {@link ClientMembershipMessage#CRASHED} - */ - public void handleClientMembership(String clientId, int eventType) { - String notifType = null; - List<ManagedResource> cleanedUp = null; - - if (eventType == ClientMembershipMessage.LEFT) { - notifType = NOTIF_CLIENT_LEFT; - cleanedUp = cleanupBridgeClientResources(clientId); - } else if (eventType == ClientMembershipMessage.CRASHED) { - notifType = NOTIF_CLIENT_CRASHED; - cleanedUp = cleanupBridgeClientResources(clientId); - } else if (eventType == ClientMembershipMessage.JOINED) { - notifType = NOTIF_CLIENT_JOINED; - } - - if (cleanedUp != null) { - for (ManagedResource resource : cleanedUp) { - MBeanUtil.unregisterMBean(resource); - } - } - - Helper.sendNotification(this, - new Notification(notifType, this.modelMBean, - Helper.getNextNotificationSequenceNumber(), - clientId)); - } - - /** - * Implementation handles creation of cache by extracting the details from the - * given event object and sending the - * {@link SystemMemberJmx#NOTIF_CACHE_CREATED} notification to the connected - * JMX Clients. - * - * @param event - * event object corresponding to the creation of the cache - */ - public void handleCacheCreate(SystemMemberCacheEvent event) { - Helper.sendNotification(this, - new Notification(NOTIF_CACHE_CREATED, this.modelMBean, - Helper.getNextNotificationSequenceNumber(), - Helper.getCacheEventDetails(event))); - } - - /** - * Implementation handles closure of cache by extracting the details from the - * given event object and sending the - * {@link SystemMemberJmx#NOTIF_CACHE_CLOSED} notification to the connected - * JMX Clients. - * - * @param event - * event object corresponding to the closure of the cache - */ - public void handleCacheClose(SystemMemberCacheEvent event) { - Helper.sendNotification(this, - new Notification(NOTIF_CACHE_CLOSED, this.modelMBean, - Helper.getNextNotificationSequenceNumber(), - Helper.getCacheEventDetails(event))); - } - - /** - * Implementation handles creation of region by extracting the details from - * the given event object and sending the - * {@link SystemMemberJmx#NOTIF_REGION_CREATED} notification to the connected - * JMX Clients. Region Path is set as User Data in Notification. - * - * @param event - * event object corresponding to the creation of a region - */ - public void handleRegionCreate(SystemMemberRegionEvent event) { - Notification notification = new Notification(NOTIF_REGION_CREATED, this.modelMBean, - Helper.getNextNotificationSequenceNumber(), - Helper.getRegionEventDetails(event)); - - notification.setUserData(event.getRegionPath()); - - Helper.sendNotification(this, notification); - } - - /** - * Implementation should handle loss of region by extracting the details from - * the given event object and sending the - * {@link SystemMemberJmx#NOTIF_REGION_LOST} notification to the connected - * JMX Clients. Region Path is set as User Data in Notification. Additionally, - * it also clears the ManagedResources created for the region that is lost. - * - * @param event - * event object corresponding to the loss of a region - */ - public void handleRegionLoss(SystemMemberRegionEvent event) { - SystemMemberCacheJmxImpl cacheResource = this.managedSystemMemberCache; - - if (cacheResource != null) { - ManagedResource cleanedUp = - cacheResource.cleanupRegionResources(event.getRegionPath()); - - if (cleanedUp != null) { - MBeanUtil.unregisterMBean(cleanedUp); - } - } - - Notification notification = new Notification(NOTIF_REGION_LOST, this.modelMBean, - Helper.getNextNotificationSequenceNumber(), - Helper.getRegionEventDetails(event)); - - notification.setUserData(event.getRegionPath()); - - Helper.sendNotification(this, notification); - } -} -