186 lines · 6.3 KB · Java
RawDownload
/* * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.tools.jconsole.inspector; import java.io.IOException;import javax.management.*;import javax.swing.Icon;import sun.tools.jconsole.JConsole;import sun.tools.jconsole.MBeansTab;import sun.tools.jconsole.ProxyClient.SnapshotMBeanServerConnection; public class XMBean {     private final MBeansTab mbeansTab;    private final ObjectName objectName;    private Icon icon;    private String text;    private Boolean broadcaster;    private final Object broadcasterLock = new Object();    private MBeanInfo mbeanInfo;    private final Object mbeanInfoLock = new Object();     public XMBean(ObjectName objectName, MBeansTab mbeansTab) {        this.mbeansTab = mbeansTab;        this.objectName = objectName;        text = objectName.getKeyProperty("name");        if (text == null) {            text = objectName.getDomain();        }        if (MBeanServerDelegate.DELEGATE_NAME.equals(objectName)) {            icon = IconManager.MBEANSERVERDELEGATE;        } else {            icon = IconManager.MBEAN;        }    }     MBeanServerConnection getMBeanServerConnection() {        return mbeansTab.getMBeanServerConnection();    }     SnapshotMBeanServerConnection getSnapshotMBeanServerConnection() {        return mbeansTab.getSnapshotMBeanServerConnection();    }     public Boolean isBroadcaster() {        synchronized (broadcasterLock) {            if (broadcaster == null) {                try {                    broadcaster = getMBeanServerConnection().isInstanceOf(                            getObjectName(),                            "javax.management.NotificationBroadcaster");                } catch (Exception e) {                    if (JConsole.isDebug()) {                        System.err.println("Couldn't check if MBean [" +                                objectName + "] is a notification broadcaster");                        e.printStackTrace();                    }                    return false;                }            }            return broadcaster;        }    }     public Object invoke(String operationName) throws Exception {        Object result = getMBeanServerConnection().invoke(                getObjectName(), operationName, new Object[0], new String[0]);        return result;    }     public Object invoke(String operationName, Object params[], String sig[])            throws Exception {        Object result = getMBeanServerConnection().invoke(                getObjectName(), operationName, params, sig);        return result;    }     public void setAttribute(Attribute attribute)            throws AttributeNotFoundException, InstanceNotFoundException,            InvalidAttributeValueException, MBeanException,            ReflectionException, IOException {        getMBeanServerConnection().setAttribute(getObjectName(), attribute);    }     public Object getAttribute(String attributeName)            throws AttributeNotFoundException, InstanceNotFoundException,            MBeanException, ReflectionException, IOException {        return getSnapshotMBeanServerConnection().getAttribute(                getObjectName(), attributeName);    }     public AttributeList getAttributes(String attributeNames[])            throws AttributeNotFoundException, InstanceNotFoundException,            MBeanException, ReflectionException, IOException {        return getSnapshotMBeanServerConnection().getAttributes(                getObjectName(), attributeNames);    }     public AttributeList getAttributes(MBeanAttributeInfo attributeNames[])            throws AttributeNotFoundException, InstanceNotFoundException,            MBeanException, ReflectionException, IOException {        String attributeString[] = new String[attributeNames.length];        for (int i = 0; i < attributeNames.length; i++) {            attributeString[i] = attributeNames[i].getName();        }        return getAttributes(attributeString);    }     public ObjectName getObjectName() {        return objectName;    }     public MBeanInfo getMBeanInfo() throws InstanceNotFoundException,            IntrospectionException, ReflectionException, IOException {        synchronized (mbeanInfoLock) {            if (mbeanInfo == null) {                mbeanInfo = getMBeanServerConnection().getMBeanInfo(objectName);            }            return mbeanInfo;        }    }     @Override    public boolean equals(Object obj) {        if (obj == null) {            return false;        }        if (obj == this) {            return true;        }        if (!(obj instanceof XMBean)) {            return false;        }        XMBean that = (XMBean) obj;        return getObjectName().equals(that.getObjectName());    }     @Override    public int hashCode() {        return (objectName == null ? 0 : objectName.hashCode());    }     public String getText() {        return text;    }     public void setText(String text) {        this.text = text;    }     public Icon getIcon() {        return icon;    }     public void setIcon(Icon icon) {        this.icon = icon;    }     @Override    public String toString() {        return getText();    }}