/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.container.jmx; import org.exoplatform.management.annotations.Managed; import org.exoplatform.management.annotations.ManagedDescription; import org.exoplatform.management.annotations.ManagedName; import javax.management.Attribute; import javax.management.MBeanAttributeInfo; import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; /** * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> * @version $Revision$ */ public class TestExoMBeanAttribute extends AbstractExoMBeanTest { public void test1() throws Exception { test1(register("domain:name=mbean0", MBean1_0.class), "getString"); test1(register("domain:name=mbean1", MBean1_1.class), "getString"); test1(register("domain:name=mbean2", MBean1_2.class), "getInteger"); } private void test1(Bean bean, String getterName) throws Exception { MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(1, operationInfos.length); MBeanOperationInfo operationInfo = operationInfos[0]; assertNotNull(operationInfo); assertEquals(getterName, operationInfo.getName()); assertEquals("java.lang.String", operationInfo.getReturnType()); assertEquals(0, operationInfo.getSignature().length); MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertNotNull(attributeInfos); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals("String", attributeInfo.getName()); assertEquals("java.lang.String", attributeInfo.getType()); assertEquals(true, attributeInfo.isReadable()); assertEquals(false, attributeInfo.isWritable()); MBean1_0.string = "Foo"; assertEquals("Foo", server.invoke(bean.name, getterName, new Object[0], new String[0])); MBean1_0.string = "Bar"; assertEquals("Bar", server.getAttribute(bean.name, "String")); } @Managed public static class MBean1_0 { static String string; @Managed public String getString() { return string; } } @Managed public static class MBean1_1 { public void setString(String s) { MBean1_0.string = s; } @Managed public String getString() { return MBean1_0.string; } } @Managed public static class MBean1_2 { @Managed @ManagedName("String") public String getInteger() { return MBean1_0.string; } } public void test2() throws Exception { test2(register("domain:name=mbean0", MBean2_0.class), "setString"); test2(register("domain:name=mbean1", MBean2_1.class), "setString"); test2(register("domain:name=mbean2", MBean2_2.class), "setInteger"); } public void test2(Bean bean, String setterName) throws Exception { MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(1, operationInfos.length); MBeanOperationInfo operationInfo = operationInfos[0]; assertNotNull(operationInfo); assertEquals(setterName, operationInfo.getName()); assertEquals("void", operationInfo.getReturnType()); MBeanParameterInfo[] attributeParameterInfos = operationInfo.getSignature(); assertEquals(1, attributeParameterInfos.length); MBeanParameterInfo attributeParameterInfo = attributeParameterInfos[0]; assertEquals("java.lang.String", attributeParameterInfo.getType()); MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertNotNull(attributeInfos); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals("String", attributeInfo.getName()); assertEquals("java.lang.String", attributeInfo.getType()); assertEquals(false, attributeInfo.isReadable()); assertEquals(true, attributeInfo.isWritable()); MBean2_0.string = null; assertEquals(null, server.invoke(bean.name, setterName, new Object[]{"Foo"}, new String[]{"java.lang.String"})); assertEquals("Foo", MBean2_0.string); server.setAttribute(bean.name, new Attribute("String", "Bar")); assertEquals("Bar", MBean2_0.string); } @Managed public static class MBean2_0 { static String string; @Managed public void setString(String s) { string = s; } } @Managed public static class MBean2_1 { @Managed public void setString(String s) { MBean2_0.string = s; } public String getString() { return MBean2_0.string; } } @Managed public static class MBean2_2 { @Managed @ManagedName("String") public void setInteger(String s) { MBean2_0.string = s; } } public void test3() throws Exception { test3(register("domain:name=mbean0", MBean3_0.class), "getString", "setString"); test3(register("domain:name=mbean1", MBean3_1.class), "getInteger", "setInteger"); test3(register("domain:name=mbean2", MBean3_2.class), "getInteger", "setInteger"); test3(register("domain:name=mbean3", MBean3_3.class), "getInteger", "setInteger"); } public void test3(Bean bean, String getterName, String setterName) throws Exception { MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(2, operationInfos.length); MBeanOperationInfo setStringInfo = bean.info.getOperation(setterName); assertNotNull(setStringInfo); assertEquals(setterName, setStringInfo.getName()); assertEquals("void", setStringInfo.getReturnType()); MBeanParameterInfo[] setStringParameterInfos = setStringInfo.getSignature(); assertEquals(1, setStringParameterInfos.length); MBeanParameterInfo attributeParameterInfo = setStringParameterInfos[0]; assertEquals("java.lang.String", attributeParameterInfo.getType()); MBeanOperationInfo getStringInfo = bean.info.getOperation(getterName); assertNotNull(getStringInfo); assertEquals(getterName, getStringInfo.getName()); assertEquals("java.lang.String", getStringInfo.getReturnType()); assertEquals(0, getStringInfo.getSignature().length); MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertNotNull(attributeInfos); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals("String", attributeInfo.getName()); assertEquals("java.lang.String", attributeInfo.getType()); assertEquals(true, attributeInfo.isReadable()); assertEquals(true, attributeInfo.isWritable()); MBean3_0.string = null; assertEquals(null, server.invoke(bean.name, setterName, new Object[]{"Foo"}, new String[]{"java.lang.String"})); assertEquals("Foo", MBean3_0.string); server.setAttribute(bean.name, new Attribute("String", "Bar")); assertEquals("Bar", MBean3_0.string); MBean3_0.string = "Juu"; assertEquals("Juu", server.invoke(bean.name, getterName, new Object[0], new String[0])); MBean3_0.string = "Daa"; assertEquals("Daa", server.getAttribute(bean.name, "String")); } @Managed public static class MBean3_0 { static String string; @Managed public String getString() { return string; } @Managed public void setString(String s) { string = s; } } @Managed public static class MBean3_1 { @Managed @ManagedName("String") public String getInteger() { return MBean3_0.string; } @Managed public void setInteger(String s) { MBean3_0.string = s; } } @Managed public static class MBean3_2 { @Managed public String getInteger() { return MBean3_0.string; } @Managed @ManagedName("String") public void setInteger(String s) { MBean3_0.string = s; } } @Managed public static class MBean3_3 { @Managed @ManagedName("String") public String getInteger() { return MBean3_0.string; } @Managed @ManagedName("String") public void setInteger(String s) { MBean3_0.string = s; } } public void test4() throws Exception { assertNotBuildable(MBean4_0.class); assertNotBuildable(MBean4_1.class); assertNotBuildable(MBean4_2.class); assertNotBuildable(MBean4_3.class); } @Managed public static class MBean4_0 { @Managed @ManagedName("String") public String getInteger() { return null; } @Managed @ManagedName("Integer") public void setInteger(String s) { } } @Managed public static class MBean4_1 { @Managed public void setInteger(String s) { } @Managed public void setInteger(Integer s) { } } @Managed public static class MBean4_2 { @Managed @ManagedName("Integer") public void setInteger(String s) { } @Managed @ManagedName("Integer") public void setString(Integer s) { } } @Managed public static class MBean4_3 { @Managed @ManagedName("Integer") public Integer getInteger() { return null; } @Managed @ManagedName("Integer") public String getString() { return null; } } public void test5() throws Exception { test5(register("domain:name=mbean0", MBean5_0.class)); test5(register("domain:name=mbean1", MBean5_1.class)); } public void test5(Bean bean) throws Exception { MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertNotNull(attributeInfos); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals("String", attributeInfo.getName()); assertEquals("String_description", attributeInfo.getDescription()); assertEquals("java.lang.String", attributeInfo.getType()); } @Managed public static class MBean5_0 { @Managed @ManagedDescription("String_description") public String getString() { return null; } } @Managed public static class MBean5_1 { @Managed @ManagedDescription("String_description") public void setString(String string) { } } @Managed public static class MBean5_2 { @Managed @ManagedDescription("String_description") public void setString(String string) { } @Managed @ManagedDescription("String_description 2") public String getString() { return null; } } public void test6() throws Exception { test6(register("domain:name=mbean0", MBean6_0.class), "Name"); test6(register("domain:name=mbean1", MBean6_1.class), "Foo"); test6(register("domain:name=mbean2", MBean6_2.class), "Bar"); test6(register("domain:name=mbean3", MBean6_3.class), "Juu"); } private void test6(Bean bean, String expectedName) throws Exception { MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals(expectedName, attributeInfo.getName()); } public static interface Interface6_0 { @Managed String getName(); } @Managed public static class MBean6_0 implements Interface6_0 { public String getName() { return "Foo"; } } public static interface Interface6_1 { @Managed @ManagedName("Foo") String getName(); } @Managed public static class MBean6_1 implements Interface6_1 { public String getName() { return "Foo"; } } public static interface Interface6_2 { @Managed String getName(); } @Managed public static class MBean6_2 implements Interface6_2 { @ManagedName("Bar") public String getName() { return "Foo"; } } public static interface Interface6_3 { @Managed @ManagedName("Foo") String getName(); } @Managed public static class MBean6_3 implements Interface6_3 { @ManagedName("Juu") public String getName() { return "Foo"; } } public void test7() throws Exception { test7(register("domain:name=mbean0", MBean7_0.class), "Name"); test7(register("domain:name=mbean1", MBean7_1.class), "Foo"); test7(register("domain:name=mbean2", MBean7_2.class), "Bar"); test7(register("domain:name=mbean3", MBean7_3.class), "Juu"); } private void test7(Bean bean, String expectedName) throws Exception { MBeanAttributeInfo[] attributeInfos = bean.info.getAttributes(); assertEquals(1, attributeInfos.length); MBeanAttributeInfo attributeInfo = attributeInfos[0]; assertEquals(expectedName, attributeInfo.getName()); } public static class SuperMBean7_0 { @Managed public String getName() { return "Foo"; } } @Managed public static class MBean7_0 extends SuperMBean7_0 { public String getName() { return "Foo"; } } public static class SuperMBean7_1 { @Managed @ManagedName("Foo") public String getName() { return "Foo"; } } @Managed public static class MBean7_1 extends SuperMBean7_1 { public String getName() { return "Foo"; } } public static class SuperMBean7_2 { @Managed public String getName() { return "Foo"; } } @Managed public static class MBean7_2 extends SuperMBean7_2 { @ManagedName("Bar") public String getName() { return "Foo"; } } public static class SuperMBean7_3 { @Managed @ManagedName("Foo") public String getName() { return "Foo"; } } @Managed public static class MBean7_3 extends SuperMBean7_3 { @ManagedName("Juu") public String getName() { return "Foo"; } } }