Search in sources :

Example 1 with ModelMBean

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

the class MBeanExporter method registerLazyInit.

/**
	 * Registers beans that are configured for lazy initialization with the
	 * {@code MBeanServer} indirectly through a proxy.
	 * @param beanName the name of the bean in the {@code BeanFactory}
	 * @param beanKey the key associated with this bean in the beans map
	 * @return the {@code ObjectName} under which the bean was registered
	 * with the {@code MBeanServer}
	 */
private ObjectName registerLazyInit(String beanName, String beanKey) throws JMException {
    ProxyFactory proxyFactory = new ProxyFactory();
    proxyFactory.setProxyTargetClass(true);
    proxyFactory.setFrozen(true);
    if (isMBean(this.beanFactory.getType(beanName))) {
        // A straight MBean... Let's create a simple lazy-init CGLIB proxy for it.
        LazyInitTargetSource targetSource = new LazyInitTargetSource();
        targetSource.setTargetBeanName(beanName);
        targetSource.setBeanFactory(this.beanFactory);
        proxyFactory.setTargetSource(targetSource);
        Object proxy = proxyFactory.getProxy(this.beanClassLoader);
        ObjectName objectName = getObjectName(proxy, beanKey);
        if (logger.isDebugEnabled()) {
            logger.debug("Located MBean '" + beanKey + "': registering with JMX server as lazy-init MBean [" + objectName + "]");
        }
        doRegister(proxy, objectName);
        return objectName;
    } else {
        // A simple bean... Let's create a lazy-init ModelMBean proxy with notification support.
        NotificationPublisherAwareLazyTargetSource targetSource = new NotificationPublisherAwareLazyTargetSource();
        targetSource.setTargetBeanName(beanName);
        targetSource.setBeanFactory(this.beanFactory);
        proxyFactory.setTargetSource(targetSource);
        Object proxy = proxyFactory.getProxy(this.beanClassLoader);
        ObjectName objectName = getObjectName(proxy, beanKey);
        if (logger.isDebugEnabled()) {
            logger.debug("Located simple bean '" + beanKey + "': registering with JMX server as lazy-init MBean [" + objectName + "]");
        }
        ModelMBean mbean = createAndConfigureMBean(proxy, beanKey);
        targetSource.setModelMBean(mbean);
        targetSource.setObjectName(objectName);
        doRegister(mbean, objectName);
        return objectName;
    }
}
Also used : RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ModelMBean(javax.management.modelmbean.ModelMBean) ProxyFactory(org.springframework.aop.framework.ProxyFactory) LazyInitTargetSource(org.springframework.aop.target.LazyInitTargetSource) ObjectName(javax.management.ObjectName)

Example 2 with ModelMBean

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

the class MBeanExporter method registerManagedResource.

@Override
public void registerManagedResource(Object managedResource, ObjectName objectName) throws MBeanExportException {
    Assert.notNull(managedResource, "Managed resource must not be null");
    Assert.notNull(objectName, "ObjectName must not be null");
    try {
        if (isMBean(managedResource.getClass())) {
            doRegister(managedResource, objectName);
        } else {
            ModelMBean mbean = createAndConfigureMBean(managedResource, managedResource.getClass().getName());
            doRegister(mbean, objectName);
            injectNotificationPublisherIfNecessary(managedResource, mbean, objectName);
        }
    } catch (JMException ex) {
        throw new UnableToRegisterMBeanException("Unable to register MBean [" + managedResource + "] with object name [" + objectName + "]", ex);
    }
}
Also used : RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ModelMBean(javax.management.modelmbean.ModelMBean) JMException(javax.management.JMException)

Example 3 with ModelMBean

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

the class MBeanExporter method createAndConfigureMBean.

/**
	 * Creates an MBean that is configured with the appropriate management
	 * interface for the supplied managed resource.
	 * @param managedResource the resource that is to be exported as an MBean
	 * @param beanKey the key associated with the managed bean
	 * @see #createModelMBean()
	 * @see #getMBeanInfo(Object, String)
	 */
protected ModelMBean createAndConfigureMBean(Object managedResource, String beanKey) throws MBeanExportException {
    try {
        ModelMBean mbean = createModelMBean();
        mbean.setModelMBeanInfo(getMBeanInfo(managedResource, beanKey));
        mbean.setManagedResource(managedResource, MR_TYPE_OBJECT_REFERENCE);
        return mbean;
    } catch (Throwable ex) {
        throw new MBeanExportException("Could not create ModelMBean for managed resource [" + managedResource + "] with key '" + beanKey + "'", ex);
    }
}
Also used : RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ModelMBean(javax.management.modelmbean.ModelMBean)

Example 4 with ModelMBean

use of javax.management.modelmbean.ModelMBean 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)

Example 5 with ModelMBean

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

the class RequiredModelMBeanGetAttributeTest method main.

public static void main(String[] args) throws Exception {
    boolean ok = true;
    MBeanServer mbs = MBeanServerFactory.createMBeanServer();
    // Resource methods
    Method nullGetter = Resource.class.getMethod("getNull", (Class[]) null);
    Method integerGetter = Resource.class.getMethod("getInteger", (Class[]) null);
    Method hashtableGetter = Resource.class.getMethod("getHashtable", (Class[]) null);
    Method mapGetter = Resource.class.getMethod("getMap", (Class[]) null);
    // ModelMBeanOperationInfo
    Descriptor nullOperationDescriptor = new DescriptorSupport(new String[] { "name=getNull", "descriptorType=operation", "role=getter" });
    ModelMBeanOperationInfo nullOperationInfo = new ModelMBeanOperationInfo("Null attribute", nullGetter, nullOperationDescriptor);
    Descriptor integerOperationDescriptor = new DescriptorSupport(new String[] { "name=getInteger", "descriptorType=operation", "role=getter" });
    ModelMBeanOperationInfo integerOperationInfo = new ModelMBeanOperationInfo("Integer attribute", integerGetter, integerOperationDescriptor);
    Descriptor hashtableOperationDescriptor = new DescriptorSupport(new String[] { "name=getHashtable", "descriptorType=operation", "role=getter" });
    ModelMBeanOperationInfo hashtableOperationInfo = new ModelMBeanOperationInfo("Hashtable attribute", hashtableGetter, hashtableOperationDescriptor);
    Descriptor mapOperationDescriptor = new DescriptorSupport(new String[] { "name=getMap", "descriptorType=operation", "role=getter" });
    ModelMBeanOperationInfo mapOperationInfo = new ModelMBeanOperationInfo("Map attribute", mapGetter, mapOperationDescriptor);
    // ModelMBeanAttributeInfo
    Descriptor nullAttributeDescriptor = new DescriptorSupport(new String[] { "name=Null", "descriptorType=attribute", "getMethod=getNull" });
    ModelMBeanAttributeInfo nullAttributeInfo = new ModelMBeanAttributeInfo("Null", "java.lang.Object", "Null attribute", true, false, false, nullAttributeDescriptor);
    Descriptor integerAttributeDescriptor = new DescriptorSupport(new String[] { "name=Integer", "descriptorType=attribute", "getMethod=getInteger" });
    ModelMBeanAttributeInfo integerAttributeInfo = new ModelMBeanAttributeInfo("Integer", "int", "Integer attribute", true, false, false, integerAttributeDescriptor);
    Descriptor hashtableAttributeDescriptor = new DescriptorSupport(new String[] { "name=Hashtable", "descriptorType=attribute", "getMethod=getHashtable" });
    ModelMBeanAttributeInfo hashtableAttributeInfo = new ModelMBeanAttributeInfo("Hashtable", "java.util.Hashtable", "Hashtable attribute", true, false, false, hashtableAttributeDescriptor);
    Descriptor mapAttributeDescriptor = new DescriptorSupport(new String[] { "name=Map", "descriptorType=attribute", "getMethod=getMap" });
    ModelMBeanAttributeInfo mapAttributeInfo = new ModelMBeanAttributeInfo("Map", "java.util.Map", "Map attribute", true, false, false, mapAttributeDescriptor);
    Descriptor null2AttributeDescriptor = new DescriptorSupport(new String[] { "name=Null2", "descriptorType=attribute" });
    null2AttributeDescriptor.setField("default", null);
    ModelMBeanAttributeInfo null2AttributeInfo = new ModelMBeanAttributeInfo("Null2", "java.lang.Object", "Null2 attribute", true, false, false, null2AttributeDescriptor);
    Descriptor integer2AttributeDescriptor = new DescriptorSupport(new String[] { "name=Integer2", "descriptorType=attribute" });
    integer2AttributeDescriptor.setField("default", 10);
    ModelMBeanAttributeInfo integer2AttributeInfo = new ModelMBeanAttributeInfo("Integer2", "int", "Integer2 attribute", true, false, false, integer2AttributeDescriptor);
    Descriptor hashtable2AttributeDescriptor = new DescriptorSupport(new String[] { "name=Hashtable2", "descriptorType=attribute" });
    hashtable2AttributeDescriptor.setField("default", new Hashtable());
    ModelMBeanAttributeInfo hashtable2AttributeInfo = new ModelMBeanAttributeInfo("Hashtable2", "java.util.Hashtable", "Hashtable2 attribute", true, false, false, hashtable2AttributeDescriptor);
    Descriptor map2AttributeDescriptor = new DescriptorSupport(new String[] { "name=Map2", "descriptorType=attribute" });
    map2AttributeDescriptor.setField("default", new Hashtable());
    ModelMBeanAttributeInfo map2AttributeInfo = new ModelMBeanAttributeInfo("Map2", "java.util.Map", "Map2 attribute", true, false, false, map2AttributeDescriptor);
    // ModelMBeanInfo
    ModelMBeanInfo mmbi = new ModelMBeanInfoSupport(Resource.class.getName(), "Resource MBean", new ModelMBeanAttributeInfo[] { nullAttributeInfo, integerAttributeInfo, hashtableAttributeInfo, mapAttributeInfo, null2AttributeInfo, integer2AttributeInfo, hashtable2AttributeInfo, map2AttributeInfo }, null, new ModelMBeanOperationInfo[] { nullOperationInfo, integerOperationInfo, hashtableOperationInfo, mapOperationInfo }, null);
    // RequiredModelMBean
    ModelMBean mmb = new RequiredModelMBean(mmbi);
    mmb.setManagedResource(resource, "ObjectReference");
    ObjectName mmbName = new ObjectName(":type=ResourceMBean");
    mbs.registerMBean(mmb, mmbName);
    // Run tests
    System.out.println("\nTesting that we can call getNull()... ");
    try {
        Object o = mbs.getAttribute(mmbName, "Null");
        System.out.println("getNull() = " + o);
        System.out.println("Attribute's declared type = java.lang.Object");
        System.out.println("Returned value's type = null");
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getInteger()... ");
    try {
        Integer i = (Integer) mbs.getAttribute(mmbName, "Integer");
        System.out.println("getInteger() = " + i);
        System.out.println("Attribute's declared type = int");
        System.out.println("Returned value's type = " + i.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getHashtable()... ");
    try {
        Hashtable h = (Hashtable) mbs.getAttribute(mmbName, "Hashtable");
        System.out.println("getHashtable() = " + h);
        System.out.println("Attribute's declared type = " + "java.util.Hashtable");
        System.out.println("Returned value's type = " + h.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getMap()... ");
    try {
        Map m = (Map) mbs.getAttribute(mmbName, "Map");
        System.out.println("getMap() = " + m);
        System.out.println("Attribute's declared type = " + "java.util.Map");
        System.out.println("Returned value's type = " + m.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getNull2()... ");
    try {
        Object o = mbs.getAttribute(mmbName, "Null2");
        System.out.println("getNull2() = " + o);
        System.out.println("Attribute's declared type = java.lang.Object");
        System.out.println("Returned value's type = null");
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getInteger2()... ");
    try {
        Integer i = (Integer) mbs.getAttribute(mmbName, "Integer2");
        System.out.println("getInteger2() = " + i);
        System.out.println("Attribute's declared type = int");
        System.out.println("Returned value's type = " + i.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getHashtable2()... ");
    try {
        Hashtable h = (Hashtable) mbs.getAttribute(mmbName, "Hashtable2");
        System.out.println("getHashtable2() = " + h);
        System.out.println("Attribute's declared type = " + "java.util.Hashtable");
        System.out.println("Returned value's type = " + h.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    System.out.println("\nTesting that we can call getMap2()... ");
    try {
        Map m = (Map) mbs.getAttribute(mmbName, "Map2");
        System.out.println("getMap2() = " + m);
        System.out.println("Attribute's declared type = " + "java.util.Map");
        System.out.println("Returned value's type = " + m.getClass().getName());
    } catch (Exception e) {
        System.out.println("TEST FAILED: Caught exception:");
        e.printStackTrace(System.out);
        ok = false;
    }
    if (ok)
        System.out.println("\nTest passed.\n");
    else {
        System.out.println("\nTest failed.\n");
        System.exit(1);
    }
}
Also used : ModelMBeanOperationInfo(javax.management.modelmbean.ModelMBeanOperationInfo) RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ModelMBean(javax.management.modelmbean.ModelMBean) Hashtable(java.util.Hashtable) DescriptorSupport(javax.management.modelmbean.DescriptorSupport) Method(java.lang.reflect.Method) ModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) RequiredModelMBean(javax.management.modelmbean.RequiredModelMBean) ObjectName(javax.management.ObjectName) ModelMBeanAttributeInfo(javax.management.modelmbean.ModelMBeanAttributeInfo) Descriptor(javax.management.Descriptor) ModelMBeanInfoSupport(javax.management.modelmbean.ModelMBeanInfoSupport) Map(java.util.Map) MBeanServer(javax.management.MBeanServer)

Aggregations

ModelMBean (javax.management.modelmbean.ModelMBean)13 ObjectName (javax.management.ObjectName)9 RequiredModelMBean (javax.management.modelmbean.RequiredModelMBean)8 ModelMBeanInfo (javax.management.modelmbean.ModelMBeanInfo)4 ModelMBeanInfoSupport (javax.management.modelmbean.ModelMBeanInfoSupport)4 Test (org.junit.Test)4 Descriptor (javax.management.Descriptor)3 MBeanAttributeInfo (javax.management.MBeanAttributeInfo)3 MBeanException (javax.management.MBeanException)3 MBeanOperationInfo (javax.management.MBeanOperationInfo)3 MBeanServer (javax.management.MBeanServer)3 DescriptorSupport (javax.management.modelmbean.DescriptorSupport)3 ModelMBeanAttributeInfo (javax.management.modelmbean.ModelMBeanAttributeInfo)3 Method (java.lang.reflect.Method)2 Attribute (javax.management.Attribute)2 MBeanInfo (javax.management.MBeanInfo)2 ModelMBeanOperationInfo (javax.management.modelmbean.ModelMBeanOperationInfo)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Hashtable (java.util.Hashtable)1 Map (java.util.Map)1