Search in sources :

Example 71 with MBeanOperationInfo

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

the class MBeanInfoEqualsNPETest method main.

public static void main(String[] args) throws Exception {
    System.out.println("---MBeanInfoEqualsNPETest-main ...");
    // ----
    System.out.println("\n---Testing on MBeanAttributeInfo...");
    MBeanAttributeInfo mbeanAttributeInfo0 = new MBeanAttributeInfo("name", SimpleType.INTEGER.getClassName(), "description", true, true, false);
    MBeanAttributeInfo mbeanAttributeInfo = new MBeanAttributeInfo(null, SimpleType.INTEGER.getClassName(), "description", true, true, false);
    test(mbeanAttributeInfo0, mbeanAttributeInfo, "class name");
    mbeanAttributeInfo = new MBeanAttributeInfo("name", null, "description", true, true, false);
    test(mbeanAttributeInfo0, mbeanAttributeInfo, "type");
    mbeanAttributeInfo = new MBeanAttributeInfo("name", SimpleType.INTEGER.getClassName(), null, true, true, false);
    test(mbeanAttributeInfo0, mbeanAttributeInfo, "description");
    // ----
    System.out.println("\n---Testing on MBeanConstructorInfo...");
    MBeanConstructorInfo mbeanConstructorInfo0 = new MBeanConstructorInfo("", "", new MBeanParameterInfo[] {}, new DescriptorSupport());
    MBeanConstructorInfo mbeanConstructorInfo = new MBeanConstructorInfo(null, "", new MBeanParameterInfo[] {}, new DescriptorSupport());
    test(mbeanConstructorInfo0, mbeanConstructorInfo, "name");
    mbeanConstructorInfo = new MBeanConstructorInfo("", null, new MBeanParameterInfo[] {}, new DescriptorSupport());
    test(mbeanConstructorInfo0, mbeanConstructorInfo, "description");
    mbeanConstructorInfo = new MBeanConstructorInfo("", "", null, new DescriptorSupport());
    test(mbeanConstructorInfo0, mbeanConstructorInfo, "MBeanParameterInfo");
    mbeanConstructorInfo = new MBeanConstructorInfo("", "", new MBeanParameterInfo[] {}, null);
    test(mbeanConstructorInfo0, mbeanConstructorInfo, "descriptor");
    // ----
    System.out.println("\n---Testing on MBeanOperationInfo...");
    MBeanOperationInfo mbeanOperationInfo0 = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, "type", MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
    MBeanOperationInfo mbeanOperationInfo = new MBeanOperationInfo(null, "description", new MBeanParameterInfo[] {}, "type", MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
    test(mbeanOperationInfo0, mbeanOperationInfo, "name");
    mbeanOperationInfo = new MBeanOperationInfo("name", null, new MBeanParameterInfo[] {}, "type", MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
    test(mbeanOperationInfo0, mbeanOperationInfo, "description");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", null, "type", 1, new DescriptorSupport());
    test(mbeanOperationInfo0, mbeanOperationInfo, "MBeanParameterInfo");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, null, MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
    test(mbeanOperationInfo0, mbeanOperationInfo, "type");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, null, MBeanOperationInfo.UNKNOWN, null);
    test(mbeanOperationInfo0, mbeanOperationInfo, "Descriptor");
    // ----
    System.out.println("\n---Testing on MBeanParameterInfo...");
    MBeanParameterInfo mbeanParameterInfo0 = new MBeanParameterInfo("name", "type", "description", new DescriptorSupport());
    MBeanParameterInfo mbeanParameterInfo = new MBeanParameterInfo(null, "type", "description", new DescriptorSupport());
    test(mbeanParameterInfo0, mbeanParameterInfo, "name");
    mbeanParameterInfo = new MBeanParameterInfo("name", null, "description", new DescriptorSupport());
    test(mbeanParameterInfo0, mbeanParameterInfo, "type");
    mbeanParameterInfo = new MBeanParameterInfo("name", "type", null, new DescriptorSupport());
    test(mbeanParameterInfo0, mbeanParameterInfo, "description");
    mbeanParameterInfo = new MBeanParameterInfo("name", "type", "description", null);
    test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
    // ----
    System.out.println("\n---Testing on MBeanFeatureInfo ...");
    MBeanFeatureInfo mbeanFeatureInfo0 = new MBeanFeatureInfo("name", "description", new DescriptorSupport());
    MBeanFeatureInfo mbeanFeatureInfo = new MBeanFeatureInfo(null, "description", new DescriptorSupport());
    test(mbeanFeatureInfo0, mbeanFeatureInfo, "name");
    mbeanFeatureInfo = new MBeanFeatureInfo("name", null, new DescriptorSupport());
    test(mbeanParameterInfo0, mbeanParameterInfo, "description");
    mbeanFeatureInfo = new MBeanFeatureInfo("name", "description", null);
    test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
    // ----
    System.out.println("\n---Testing on MBeanInfo...");
    String className = "toto";
    String description = "titi";
    MBeanAttributeInfo[] attrInfos = new MBeanAttributeInfo[] {};
    MBeanConstructorInfo[] constrInfos = new MBeanConstructorInfo[] {};
    MBeanOperationInfo[] operaInfos = new MBeanOperationInfo[] {};
    MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[] {};
    MBeanInfo minfo0 = new MBeanInfo("toto", description, attrInfos, constrInfos, operaInfos, notifInfos);
    MBeanInfo minfo = new MBeanInfo(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
    test(minfo0, minfo, "class name");
    minfo = new MBeanInfo(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
    test(minfo0, minfo, "description");
    minfo = new MBeanInfo(className, description, null, constrInfos, operaInfos, notifInfos);
    test(minfo0, minfo, "attrInfos");
    minfo = new MBeanInfo(className, description, attrInfos, null, operaInfos, notifInfos);
    test(minfo0, minfo, "constrInfos");
    minfo = new MBeanInfo(className, description, attrInfos, constrInfos, null, notifInfos);
    test(minfo0, minfo, "operaInfos");
    minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, null);
    test(minfo0, minfo, "notifInfos");
    if (failed > 0) {
        throw new RuntimeException("Test failed: " + failed);
    } else {
        System.out.println("---Test: PASSED");
    }
}
Also used : MBeanInfo(javax.management.MBeanInfo) MBeanOperationInfo(javax.management.MBeanOperationInfo) DescriptorSupport(javax.management.modelmbean.DescriptorSupport) MBeanAttributeInfo(javax.management.MBeanAttributeInfo) MBeanConstructorInfo(javax.management.MBeanConstructorInfo) MBeanNotificationInfo(javax.management.MBeanNotificationInfo) MBeanParameterInfo(javax.management.MBeanParameterInfo) MBeanFeatureInfo(javax.management.MBeanFeatureInfo)

Example 72 with MBeanOperationInfo

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

the class MBeanInfoHashCodeNPETest method main.

public static void main(String[] args) throws Exception {
    System.out.println("---MBeanInfoHashCodeNPETest-main ...");
    // ----
    System.out.println("\n---Testing on MBeanAttributeInfo...");
    MBeanAttributeInfo mbeanAttributeInfo = new MBeanAttributeInfo(null, SimpleType.INTEGER.getClassName(), "description", true, true, false);
    test(mbeanAttributeInfo, "class name");
    mbeanAttributeInfo = new MBeanAttributeInfo("name", null, "description", true, true, false);
    test(mbeanAttributeInfo, "type");
    mbeanAttributeInfo = new MBeanAttributeInfo("name", SimpleType.INTEGER.getClassName(), null, true, true, false);
    test(mbeanAttributeInfo, "description");
    // ----
    System.out.println("\n---Testing on MBeanConstructorInfo...");
    MBeanConstructorInfo mbeanConstructorInfo = new MBeanConstructorInfo(null, "", new MBeanParameterInfo[] {}, new DescriptorSupport());
    test(mbeanConstructorInfo, "name");
    mbeanConstructorInfo = new MBeanConstructorInfo("", null, new MBeanParameterInfo[] {}, new DescriptorSupport());
    test(mbeanConstructorInfo, "description");
    mbeanConstructorInfo = new MBeanConstructorInfo("", "", null, new DescriptorSupport());
    test(mbeanConstructorInfo, "MBeanParameterInfo");
    mbeanConstructorInfo = new MBeanConstructorInfo("", "", new MBeanParameterInfo[] {}, null);
    test(mbeanConstructorInfo, "descriptor");
    // ----
    System.out.println("\n---Testing on MBeanOperationInfo...");
    MBeanOperationInfo mbeanOperationInfo = new MBeanOperationInfo(null, "description", new MBeanParameterInfo[] {}, "type", 1, new DescriptorSupport());
    test(mbeanOperationInfo, "name");
    mbeanOperationInfo = new MBeanOperationInfo("name", null, new MBeanParameterInfo[] {}, "type", 1, new DescriptorSupport());
    test(mbeanOperationInfo, "description");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", null, "type", 1, new DescriptorSupport());
    test(mbeanOperationInfo, "MBeanParameterInfo");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, null, 1, new DescriptorSupport());
    test(mbeanOperationInfo, "type");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, "type", -1, new DescriptorSupport());
    test(mbeanOperationInfo, "native impact");
    mbeanOperationInfo = new MBeanOperationInfo("name", "description", new MBeanParameterInfo[] {}, "type", 1, null);
    test(mbeanOperationInfo, "Descriptor");
    // ----
    System.out.println("\n---Testing on MBeanParameterInfo...");
    MBeanParameterInfo mbeanParameterInfo = new MBeanParameterInfo(null, "type", "description", new DescriptorSupport());
    test(mbeanParameterInfo, "name");
    mbeanParameterInfo = new MBeanParameterInfo("name", null, "description", new DescriptorSupport());
    test(mbeanParameterInfo, "description");
    mbeanParameterInfo = new MBeanParameterInfo("name", "type", null, new DescriptorSupport());
    test(mbeanParameterInfo, "description");
    mbeanParameterInfo = new MBeanParameterInfo("name", "type", "description", null);
    test(mbeanParameterInfo, "Descriptor");
    // ----
    System.out.println("\n---Testing on MBeanInfo...");
    String className = "toto";
    String description = "titi";
    MBeanAttributeInfo[] attrInfos = new MBeanAttributeInfo[] {};
    MBeanConstructorInfo[] constrInfos = new MBeanConstructorInfo[] {};
    MBeanOperationInfo[] operaInfos = new MBeanOperationInfo[] {};
    MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[] {};
    MBeanInfo minfo = new MBeanInfo(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
    test(minfo, "class name");
    minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, notifInfos);
    test(minfo, "name");
    minfo = new MBeanInfo(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
    test(minfo, "description");
    minfo = new MBeanInfo(className, description, null, constrInfos, operaInfos, notifInfos);
    test(minfo, "attrInfos");
    minfo = new MBeanInfo(className, description, attrInfos, constrInfos, null, notifInfos);
    test(minfo, "operaInfos");
    minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, null);
    test(minfo, "notifInfos");
    Thread.sleep(100);
    if (failed > 0) {
        throw new RuntimeException("Test failed: " + failed);
    } else {
        System.out.println("---Test: PASSED");
    }
}
Also used : MBeanInfo(javax.management.MBeanInfo) MBeanOperationInfo(javax.management.MBeanOperationInfo) DescriptorSupport(javax.management.modelmbean.DescriptorSupport) MBeanAttributeInfo(javax.management.MBeanAttributeInfo) MBeanConstructorInfo(javax.management.MBeanConstructorInfo) MBeanNotificationInfo(javax.management.MBeanNotificationInfo) MBeanParameterInfo(javax.management.MBeanParameterInfo)

Example 73 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 74 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 75 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)

Aggregations

MBeanOperationInfo (javax.management.MBeanOperationInfo)117 MBeanInfo (javax.management.MBeanInfo)76 MBeanAttributeInfo (javax.management.MBeanAttributeInfo)59 MBeanParameterInfo (javax.management.MBeanParameterInfo)38 ObjectName (javax.management.ObjectName)33 MBeanNotificationInfo (javax.management.MBeanNotificationInfo)23 ArrayList (java.util.ArrayList)22 MBeanConstructorInfo (javax.management.MBeanConstructorInfo)20 InstanceNotFoundException (javax.management.InstanceNotFoundException)19 ReflectionException (javax.management.ReflectionException)17 Test (org.junit.Test)16 IntrospectionException (javax.management.IntrospectionException)13 MBeanServer (javax.management.MBeanServer)13 MalformedObjectNameException (javax.management.MalformedObjectNameException)9 Test (org.testng.annotations.Test)9 Method (java.lang.reflect.Method)8 Attribute (javax.management.Attribute)8 Descriptor (javax.management.Descriptor)7 IOException (java.io.IOException)6 HashMap (java.util.HashMap)5