/* * 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.Impact; import org.exoplatform.management.annotations.ImpactType; import org.exoplatform.management.annotations.Managed; import org.exoplatform.management.annotations.ManagedDescription; import org.exoplatform.management.annotations.ManagedName; 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 TestExoMBeanOperation extends AbstractExoMBeanTest { public void test1() throws Exception { Bean bean = register("domain:name=mbean", MBean1.class); MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(0, operationInfos.length); MBeanAttributeInfo[] mbeanAttributeInfos = bean.info.getAttributes(); assertNotNull(mbeanAttributeInfos); assertEquals(0, mbeanAttributeInfos.length); } @Managed public static class MBean1 { public String op(Object arg) { return null; } } public void test2() throws Exception { Bean bean = register("domain:name=mbean", MBean2.class); MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(1, operationInfos.length); MBeanOperationInfo operationInfo = operationInfos[0]; assertNotNull(operationInfo); assertEquals("op", operationInfo.getName()); assertEquals("op_desc", operationInfo.getDescription()); assertEquals("java.lang.String", operationInfo.getReturnType()); MBeanParameterInfo[] parameterInfos = operationInfo.getSignature(); assertNotNull(parameterInfos); assertEquals(1, parameterInfos.length); MBeanParameterInfo parameterInfo = parameterInfos[0]; assertNotNull(parameterInfo); assertEquals("arg_desc", parameterInfo.getDescription()); assertEquals("java.lang.Integer", parameterInfo.getType()); MBeanAttributeInfo[] mbeanAttributeInfos = bean.info.getAttributes(); assertNotNull(mbeanAttributeInfos); assertEquals(0, mbeanAttributeInfos.length); assertEquals("5", server.invoke(bean.name, "op", new Object[]{5}, new String[]{"java.lang.Integer"})); } @Managed public static class MBean2 { @Managed @ManagedDescription("op_desc") public String op(@ManagedDescription("arg_desc") Integer arg) { return Integer.toString(arg); } } public void test3() throws Exception { Bean bean = register("domain:name=mbean", MBean3.class); MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(1, operationInfos.length); MBeanOperationInfo operationInfo = operationInfos[0]; assertNotNull(operationInfo); assertEquals("op", operationInfo.getName()); assertEquals("java.lang.String", operationInfo.getReturnType()); MBeanParameterInfo[] parameterInfos = operationInfo.getSignature(); assertNotNull(parameterInfos); assertEquals(1, parameterInfos.length); MBeanParameterInfo parameterInfo = parameterInfos[0]; assertNotNull(parameterInfo); assertEquals("_arg", parameterInfo.getName()); assertEquals("java.lang.Integer", parameterInfo.getType()); MBeanAttributeInfo[] mbeanAttributeInfos = bean.info.getAttributes(); assertNotNull(mbeanAttributeInfos); assertEquals(0, mbeanAttributeInfos.length); assertEquals("7", server.invoke(bean.name, "op", new Object[]{7}, new String[]{"java.lang.Integer"})); } @Managed public static class MBean3 { @Managed public String op(@ManagedName("_arg") Integer arg) { return Integer.toString(arg); } } public void test4() throws Exception { Bean bean = register("domain:name=mbean", MBean4.class); MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(2, operationInfos.length); MBeanOperationInfo operation1Info = bean.info.getOperation("op1"); assertNotNull(operation1Info); assertEquals("op1", operation1Info.getName()); assertEquals("java.lang.String", operation1Info.getReturnType()); MBeanParameterInfo[] operation1ParameterInfos = operation1Info.getSignature(); assertNotNull(operation1ParameterInfos); assertEquals(1, operation1ParameterInfos.length); MBeanParameterInfo operation1ParameterInfo = operation1ParameterInfos[0]; assertNotNull(operation1ParameterInfo); assertEquals("java.lang.Boolean", operation1ParameterInfo.getType()); MBeanOperationInfo operation2Info = bean.info.getOperation("op2"); assertNotNull(operation2Info); assertEquals("op2", operation2Info.getName()); assertEquals("java.lang.String", operation2Info.getReturnType()); MBeanParameterInfo[] operation2ParameterInfos = operation2Info.getSignature(); assertNotNull(operation2ParameterInfos); assertEquals(1, operation2ParameterInfos.length); MBeanParameterInfo operation2ParameterInfo = operation2ParameterInfos[0]; assertNotNull(operation2ParameterInfo); assertEquals("java.lang.Integer", operation2ParameterInfo.getType()); MBeanAttributeInfo[] mbeanAttributeInfos = bean.info.getAttributes(); assertNotNull(mbeanAttributeInfos); assertEquals(0, mbeanAttributeInfos.length); assertEquals("true", server.invoke(bean.name, "op1", new Object[]{true}, new String[]{"java.lang.Boolean"})); assertEquals("7", server.invoke(bean.name, "op2", new Object[]{7}, new String[]{"java.lang.Integer"})); } public static class ParentMBean4 { @Managed public String op1(Boolean arg) { return Boolean.toString(arg); } } @Managed public static class MBean4 extends ParentMBean4 { @Managed public String op2(Integer arg) { return Integer.toString(arg); } } public void test5() { assertNotBuildable(MBean5.class); } @Managed public static class MBean5 { @Managed @ManagedName("foo") public String op2(Integer arg) { return Integer.toString(arg); } } public void test6() throws Exception { Bean bean = register("domain:name=mbean", MBean6.class); MBeanOperationInfo[] operationInfos = bean.info.getOperations(); assertNotNull(operationInfos); assertEquals(4, operationInfos.length); MBeanOperationInfo readInfo = bean.info.getOperation("read"); assertNotNull(readInfo); assertEquals(MBeanOperationInfo.INFO, readInfo.getImpact()); MBeanOperationInfo writeInfo = bean.info.getOperation("write"); assertNotNull(writeInfo); assertEquals(MBeanOperationInfo.ACTION, writeInfo.getImpact()); MBeanOperationInfo idempotentWriteInfo = bean.info.getOperation("idempotentWrite"); assertNotNull(idempotentWriteInfo); assertEquals(MBeanOperationInfo.ACTION, idempotentWriteInfo.getImpact()); MBeanOperationInfo defaultImpactInfo = bean.info.getOperation("defaultImpact"); assertNotNull(defaultImpactInfo); assertEquals(MBeanOperationInfo.ACTION, defaultImpactInfo.getImpact()); } @Managed public static class MBean6 { @Managed @Impact(ImpactType.READ) public void read() { } @Managed @Impact(ImpactType.WRITE) public void write() { } @Managed @Impact(ImpactType.IDEMPOTENT_WRITE) public void idempotentWrite() { } @Managed public void defaultImpact() { } } }