Search in sources :

Example 1 with ModelMBeanInfoSupport

use of javax.management.modelmbean.ModelMBeanInfoSupport in project camel by apache.

the class MBeanInfoAssembler method getMBeanInfo.

/**
     * Gets the {@link ModelMBeanInfo} for the given managed bean
     *
     * @param defaultManagedBean  the default managed bean
     * @param customManagedBean   an optional custom managed bean
     * @param objectName   the object name
     * @return the model info, or <tt>null</tt> if not possible to create, for example due the managed bean is a proxy class
     * @throws JMException is thrown if error creating the model info
     */
public ModelMBeanInfo getMBeanInfo(Object defaultManagedBean, Object customManagedBean, String objectName) throws JMException {
    // skip proxy classes
    if (defaultManagedBean != null && Proxy.isProxyClass(defaultManagedBean.getClass())) {
        LOG.trace("Skip creating ModelMBeanInfo due proxy class {}", defaultManagedBean.getClass());
        return null;
    }
    // maps and lists to contain information about attributes and operations
    Map<String, ManagedAttributeInfo> attributes = new LinkedHashMap<String, ManagedAttributeInfo>();
    Set<ManagedOperationInfo> operations = new LinkedHashSet<ManagedOperationInfo>();
    Set<ModelMBeanAttributeInfo> mBeanAttributes = new LinkedHashSet<ModelMBeanAttributeInfo>();
    Set<ModelMBeanOperationInfo> mBeanOperations = new LinkedHashSet<ModelMBeanOperationInfo>();
    Set<ModelMBeanNotificationInfo> mBeanNotifications = new LinkedHashSet<ModelMBeanNotificationInfo>();
    // extract details from default managed bean
    if (defaultManagedBean != null) {
        extractAttributesAndOperations(defaultManagedBean.getClass(), attributes, operations);
        extractMbeanAttributes(defaultManagedBean, attributes, mBeanAttributes, mBeanOperations);
        extractMbeanOperations(defaultManagedBean, operations, mBeanOperations);
        extractMbeanNotifications(defaultManagedBean, mBeanNotifications);
    }
    // extract details from custom managed bean
    if (customManagedBean != null) {
        extractAttributesAndOperations(customManagedBean.getClass(), attributes, operations);
        extractMbeanAttributes(customManagedBean, attributes, mBeanAttributes, mBeanOperations);
        extractMbeanOperations(customManagedBean, operations, mBeanOperations);
        extractMbeanNotifications(customManagedBean, mBeanNotifications);
    }
    // create the ModelMBeanInfo
    String name = getName(customManagedBean != null ? customManagedBean : defaultManagedBean, objectName);
    String description = getDescription(customManagedBean != null ? customManagedBean : defaultManagedBean, objectName);
    ModelMBeanAttributeInfo[] arrayAttributes = mBeanAttributes.toArray(new ModelMBeanAttributeInfo[mBeanAttributes.size()]);
    ModelMBeanOperationInfo[] arrayOperations = mBeanOperations.toArray(new ModelMBeanOperationInfo[mBeanOperations.size()]);
    ModelMBeanNotificationInfo[] arrayNotifications = mBeanNotifications.toArray(new ModelMBeanNotificationInfo[mBeanNotifications.size()]);
    ModelMBeanInfo info = new ModelMBeanInfoSupport(name, description, arrayAttributes, null, arrayOperations, arrayNotifications);
    LOG.trace("Created ModelMBeanInfo {}", info);
    return info;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ModelMBeanOperationInfo(javax.management.modelmbean.ModelMBeanOperationInfo) ModelMBeanNotificationInfo(javax.management.modelmbean.ModelMBeanNotificationInfo) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) LinkedHashMap(java.util.LinkedHashMap) ModelMBeanAttributeInfo(javax.management.modelmbean.ModelMBeanAttributeInfo) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport)

Example 2 with ModelMBeanInfoSupport

use of javax.management.modelmbean.ModelMBeanInfoSupport in project spring-framework by spring-projects.

the class AbstractMBeanInfoAssembler method getMBeanInfo.

/**
	 * Create an instance of the {@code ModelMBeanInfoSupport} class supplied with all
	 * JMX implementations and populates the metadata through calls to the subclass.
	 * @param managedBean the bean that will be exposed (might be an AOP proxy)
	 * @param beanKey the key associated with the managed bean
	 * @return the populated ModelMBeanInfo instance
	 * @throws JMException in case of errors
	 * @see #getDescription(Object, String)
	 * @see #getAttributeInfo(Object, String)
	 * @see #getConstructorInfo(Object, String)
	 * @see #getOperationInfo(Object, String)
	 * @see #getNotificationInfo(Object, String)
	 * @see #populateMBeanDescriptor(javax.management.Descriptor, Object, String)
	 */
@Override
public ModelMBeanInfo getMBeanInfo(Object managedBean, String beanKey) throws JMException {
    checkManagedBean(managedBean);
    ModelMBeanInfo info = new ModelMBeanInfoSupport(getClassName(managedBean, beanKey), getDescription(managedBean, beanKey), getAttributeInfo(managedBean, beanKey), getConstructorInfo(managedBean, beanKey), getOperationInfo(managedBean, beanKey), getNotificationInfo(managedBean, beanKey));
    Descriptor desc = info.getMBeanDescriptor();
    populateMBeanDescriptor(desc, managedBean, beanKey);
    info.setMBeanDescriptor(desc);
    return info;
}
Also used : Descriptor(javax.management.Descriptor) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)

Example 3 with ModelMBeanInfoSupport

use of javax.management.modelmbean.ModelMBeanInfoSupport in project spring-framework by spring-projects.

the class MBeanExporterOperationsTests method testRegisterExistingMBeanWithUserSuppliedObjectName.

@Test
public void testRegisterExistingMBeanWithUserSuppliedObjectName() throws Exception {
    ObjectName objectName = ObjectNameManager.getInstance("spring:name=Foo");
    ModelMBeanInfo info = new ModelMBeanInfoSupport("myClass", "myDescription", null, null, null, null);
    RequiredModelMBean bean = new RequiredModelMBean(info);
    MBeanExporter exporter = new MBeanExporter();
    exporter.setServer(getServer());
    exporter.registerManagedResource(bean, objectName);
    MBeanInfo infoFromServer = getServer().getMBeanInfo(objectName);
    assertEquals(info, infoFromServer);
}
Also used : ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) MBeanInfo(javax.management.MBeanInfo) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) ObjectName(javax.management.ObjectName) RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) Test(org.junit.Test)

Example 4 with ModelMBeanInfoSupport

use of javax.management.modelmbean.ModelMBeanInfoSupport in project jdk8u_jdk by JetBrains.

the class DescriptorSupportTest method main.

public static void main(String[] args) throws Exception {
    boolean ok = true;
    System.out.println("Checking that name and descriptorType are " + "mandatory");
    // Try omitting name and/or descriptorType
    for (int i = 0; i < 3; i++) {
        final boolean addName = ((i & 1) != 0);
        final boolean addDescriptorType = ((i & 2) != 0);
        final List fields = new ArrayList();
        if (addName)
            fields.add("name=something");
        if (addDescriptorType)
            fields.add("descriptorType=something-else");
        final String[] fs = (String[]) fields.toArray(new String[0]);
        final String what = "DescriptorSupport with " + (addName ? "" : "no ") + "name and " + (addDescriptorType ? "" : "no ") + "descriptorType";
        DescriptorSupport ds = new DescriptorSupport(fs);
        if (ds.isValid()) {
            System.out.println("INCORRECTLY ACCEPTED: " + what);
            ok = false;
        } else
            System.out.println("OK: rejected " + what);
    }
    for (int pass = 0; pass < 2; pass++) {
        boolean shouldAccept = (pass == 0);
        System.out.println("Trying out " + (shouldAccept ? "correct" : "bogus") + " DescriptorSupport fields");
        Object[] fields = shouldAccept ? goodFields : badFields;
        for (int i = 0; i < fields.length; i += 2) {
            String[] names = { "name", "descriptorType" };
            String[] values = { "some-name", "some-type" };
            DescriptorSupport d = new DescriptorSupport(names, values);
            final String name = (String) fields[i];
            final Object value = fields[i + 1];
            final String valueS = (value instanceof String) ? ("\"" + value + "\"") : (value == null) ? "null" : value.toString();
            final String what = "DescriptorSupport with " + name + " = " + valueS;
            try {
                d.setField(name, value);
                if (shouldAccept)
                    System.out.println("OK: accepted " + what);
                else {
                    System.out.println("INCORRECTLY ACCEPTED: " + what);
                    ok = false;
                }
            } catch (RuntimeOperationsException e) {
                if (shouldAccept) {
                    System.out.println("INCORRECTLY REJECTED: " + what + ": " + e);
                    ok = false;
                } else {
                    System.out.println("OK: rejected " + what);
                // OK: this is what should happen
                }
            } catch (Exception e) {
                System.out.println("WRONG EXCEPTION: " + what + ": " + e);
                ok = false;
            }
        }
    }
    // 4894856: ModelMBeanInfoSupport.setDescriptor(d, "mbean") fails
    System.out.println("Checking that setDescriptor(d, \"mbean\") works");
    ModelMBeanInfo mmbi = new ModelMBeanInfoSupport("x", "descr", null, null, null, null);
    Descriptor d = mmbi.getDescriptor("x", "mbean");
    try {
        mmbi.setDescriptor(d, "mbean");
    } catch (Exception e) {
        System.out.println("Unexpected exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    // 5016685: DescriptorSupport forces field names to lower case
    System.out.println("Checking that field name case is ignored " + "but preserved");
    ok &= caseTest(new DescriptorSupport(new String[] { "NAME=blah" }), "DescriptorSupport(String[])");
    ok &= caseTest(new DescriptorSupport(new String[] { "NAME" }, new String[] { "blah" }), "DescriptorSupport(String[], Object[])");
    DescriptorSupport d1 = new DescriptorSupport();
    d1.setField("NAME", "blah");
    ok &= caseTest(d1, "DescriptorSupport.setField");
    d1 = new DescriptorSupport(new String[] { "NAME=blah" });
    ok &= caseTest(new DescriptorSupport(d1), "DescriptorSupport(Descriptor)");
    d1 = new DescriptorSupport(new String[] { "NAME=blah" });
    ok &= caseTest(new DescriptorSupport(d1.toXMLString()), "DescriptorSupport(String)");
    d1 = new DescriptorSupport(new String[] { "NAME=blah" });
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    oos.writeObject(d1);
    oos.close();
    bos.close();
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bis);
    d1 = (DescriptorSupport) ois.readObject();
    ok &= caseTest(d1, "serialized DescriptorSupport");
    if (ok)
        System.out.println("Test passed");
    else {
        System.out.println("TEST FAILED");
        System.exit(1);
    }
}
Also used : ArrayList(java.util.ArrayList) DescriptorSupport(javax.management.modelmbean.DescriptorSupport) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) RuntimeOperationsException(javax.management.RuntimeOperationsException) ByteArrayInputStream(java.io.ByteArrayInputStream) Descriptor(javax.management.Descriptor) List(java.util.List) ArrayList(java.util.ArrayList) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport) RuntimeOperationsException(javax.management.RuntimeOperationsException) ObjectInputStream(java.io.ObjectInputStream)

Example 5 with ModelMBeanInfoSupport

use of javax.management.modelmbean.ModelMBeanInfoSupport in project jdk8u_jdk by JetBrains.

the class UnserializableTargetObjectTest method main.

public static void main(String[] args) throws Exception {
    MBeanServer mbs = MBeanServerFactory.newMBeanServer();
    ObjectName name = new ObjectName("a:b=c");
    Resource resource1 = new Resource();
    Resource resource2 = new Resource();
    Resource resource3 = new Resource();
    Method operationMethod = Resource.class.getMethod("operation");
    Method getCountMethod = Resource.class.getMethod("getCount");
    Method setCountMethod = Resource.class.getMethod("setCount", int.class);
    Descriptor operationDescriptor = new DescriptorSupport(new String[] { "descriptorType", "name", "targetObject" }, new Object[] { "operation", "operation", resource1 });
    Descriptor getCountDescriptor = new DescriptorSupport(new String[] { "descriptorType", "name", "targetObject" }, new Object[] { "operation", "getCount", resource2 });
    Descriptor setCountDescriptor = new DescriptorSupport(new String[] { "descriptorType", "name", "targetObject" }, new Object[] { "operation", "setCount", resource2 });
    Descriptor countDescriptor = new DescriptorSupport(new String[] { "descriptorType", "name", "getMethod", "setMethod" }, new Object[] { "attribute", "Count", "getCount", "setCount" });
    ModelMBeanOperationInfo operationInfo = new ModelMBeanOperationInfo("operation description", operationMethod, operationDescriptor);
    ModelMBeanOperationInfo getCountInfo = new ModelMBeanOperationInfo("getCount description", getCountMethod, getCountDescriptor);
    ModelMBeanOperationInfo setCountInfo = new ModelMBeanOperationInfo("setCount description", setCountMethod, setCountDescriptor);
    ModelMBeanAttributeInfo countInfo = new ModelMBeanAttributeInfo("Count", "Count description", getCountMethod, setCountMethod, countDescriptor);
    ModelMBeanInfo mmbi = new ModelMBeanInfoSupport(Resource.class.getName(), "ModelMBean to test targetObject", new ModelMBeanAttributeInfo[] { countInfo }, // no constructors
    null, new ModelMBeanOperationInfo[] { operationInfo, getCountInfo, setCountInfo }, // no notifications
    null);
    ModelMBean mmb = new RequiredModelMBean(mmbi);
    mmb.setManagedResource(resource3, "ObjectReference");
    mbs.registerMBean(mmb, name);
    mbs.invoke(name, "operation", null, null);
    mbs.setAttribute(name, new Attribute("Count", 53));
    if (resource1.operationCount != 1)
        throw new Exception("operationCount: " + resource1.operationCount);
    if (resource2.count != 53)
        throw new Exception("count: " + resource2.count);
    int got = (Integer) mbs.getAttribute(name, "Count");
    if (got != 53)
        throw new Exception("got count: " + got);
    JMXServiceURL url = new JMXServiceURL("rmi", null, 0);
    JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
    cs.start();
    JMXServiceURL addr = cs.getAddress();
    JMXConnector cc = JMXConnectorFactory.connect(addr);
    MBeanServerConnection mbsc = cc.getMBeanServerConnection();
    ModelMBeanInfo rmmbi = (ModelMBeanInfo) mbsc.getMBeanInfo(name);
    // Above gets NotSerializableException if resource included in
    // serialized form
    cc.close();
    cs.stop();
    System.out.println("TEST PASSED");
}
Also used : JMXServiceURL(javax.management.remote.JMXServiceURL) ModelMBeanOperationInfo(javax.management.modelmbean.ModelMBeanOperationInfo) RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ModelMBean(javax.management.modelmbean.ModelMBean) Attribute(javax.management.Attribute) DescriptorSupport(javax.management.modelmbean.DescriptorSupport) Method(java.lang.reflect.Method) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) ObjectName(javax.management.ObjectName) RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) JMXConnectorServer(javax.management.remote.JMXConnectorServer) ModelMBeanAttributeInfo(javax.management.modelmbean.ModelMBeanAttributeInfo) JMXConnector(javax.management.remote.JMXConnector) Descriptor(javax.management.Descriptor) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport) MBeanServerConnection(javax.management.MBeanServerConnection) MBeanServer(javax.management.MBeanServer)

Aggregations

ModelMBeanInfoSupport (javax.management.modelmbean.ModelMBeanInfoSupport)10 ModelMBeanInfo (javax.management.modelmbean.ModelMBeanInfo)9 Descriptor (javax.management.Descriptor)6 ModelMBeanAttributeInfo (javax.management.modelmbean.ModelMBeanAttributeInfo)6 DescriptorSupport (javax.management.modelmbean.DescriptorSupport)5 ModelMBeanOperationInfo (javax.management.modelmbean.ModelMBeanOperationInfo)5 RequiredModelMBean (javax.management.modelmbean.RequiredModelMBean)5 ObjectName (javax.management.ObjectName)4 ModelMBean (javax.management.modelmbean.ModelMBean)4 MBeanServer (javax.management.MBeanServer)3 ModelMBeanNotificationInfo (javax.management.modelmbean.ModelMBeanNotificationInfo)3 Method (java.lang.reflect.Method)2 LinkedHashMap (java.util.LinkedHashMap)2 LinkedHashSet (java.util.LinkedHashSet)2 Attribute (javax.management.Attribute)2 MBeanException (javax.management.MBeanException)2 MBeanInfo (javax.management.MBeanInfo)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 ObjectInputStream (java.io.ObjectInputStream)1