|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
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(); |
|
} |
|
} |