Search in sources :

Example 51 with MBeanOperationInfo

use of javax.management.MBeanOperationInfo in project jdk8u_jdk by JetBrains.

the class MustBeValidCommand method makeOpInfos.

private static MBeanOperationInfo[] makeOpInfos(String[][] spec) {
    final MBeanOperationInfo[] result = new MBeanOperationInfo[spec.length];
    final MBeanParameterInfo[] pars = makeParInfos(parameters);
    for (int i = 0; i < result.length; i++) {
        System.out.println("\tCreate an MBeanOperationInfo: " + spec[i][0]);
        final MBeanOperationInfo item = new MBeanOperationInfo(spec[i][2], spec[i][0], pars, spec[i][1], MBeanOperationInfo.ACTION_INFO);
        result[i] = item;
    }
    return result;
}
Also used : MBeanOperationInfo(javax.management.MBeanOperationInfo) MBeanParameterInfo(javax.management.MBeanParameterInfo)

Example 52 with MBeanOperationInfo

use of javax.management.MBeanOperationInfo in project jdk8u_jdk by JetBrains.

the class MXBeanTest method testInterface.

private static <T> void testInterface(Class<T> c, MBeanServerConnection mbsc, ObjectName on, NamedMXBeans namedMXBeans, boolean nullTest) throws Exception {
    System.out.println("Type check...");
    MBeanInfo mbi = mbsc.getMBeanInfo(on);
    MBeanAttributeInfo[] mbais = mbi.getAttributes();
    for (int i = 0; i < mbais.length; i++) {
        MBeanAttributeInfo mbai = mbais[i];
        String name = mbai.getName();
        Field typeField = c.getField(name + "Type");
        OpenType typeValue = (OpenType) typeField.get(null);
        OpenType openType = (OpenType) mbai.getDescriptor().getFieldValue("openType");
        if (typeValue.equals(openType))
            success("attribute " + name);
        else {
            final String msg = "Wrong type attribute " + name + ": " + openType + " should be " + typeValue;
            failure(msg);
        }
    }
    MBeanOperationInfo[] mbois = mbi.getOperations();
    for (int i = 0; i < mbois.length; i++) {
        MBeanOperationInfo mboi = mbois[i];
        String oname = mboi.getName();
        if (!oname.startsWith("op"))
            throw new Error();
        OpenType retType = (OpenType) mboi.getDescriptor().getFieldValue("openType");
        MBeanParameterInfo[] params = mboi.getSignature();
        MBeanParameterInfo p1i = params[0];
        MBeanParameterInfo p2i = params[1];
        OpenType p1Type = (OpenType) p1i.getDescriptor().getFieldValue("openType");
        OpenType p2Type = (OpenType) p2i.getDescriptor().getFieldValue("openType");
        if (!retType.equals(p1Type) || !p1Type.equals(p2Type)) {
            final String msg = "Parameter and return open types should all be same " + "but are not: " + retType + " " + oname + "(" + p1Type + ", " + p2Type + ")";
            failure(msg);
            continue;
        }
        String name = oname.substring(2);
        Field typeField = c.getField(name + "Type");
        OpenType typeValue = (OpenType) typeField.get(null);
        if (typeValue.equals(retType))
            success("operation " + oname);
        else {
            final String msg = "Wrong type operation " + oname + ": " + retType + " should be " + typeValue;
            failure(msg);
        }
    }
    System.out.println("Mapping check...");
    Object proxy = JMX.newMXBeanProxy(mbsc, on, c);
    Method[] methods = c.getMethods();
    for (int i = 0; i < methods.length; i++) {
        final Method method = methods[i];
        if (method.getDeclaringClass() != c)
            // skip hashCode() etc inherited from Object
            continue;
        final String mname = method.getName();
        final int what = getType(method);
        final String name = getName(method);
        final Field refField = c.getField(name);
        if (nullTest && refField.getType().isPrimitive())
            continue;
        final Field openTypeField = c.getField(name + "Type");
        final OpenType openType = (OpenType) openTypeField.get(null);
        final Object refValue = nullTest ? null : refField.get(null);
        Object setValue = refValue;
        try {
            Field onField = c.getField(name + "ObjectName");
            String refName = (String) onField.get(null);
            ObjectName refObjName = ObjectName.getInstance(refName);
            Class<?> mxbeanInterface = refField.getType();
            setValue = nullTest ? null : JMX.newMXBeanProxy(mbsc, refObjName, mxbeanInterface);
        } catch (Exception e) {
        // no xObjectName field, setValue == refValue
        }
        boolean ok = true;
        try {
            switch(what) {
                case GET:
                    final Object gotOpen = mbsc.getAttribute(on, name);
                    if (nullTest) {
                        if (gotOpen != null) {
                            failure(mname + " got non-null value " + gotOpen);
                            ok = false;
                        }
                    } else if (!openType.isValue(gotOpen)) {
                        if (gotOpen instanceof TabularData) {
                            // detail the mismatch
                            TabularData gotTabular = (TabularData) gotOpen;
                            compareTabularType((TabularType) openType, gotTabular.getTabularType());
                        }
                        failure(mname + " got open data " + gotOpen + " not valid for open type " + openType);
                        ok = false;
                    }
                    final Object got = method.invoke(proxy, (Object[]) null);
                    if (!equal(refValue, got, namedMXBeans)) {
                        failure(mname + " got " + string(got) + ", should be " + string(refValue));
                        ok = false;
                    }
                    break;
                case SET:
                    method.invoke(proxy, new Object[] { setValue });
                    break;
                case OP:
                    final Object opped = method.invoke(proxy, new Object[] { setValue, setValue });
                    if (!equal(refValue, opped, namedMXBeans)) {
                        failure(mname + " got " + string(opped) + ", should be " + string(refValue));
                        ok = false;
                    }
                    break;
                default:
                    throw new Error();
            }
            if (ok)
                success(mname);
        } catch (Exception e) {
            failure(mname, e);
        }
    }
}
Also used : OpenType(javax.management.openmbean.OpenType) MBeanInfo(javax.management.MBeanInfo) MBeanOperationInfo(javax.management.MBeanOperationInfo) TabularType(javax.management.openmbean.TabularType) Method(java.lang.reflect.Method) MBeanAttributeInfo(javax.management.MBeanAttributeInfo) NotCompliantMBeanException(javax.management.NotCompliantMBeanException) ObjectName(javax.management.ObjectName) TabularData(javax.management.openmbean.TabularData) Field(java.lang.reflect.Field) MBeanParameterInfo(javax.management.MBeanParameterInfo)

Example 53 with MBeanOperationInfo

use of javax.management.MBeanOperationInfo in project jdk8u_jdk by JetBrains.

the class MXBeanLoadingTest1 method run.

public void run(Map<String, Object> args) {
    System.out.println("MXBeanLoadingTest1::run: Start");
    try {
        System.out.println("We ensure no reference is retained on MXBean class" + " after it is unregistered. We take time to perform" + " some little extra check of Descriptors, MBean*Info.");
        ClassLoader myClassLoader = MXBeanLoadingTest1.class.getClassLoader();
        if (!(myClassLoader instanceof URLClassLoader)) {
            String message = "(ERROR) Test's class loader is not " + "a URLClassLoader";
            System.out.println(message);
            throw new RuntimeException(message);
        }
        URLClassLoader myURLClassLoader = (URLClassLoader) myClassLoader;
        URL[] urls = myURLClassLoader.getURLs();
        PrivateMLet mlet = new PrivateMLet(urls, null, false);
        Class<?> shadowClass = mlet.loadClass(TestMXBean.class.getName());
        if (shadowClass == TestMXBean.class) {
            String message = "(ERROR) MLet got original TestMXBean, not shadow";
            System.out.println(message);
            throw new RuntimeException(message);
        }
        shadowClass = null;
        MBeanServer mbs = MBeanServerFactory.createMBeanServer();
        ObjectName mletName = new ObjectName("x:type=mlet");
        mbs.registerMBean(mlet, mletName);
        ObjectName testName = new ObjectName("x:type=test");
        mbs.createMBean(Test.class.getName(), testName, mletName);
        // That test fails because the MXBean instance is accessed via
        // a delegate OpenMBean which has
        ClassLoader testLoader = mbs.getClassLoaderFor(testName);
        if (testLoader != mlet) {
            System.out.println("MLet " + mlet);
            String message = "(ERROR) MXBean's class loader is not MLet: " + testLoader;
            System.out.println(message);
            throw new RuntimeException(message);
        }
        testLoader = null;
        // Cycle get/set/get of the attribute of type Luis.
        // We check the set is effective.
        CompositeData cd_B = (CompositeData) mbs.getAttribute(testName, "B");
        CompositeType compType_B = cd_B.getCompositeType();
        CompositeDataSupport cds_B = new CompositeDataSupport(compType_B, new String[] { "something" }, new Object[] { Integer.valueOf(13) });
        Attribute myAtt = new Attribute("B", cds_B);
        mbs.setAttribute(testName, myAtt);
        CompositeData cd_B2 = (CompositeData) mbs.getAttribute(testName, "B");
        if (((Integer) cd_B2.get("something")).intValue() != 13) {
            String message = "(ERROR) The setAttribute of att B did not work;" + " expect Luis.something = 13 but got " + cd_B2.get("something");
            System.out.println(message);
            throw new RuntimeException(message);
        }
        MBeanInfo info = mbs.getMBeanInfo(testName);
        String mxbeanField = (String) info.getDescriptor().getFieldValue(JMX.MXBEAN_FIELD);
        if (mxbeanField == null || !mxbeanField.equals("true")) {
            String message = "(ERROR) Improper mxbean field value " + mxbeanField;
            System.out.println(message);
            throw new RuntimeException(message);
        }
        // Check the 2 attributes.
        MBeanAttributeInfo[] attrs = info.getAttributes();
        if (attrs.length == 2) {
            for (MBeanAttributeInfo mbai : attrs) {
                String originalTypeFieldValue = (String) mbai.getDescriptor().getFieldValue(JMX.ORIGINAL_TYPE_FIELD);
                OpenType<?> openTypeFieldValue = (OpenType<?>) mbai.getDescriptor().getFieldValue(JMX.OPEN_TYPE_FIELD);
                if (mbai.getName().equals("A")) {
                    if (!mbai.isReadable() || !mbai.isWritable() || mbai.isIs() || !mbai.getType().equals("int")) {
                        String message = "(ERROR) Unexpected MBeanAttributeInfo for A " + mbai;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                    if (!originalTypeFieldValue.equals("int")) {
                        String message = "(ERROR) Unexpected originalType in Descriptor for A " + originalTypeFieldValue;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                    if (!openTypeFieldValue.equals(SimpleType.INTEGER)) {
                        String message = "(ERROR) Unexpected openType in Descriptor for A " + originalTypeFieldValue;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                } else if (mbai.getName().equals("B")) {
                    if (!mbai.isReadable() || !mbai.isWritable() || mbai.isIs() || !mbai.getType().equals("javax.management.openmbean.CompositeData")) {
                        String message = "(ERROR) Unexpected MBeanAttributeInfo for B " + mbai;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                    if (!originalTypeFieldValue.equals(Luis.class.getName())) {
                        String message = "(ERROR) Unexpected originalType in Descriptor for B " + originalTypeFieldValue;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                    if (!openTypeFieldValue.equals(compType_B)) {
                        String message = "(ERROR) Unexpected openType in Descriptor for B " + compType_B;
                        System.out.println(message);
                        throw new RuntimeException(message);
                    }
                } else {
                    String message = "(ERROR) Unknown attribute name";
                    System.out.println(message);
                    throw new RuntimeException(message);
                }
            }
        } else {
            String message = "(ERROR) Unexpected MBeanAttributeInfo array" + Arrays.deepToString(attrs);
            System.out.println(message);
            throw new RuntimeException(message);
        }
        // Check the MXBean operation.
        MBeanOperationInfo[] ops = info.getOperations();
        // logged 6320104.
        if (ops.length != 1 || !ops[0].getName().equals("bogus") || ops[0].getSignature().length > 0 || !ops[0].getReturnType().equals("void")) {
            String message = "(ERROR) Unexpected MBeanOperationInfo array " + Arrays.deepToString(ops);
            System.out.println(message);
            throw new RuntimeException(message);
        }
        String originalTypeFieldValue = (String) ops[0].getDescriptor().getFieldValue(JMX.ORIGINAL_TYPE_FIELD);
        OpenType<?> openTypeFieldValue = (OpenType<?>) ops[0].getDescriptor().getFieldValue(JMX.OPEN_TYPE_FIELD);
        if (!originalTypeFieldValue.equals("void")) {
            String message = "(ERROR) Unexpected originalType in Descriptor for bogus " + originalTypeFieldValue;
            System.out.println(message);
            throw new RuntimeException(message);
        }
        if (!openTypeFieldValue.equals(SimpleType.VOID)) {
            String message = "(ERROR) Unexpected openType in Descriptor for bogus " + originalTypeFieldValue;
            System.out.println(message);
            throw new RuntimeException(message);
        }
        // Check there is 2 constructors.
        if (info.getConstructors().length != 2) {
            String message = "(ERROR) Wrong number of constructors " + "in introspected bean: " + Arrays.asList(info.getConstructors());
            System.out.println(message);
            throw new RuntimeException(message);
        }
        // Check MXBean class name.
        if (!info.getClassName().endsWith("Test")) {
            String message = "(ERROR) Wrong info class name: " + info.getClassName();
            System.out.println(message);
            throw new RuntimeException(message);
        }
        mbs.unregisterMBean(testName);
        mbs.unregisterMBean(mletName);
        WeakReference<PrivateMLet> mletRef = new WeakReference<PrivateMLet>(mlet);
        mlet = null;
        System.out.println("MXBean registered and unregistered, waiting for " + "garbage collector to collect class loader");
        for (int i = 0; i < 10000 && mletRef.get() != null; i++) {
            System.gc();
            Thread.sleep(1);
        }
        if (mletRef.get() == null)
            System.out.println("(OK) class loader was GC'd");
        else {
            String message = "(ERROR) Class loader was not GC'd";
            System.out.println(message);
            throw new RuntimeException(message);
        }
    } catch (Exception e) {
        Utils.printThrowable(e, true);
        throw new RuntimeException(e);
    }
    System.out.println("MXBeanLoadingTest1::run: Done without any error");
}
Also used : OpenType(javax.management.openmbean.OpenType) MBeanInfo(javax.management.MBeanInfo) Attribute(javax.management.Attribute) CompositeData(javax.management.openmbean.CompositeData) URL(java.net.URL) WeakReference(java.lang.ref.WeakReference) URLClassLoader(java.net.URLClassLoader) PrivateMLet(javax.management.loading.PrivateMLet) MBeanServer(javax.management.MBeanServer) MBeanOperationInfo(javax.management.MBeanOperationInfo) CompositeDataSupport(javax.management.openmbean.CompositeDataSupport) MBeanAttributeInfo(javax.management.MBeanAttributeInfo) ObjectName(javax.management.ObjectName) URLClassLoader(java.net.URLClassLoader) CompositeType(javax.management.openmbean.CompositeType)

Example 54 with MBeanOperationInfo

use of javax.management.MBeanOperationInfo in project jdk8u_jdk by JetBrains.

the class MXBeanIntrospector method getMBeanOperationInfo.

@Override
MBeanOperationInfo getMBeanOperationInfo(String operationName, ConvertingMethod operation) {
    final Method method = operation.getMethod();
    final String description = operationName;
    /* Ideally this would be an empty string, but
           OMBOperationInfo constructor forbids that.  Also, we
           could consult an annotation to get a useful
           description.  */
    final int impact = MBeanOperationInfo.UNKNOWN;
    final OpenType<?> returnType = operation.getOpenReturnType();
    final Type originalReturnType = operation.getGenericReturnType();
    final OpenType<?>[] paramTypes = operation.getOpenParameterTypes();
    final Type[] originalParamTypes = operation.getGenericParameterTypes();
    final MBeanParameterInfo[] params = new MBeanParameterInfo[paramTypes.length];
    boolean openReturnType = canUseOpenInfo(originalReturnType);
    boolean openParameterTypes = true;
    Annotation[][] annots = method.getParameterAnnotations();
    for (int i = 0; i < paramTypes.length; i++) {
        final String paramName = "p" + i;
        final String paramDescription = paramName;
        final OpenType<?> openType = paramTypes[i];
        final Type originalType = originalParamTypes[i];
        Descriptor descriptor = typeDescriptor(openType, originalType);
        descriptor = ImmutableDescriptor.union(descriptor, Introspector.descriptorForAnnotations(annots[i]));
        final MBeanParameterInfo pi;
        if (canUseOpenInfo(originalType)) {
            pi = new OpenMBeanParameterInfoSupport(paramName, paramDescription, openType, descriptor);
        } else {
            openParameterTypes = false;
            pi = new MBeanParameterInfo(paramName, originalTypeString(originalType), paramDescription, descriptor);
        }
        params[i] = pi;
    }
    Descriptor descriptor = typeDescriptor(returnType, originalReturnType);
    descriptor = ImmutableDescriptor.union(descriptor, Introspector.descriptorForElement(method));
    final MBeanOperationInfo oi;
    if (openReturnType && openParameterTypes) {
        /* If the return value and all the parameters can be faithfully
             * represented as OpenType then we return an OpenMBeanOperationInfo.
             * If any of them is a primitive type, we can't.  Compatibility
             * with JSR 174 means that we must return an MBean*Info where
             * the getType() is the primitive type, not its wrapped type as
             * we would get with an OpenMBean*Info.  The OpenType is available
             * in the Descriptor in either case.
             */
        final OpenMBeanParameterInfo[] oparams = new OpenMBeanParameterInfo[params.length];
        System.arraycopy(params, 0, oparams, 0, params.length);
        oi = new OpenMBeanOperationInfoSupport(operationName, description, oparams, returnType, impact, descriptor);
    } else {
        oi = new MBeanOperationInfo(operationName, description, params, openReturnType ? returnType.getClassName() : originalTypeString(originalReturnType), impact, descriptor);
    }
    return oi;
}
Also used : OpenMBeanParameterInfo(javax.management.openmbean.OpenMBeanParameterInfo) OpenType(javax.management.openmbean.OpenType) MBeanOperationInfo(javax.management.MBeanOperationInfo) OpenMBeanParameterInfoSupport(javax.management.openmbean.OpenMBeanParameterInfoSupport) Method(java.lang.reflect.Method) GenericArrayType(java.lang.reflect.GenericArrayType) OpenType(javax.management.openmbean.OpenType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) Descriptor(javax.management.Descriptor) ImmutableDescriptor(javax.management.ImmutableDescriptor) OpenMBeanOperationInfoSupport(javax.management.openmbean.OpenMBeanOperationInfoSupport) MBeanParameterInfo(javax.management.MBeanParameterInfo) OpenMBeanParameterInfo(javax.management.openmbean.OpenMBeanParameterInfo)

Example 55 with MBeanOperationInfo

use of javax.management.MBeanOperationInfo in project kernel by exoplatform.

the class TestExoMBeanAttribute method test1.

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"));
}
Also used : MBeanOperationInfo(javax.management.MBeanOperationInfo) MBeanAttributeInfo(javax.management.MBeanAttributeInfo)

Aggregations

MBeanOperationInfo (javax.management.MBeanOperationInfo)68 MBeanInfo (javax.management.MBeanInfo)39 MBeanAttributeInfo (javax.management.MBeanAttributeInfo)35 MBeanParameterInfo (javax.management.MBeanParameterInfo)25 ObjectName (javax.management.ObjectName)20 Test (org.junit.Test)12 ArrayList (java.util.ArrayList)11 MBeanNotificationInfo (javax.management.MBeanNotificationInfo)9 MBeanConstructorInfo (javax.management.MBeanConstructorInfo)8 MBeanServer (javax.management.MBeanServer)8 Method (java.lang.reflect.Method)7 Descriptor (javax.management.Descriptor)7 Attribute (javax.management.Attribute)5 ReflectionException (javax.management.ReflectionException)5 InstanceNotFoundException (javax.management.InstanceNotFoundException)4 AMX (com.sun.appserv.management.base.AMX)3 IOException (java.io.IOException)3 TreeMap (java.util.TreeMap)3 IntrospectionException (javax.management.IntrospectionException)3 MBeanServerConnection (javax.management.MBeanServerConnection)3