From: <sco...@jb...> - 2005-08-02 18:22:09
|
Yes, pojos can be registered. The simplest is the StandardMBean pattern of a pojo + MBean interface (maybe this is not a pojo to you because of the interface contract). There is also the code intensive ModelMBean which requires no contract on the pojo. Our XMBean externalizes all of the code to an xml file. There are annotation driven mbeans as well in the aop layer. // StandardMBean example | package jmx; | | import javax.management.MBeanServer; | import javax.management.MBeanServerFactory; | import javax.management.ObjectName; | | public class TestStandardMBean | { | public static interface JavaBeanMBean | { | public String getName(); | public void setName(String name); | public String displayString(); | } | public static class JavaBean | implements JavaBeanMBean | { | private String name = "SomeBean"; | | public String getName() | { | return name; | } | public void setName(String name) | { | this.name = name; | } | | public String displayString() | { | StringBuffer tmp = new StringBuffer(super.toString()); | tmp.append('('); | tmp.append("name="); | tmp.append(name); | tmp.append(')'); | return tmp.toString(); | } | } | | public static void main(String[] args) throws Exception | { | MBeanServer server = MBeanServerFactory.createMBeanServer("TestModelMBean"); | JavaBean resource = new JavaBean(); | ObjectName name = new ObjectName("test:type=har,bean=JavaBean"); | server.registerMBean(resource, name); | | System.out.println("JavaBean.name: "+server.getAttribute(name, "Name")); | Object[] iargs = {}; | String[] sig = {}; | System.out.println("JavaBean.displayString: "+server.invoke(name, "displayString", iargs, sig)); | | } | | } | | Output: | | JavaBean.name: SomeBean | JavaBean.displayString: jmx.TestStandardMBean$JavaBean@5740bb(name=SomeBean) | // ModelMBean example | package jmx; | | import javax.management.modelmbean.ModelMBean; | import javax.management.modelmbean.RequiredModelMBean; | import javax.management.modelmbean.ModelMBeanInfo; | import javax.management.modelmbean.DescriptorSupport; | import javax.management.modelmbean.ModelMBeanAttributeInfo; | import javax.management.modelmbean.ModelMBeanOperationInfo; | import javax.management.modelmbean.ModelMBeanInfoSupport; | import javax.management.modelmbean.ModelMBeanConstructorInfo; | import javax.management.modelmbean.ModelMBeanNotificationInfo; | import javax.management.ObjectName; | import javax.management.MBeanServerFactory; | import javax.management.MBeanServer; | import javax.management.Descriptor; | import javax.management.MBeanOperationInfo; | | public class TestModelMBean | { | public static class JavaBean | { | private String name = "SomeBean"; | | public String getName() | { | return name; | } | public void setName(String name) | { | this.name = name; | } | | public String displayString() | { | StringBuffer tmp = new StringBuffer(super.toString()); | tmp.append('('); | tmp.append("name="); | tmp.append(name); | tmp.append(')'); | return tmp.toString(); | } | } | | public static void main(String[] args) throws Exception | { | MBeanServer server = MBeanServerFactory.createMBeanServer("TestModelMBean"); | JavaBean resource = new JavaBean(); | ModelMBean modelmbean = new RequiredModelMBean(); | modelmbean.setModelMBeanInfo(getModelMBeanInfo()); | modelmbean.setManagedResource(resource, "ObjectReference"); | ObjectName name = new ObjectName("test:type=har,bean=JavaBean"); | server.registerMBean(modelmbean, name); | | System.out.println("JavaBean.name: "+server.getAttribute(name, "Name")); | Object[] iargs = {}; | String[] sig = {}; | System.out.println("JavaBean.displayString: "+server.invoke(name, "displayString", iargs, sig)); | | } | | private static ModelMBeanInfo getModelMBeanInfo() | { | final boolean READABLE = true; | final boolean WRITABLE = true; | | // build 'Name' read-write attribute | Descriptor nameDesc = new DescriptorSupport(); | nameDesc.setField("name", "Name"); | nameDesc.setField("descriptorType", "attribute"); | nameDesc.setField("displayName", "JavaBean Name"); | nameDesc.setField("getMethod", "getName"); | | ModelMBeanAttributeInfo nameInfo = | new ModelMBeanAttributeInfo( | "Name", // attribute name | String.class.getName(), // attribute type | "JavaBean Name", // description | READABLE, WRITABLE, false, // read write | nameDesc // descriptor | ); | | // Build getName getter operation | Descriptor getNameDesc = new DescriptorSupport(); | getNameDesc.setField("name", "getName"); | getNameDesc.setField("descriptorType", "operation"); | getNameDesc.setField("role", "getter"); | ModelMBeanOperationInfo getNameInfo = | new ModelMBeanOperationInfo( | "getName", // name & description | "Obtains the Name attribute", | null, // signature | String.class.getName(), // return type | MBeanOperationInfo.INFO, // impact | getNameDesc // descriptor | ); | | // build 'toString' getter operation | Descriptor toStringDesc = new DescriptorSupport(); | toStringDesc.setField("name", "displayString"); | toStringDesc.setField("descriptorType", "operation"); | toStringDesc.setField("role", "getter"); | | ModelMBeanOperationInfo toStringInfo = | new ModelMBeanOperationInfo( | "displayString", // name & description | "Obtains the bean string representation", | null, // signature | void.class.getName(), // return type | MBeanOperationInfo.INFO, // impact | toStringDesc // descriptor | ); | | // MBean descriptor | Descriptor mbeanDesc = new DescriptorSupport(); | mbeanDesc.setField("name", RequiredModelMBean.class.getName()); | mbeanDesc.setField("descriptorType", "MBean"); | mbeanDesc.setField("currencyTimeLimit", "-1"); | | // create ModelMBeanInfo | ModelMBeanConstructorInfo[] ctors = null; | ModelMBeanAttributeInfo[] attrs = {nameInfo}; | ModelMBeanOperationInfo[] ops = {getNameInfo, toStringInfo}; | ModelMBeanNotificationInfo[] notify = null; | ModelMBeanInfo info = new ModelMBeanInfoSupport( | RequiredModelMBean.class.getName(), | "JavaBean", | attrs, | ctors, | ops, | notify, | mbeanDesc | ); | | return info; | | } | } | | Output: | | JavaBean.name: SomeBean | JavaBean.displayString: jmx.TestModelMBean$JavaBean@337838(name=SomeBean) | View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3888006#3888006 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3888006 |