0N/A/*
2362N/A * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A/*
0N/A * @test
0N/A * @bug 4911846
0N/A * @summary Test that MBeanRegistration can change caller ObjectName
0N/A * @author Eamonn McManus
0N/A * @run clean PreRegisterTest
0N/A * @run build PreRegisterTest
0N/A * @run main PreRegisterTest
0N/A */
0N/A
0N/A/* Check that an ObjectName returned by MBeanRegistration.preRegister is
0N/A the one used, even if createMBean had a different non-null ObjectName. */
0N/A
0N/Aimport java.util.Set;
0N/Aimport javax.management.*;
0N/A
0N/Apublic class PreRegisterTest {
0N/A static final ObjectName oldName, newName;
0N/A
0N/A static {
0N/A try {
0N/A oldName = new ObjectName("a:type=old");
0N/A newName = new ObjectName("a:type=new");
0N/A } catch (MalformedObjectNameException e) {
0N/A e.printStackTrace();
0N/A throw new Error();
0N/A }
0N/A }
0N/A
0N/A public static class X implements XMBean, MBeanRegistration {
0N/A public ObjectName preRegister(MBeanServer mbs, ObjectName name) {
0N/A return newName;
0N/A }
0N/A public void postRegister(Boolean done) {}
0N/A public void preDeregister() {}
0N/A public void postDeregister() {}
0N/A }
0N/A
0N/A public static interface XMBean {
0N/A }
0N/A
0N/A public static void main(String[] args) throws Exception {
0N/A System.out.println("Testing preRegister ObjectName substitution");
0N/A MBeanServer mbs = MBeanServerFactory.newMBeanServer();
0N/A mbs.createMBean(X.class.getName(), oldName);
0N/A Set names = mbs.queryNames(null, null);
0N/A System.out.println("MBean names after createMBean: " + names);
0N/A boolean ok = true;
0N/A if (names.contains(oldName)) {
0N/A ok = false;
0N/A System.out.println("TEST FAILS: previous name was used");
0N/A }
0N/A if (!names.contains(newName)) {
0N/A ok = false;
0N/A System.out.println("TEST FAILS: substitute name was not used");
0N/A }
0N/A
0N/A if (ok) {
0N/A System.out.println("Test passes: ObjectName correctly " +
0N/A "substituted");
0N/A } else {
0N/A System.out.println("TEST FAILS: ObjectName not correctly " +
0N/A "substituted");
0N/A System.exit(1);
0N/A }
0N/A }
0N/A}