/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * @author mobrien * @since EclipseLink 2.2 enh# 316511 * 06/30/2010-2.1.1 Michael O'Brien * - 316513: Enable JMX MBean functionality for JBoss, Glassfish and WebSphere in addition to WebLogic * Move JMX MBean generic registration code up from specific platforms * see <link>http://wiki.eclipse.org/EclipseLink/DesignDocs/316513</link> ******************************************************************************/ package org.eclipse.persistence.services; import javax.management.openmbean.CompositeType; import javax.management.openmbean.SimpleType; import javax.management.openmbean.OpenType; import javax.management.openmbean.CompositeData; import javax.management.openmbean.CompositeDataSupport; import javax.management.openmbean.OpenDataException; import org.eclipse.persistence.services.websphere.ClassSummaryDetail; /** * The class is used internally by the Portable JMX Framework to convert * model specific classes into Open Types so that the attributes of model class can * be exposed by MBeans. * * @since EclipseLink 2.1.1 */ public abstract class ClassSummaryDetailBase { /** Must override in subclass */ protected static String COMPOSITE_TYPE_TYPENAME = "org.eclipse.persistence.services"; /** Must override in subclass */ protected static String COMPOSITE_TYPE_DESCRIPTION = "org.eclipse.persistence.services.ClassSummaryDetailBase"; /** * Construct a ClassSummaryDetail instance. The PropertyNames annotation is used * to be able to construct a ClassSummaryDetail instance out of a CompositeData * instance. See MXBeans documentation for more details. */ public ClassSummaryDetailBase(String className, String cacheType, String configuredSize,String currentSize , String parentClassName) { this.className = className; this.cacheType = cacheType; this.configuredSize = configuredSize; this.currentSize = currentSize; this.parentClassName = parentClassName; } private String className; private String cacheType; private String configuredSize; private String currentSize; private String parentClassName; // The corresponding CompositeType for this class protected static CompositeType cType_= null; protected static final String[] itemNames_= {"Class Name", "Cache Type", "Configured Size", "Current Size","Parent Class Name"}; static { try { OpenType[] itemTypes = { SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING}; cType_ = new CompositeType(COMPOSITE_TYPE_TYPENAME, // this should be a localized description // but isn't really required since the attribute // or parameter description should suffice // however this value cannot be null or empty COMPOSITE_TYPE_DESCRIPTION, itemNames_, // this should be a localized description // but isn't really required since the attribute // or parameter description should suffice // however this value cannot be null or empty itemNames_, itemTypes); } catch(OpenDataException ode) { // this won't happen, but in case it does we should log throw new RuntimeException(ode); } } /** * Returns the CompositeType that describes this model * specific class */ public static CompositeType toCompositeType() { return cType_; } /** * Create an instance of the model specific class out of * an associated CompositeData instance */ public static ClassSummaryDetail from(CompositeData cd) { if (cd==null) { return null; } return new ClassSummaryDetail( (String)cd.get("Class Name"), (String)cd.get("Cache Type"), (String)cd.get("Current Size"), (String)cd.get("Parent Class Name"), (String)cd.get("Configured Size") ); } /** * Convert an instance of this model specific type to * a CompositeData. This ensure that clients that do not * have access to the model specific class can still * use the MBean. The MXBean framework can perform this * conversion automatically. * * @param ct - This parameter is for JDK 1.6 compatibility reasons */ public CompositeData toCompositeData(CompositeType ct) { Object[] itemValues = { this.className, this.cacheType, this.configuredSize, this.currentSize, this.parentClassName}; CompositeData cData= null; try { cData= new CompositeDataSupport(cType_, itemNames_, itemValues); } catch( OpenDataException ode) { // this won't happen, but in case it does we should log throw new RuntimeException(ode); } return cData; } public String getClassName() { return className; } public String getCacheType() { return cacheType; } public String getConfiguredSize() { return configuredSize; } public String getCurrentSize() { return currentSize; } public String getParentClassName() { return parentClassName; } public void setClassName(String className) { this.className = className; } public void setCacheType(String cacheType) { this.cacheType = cacheType; } public void setConfiguredSize(String configuredSize) { this.configuredSize = configuredSize; } public void setCurrentSize(String currentSize) { this.currentSize = currentSize; } public void setParentClassName(String parentClassName) { this.parentClassName = parentClassName; } }