Merge
This commit is contained in:
commit
1a4fe677d1
@ -1118,11 +1118,11 @@ public abstract class OpenConverter {
|
|||||||
final Class<ConstructorProperties> propertyNamesClass = ConstructorProperties.class;
|
final Class<ConstructorProperties> propertyNamesClass = ConstructorProperties.class;
|
||||||
|
|
||||||
Class targetClass = getTargetClass();
|
Class targetClass = getTargetClass();
|
||||||
Constructor[] constrs = targetClass.getConstructors();
|
Constructor<?>[] constrs = targetClass.getConstructors();
|
||||||
|
|
||||||
// Applicable if and only if there are any annotated constructors
|
// Applicable if and only if there are any annotated constructors
|
||||||
List<Constructor> annotatedConstrList = newList();
|
List<Constructor<?>> annotatedConstrList = newList();
|
||||||
for (Constructor constr : constrs) {
|
for (Constructor<?> constr : constrs) {
|
||||||
if (Modifier.isPublic(constr.getModifiers())
|
if (Modifier.isPublic(constr.getModifiers())
|
||||||
&& constr.getAnnotation(propertyNamesClass) != null)
|
&& constr.getAnnotation(propertyNamesClass) != null)
|
||||||
annotatedConstrList.add(constr);
|
annotatedConstrList.add(constr);
|
||||||
@ -1152,7 +1152,7 @@ public abstract class OpenConverter {
|
|||||||
// Also remember the set of properties in that constructor
|
// Also remember the set of properties in that constructor
|
||||||
// so we can test unambiguity.
|
// so we can test unambiguity.
|
||||||
Set<BitSet> getterIndexSets = newSet();
|
Set<BitSet> getterIndexSets = newSet();
|
||||||
for (Constructor constr : annotatedConstrList) {
|
for (Constructor<?> constr : annotatedConstrList) {
|
||||||
String[] propertyNames =
|
String[] propertyNames =
|
||||||
constr.getAnnotation(propertyNamesClass).value();
|
constr.getAnnotation(propertyNamesClass).value();
|
||||||
|
|
||||||
@ -1309,10 +1309,10 @@ public abstract class OpenConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class Constr {
|
private static class Constr {
|
||||||
final Constructor constructor;
|
final Constructor<?> constructor;
|
||||||
final int[] paramIndexes;
|
final int[] paramIndexes;
|
||||||
final BitSet presentParams;
|
final BitSet presentParams;
|
||||||
Constr(Constructor constructor, int[] paramIndexes,
|
Constr(Constructor<?> constructor, int[] paramIndexes,
|
||||||
BitSet presentParams) {
|
BitSet presentParams) {
|
||||||
this.constructor = constructor;
|
this.constructor = constructor;
|
||||||
this.paramIndexes = paramIndexes;
|
this.paramIndexes = paramIndexes;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
CTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<!--
|
<!--
|
||||||
|
@ -1553,7 +1553,7 @@ class MetaData {
|
|||||||
private static String[] getConstructorProperties(Class type) {
|
private static String[] getConstructorProperties(Class type) {
|
||||||
String[] names = null;
|
String[] names = null;
|
||||||
int length = 0;
|
int length = 0;
|
||||||
for (Constructor constructor : type.getConstructors()) {
|
for (Constructor<?> constructor : type.getConstructors()) {
|
||||||
String[] value = getAnnotationValue(constructor);
|
String[] value = getAnnotationValue(constructor);
|
||||||
if ((value != null) && (length < value.length) && isValid(constructor, value)) {
|
if ((value != null) && (length < value.length) && isValid(constructor, value)) {
|
||||||
names = value;
|
names = value;
|
||||||
@ -1563,14 +1563,14 @@ class MetaData {
|
|||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String[] getAnnotationValue(Constructor constructor) {
|
private static String[] getAnnotationValue(Constructor<?> constructor) {
|
||||||
ConstructorProperties annotation = constructor.getAnnotation(ConstructorProperties.class);
|
ConstructorProperties annotation = constructor.getAnnotation(ConstructorProperties.class);
|
||||||
return (annotation != null)
|
return (annotation != null)
|
||||||
? annotation.value()
|
? annotation.value()
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isValid(Constructor constructor, String[] names) {
|
private static boolean isValid(Constructor<?> constructor, String[] names) {
|
||||||
Class[] parameters = constructor.getParameterTypes();
|
Class[] parameters = constructor.getParameterTypes();
|
||||||
if (names.length != parameters.length) {
|
if (names.length != parameters.length) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -50,7 +50,7 @@ import javax.management.loading.ClassLoaderRepository;
|
|||||||
* server. A Java object cannot be registered in the MBean server
|
* server. A Java object cannot be registered in the MBean server
|
||||||
* unless it is a JMX compliant MBean.</p>
|
* unless it is a JMX compliant MBean.</p>
|
||||||
*
|
*
|
||||||
* <p>When an MBean is registered or unregistered in the MBean server
|
* <p id="notif">When an MBean is registered or unregistered in the MBean server
|
||||||
* a {@link javax.management.MBeanServerNotification
|
* a {@link javax.management.MBeanServerNotification
|
||||||
* MBeanServerNotification} Notification is emitted. To register an
|
* MBeanServerNotification} Notification is emitted. To register an
|
||||||
* object as listener to MBeanServerNotifications you should call the
|
* object as listener to MBeanServerNotifications you should call the
|
||||||
@ -258,27 +258,43 @@ import javax.management.loading.ClassLoaderRepository;
|
|||||||
*/
|
*/
|
||||||
public interface MBeanServer extends MBeanServerConnection {
|
public interface MBeanServer extends MBeanServerConnection {
|
||||||
|
|
||||||
// doc comment inherited from MBeanServerConnection
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* <p>If this method successfully creates an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
|
*/
|
||||||
public ObjectInstance createMBean(String className, ObjectName name)
|
public ObjectInstance createMBean(String className, ObjectName name)
|
||||||
throws ReflectionException, InstanceAlreadyExistsException,
|
throws ReflectionException, InstanceAlreadyExistsException,
|
||||||
MBeanRegistrationException, MBeanException,
|
MBeanRegistrationException, MBeanException,
|
||||||
NotCompliantMBeanException;
|
NotCompliantMBeanException;
|
||||||
|
|
||||||
// doc comment inherited from MBeanServerConnection
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* <p>If this method successfully creates an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
|
*/
|
||||||
public ObjectInstance createMBean(String className, ObjectName name,
|
public ObjectInstance createMBean(String className, ObjectName name,
|
||||||
ObjectName loaderName)
|
ObjectName loaderName)
|
||||||
throws ReflectionException, InstanceAlreadyExistsException,
|
throws ReflectionException, InstanceAlreadyExistsException,
|
||||||
MBeanRegistrationException, MBeanException,
|
MBeanRegistrationException, MBeanException,
|
||||||
NotCompliantMBeanException, InstanceNotFoundException;
|
NotCompliantMBeanException, InstanceNotFoundException;
|
||||||
|
|
||||||
// doc comment inherited from MBeanServerConnection
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* <p>If this method successfully creates an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
|
*/
|
||||||
public ObjectInstance createMBean(String className, ObjectName name,
|
public ObjectInstance createMBean(String className, ObjectName name,
|
||||||
Object params[], String signature[])
|
Object params[], String signature[])
|
||||||
throws ReflectionException, InstanceAlreadyExistsException,
|
throws ReflectionException, InstanceAlreadyExistsException,
|
||||||
MBeanRegistrationException, MBeanException,
|
MBeanRegistrationException, MBeanException,
|
||||||
NotCompliantMBeanException;
|
NotCompliantMBeanException;
|
||||||
|
|
||||||
// doc comment inherited from MBeanServerConnection
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* <p>If this method successfully creates an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
|
*/
|
||||||
public ObjectInstance createMBean(String className, ObjectName name,
|
public ObjectInstance createMBean(String className, ObjectName name,
|
||||||
ObjectName loaderName, Object params[],
|
ObjectName loaderName, Object params[],
|
||||||
String signature[])
|
String signature[])
|
||||||
@ -287,12 +303,15 @@ public interface MBeanServer extends MBeanServerConnection {
|
|||||||
NotCompliantMBeanException, InstanceNotFoundException;
|
NotCompliantMBeanException, InstanceNotFoundException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a pre-existing object as an MBean with the MBean
|
* <p>Registers a pre-existing object as an MBean with the MBean
|
||||||
* server. If the object name given is null, the MBean must
|
* server. If the object name given is null, the MBean must
|
||||||
* provide its own name by implementing the {@link
|
* provide its own name by implementing the {@link
|
||||||
* javax.management.MBeanRegistration MBeanRegistration} interface
|
* javax.management.MBeanRegistration MBeanRegistration} interface
|
||||||
* and returning the name from the {@link
|
* and returning the name from the {@link
|
||||||
* MBeanRegistration#preRegister preRegister} method.
|
* MBeanRegistration#preRegister preRegister} method.</p>
|
||||||
|
*
|
||||||
|
* <p>If this method successfully registers an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
*
|
*
|
||||||
* @param object The MBean to be registered as an MBean.
|
* @param object The MBean to be registered as an MBean.
|
||||||
* @param name The object name of the MBean. May be null.
|
* @param name The object name of the MBean. May be null.
|
||||||
@ -319,7 +338,12 @@ public interface MBeanServer extends MBeanServerConnection {
|
|||||||
throws InstanceAlreadyExistsException, MBeanRegistrationException,
|
throws InstanceAlreadyExistsException, MBeanRegistrationException,
|
||||||
NotCompliantMBeanException;
|
NotCompliantMBeanException;
|
||||||
|
|
||||||
// doc comment inherited from MBeanServerConnection
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>If this method successfully unregisters an MBean, a notification
|
||||||
|
* is sent as described <a href="#notif">above</a>.</p>
|
||||||
|
*/
|
||||||
public void unregisterMBean(ObjectName name)
|
public void unregisterMBean(ObjectName name)
|
||||||
throws InstanceNotFoundException, MBeanRegistrationException;
|
throws InstanceNotFoundException, MBeanRegistrationException;
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ import java.util.logging.Level;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
import javax.management.Attribute;
|
import javax.management.Attribute;
|
||||||
import javax.management.AttributeChangeNotification;
|
import javax.management.AttributeChangeNotification;
|
||||||
import javax.management.AttributeChangeNotificationFilter;
|
import javax.management.AttributeChangeNotificationFilter;
|
||||||
@ -132,8 +133,6 @@ public class RequiredModelMBean
|
|||||||
* and operations will be executed */
|
* and operations will be executed */
|
||||||
private Object managedResource = null;
|
private Object managedResource = null;
|
||||||
|
|
||||||
private static final String currClass = "RequiredModelMBean";
|
|
||||||
|
|
||||||
/* records the registering in MBeanServer */
|
/* records the registering in MBeanServer */
|
||||||
private boolean registered = false;
|
private boolean registered = false;
|
||||||
private transient MBeanServer server = null;
|
private transient MBeanServer server = null;
|
||||||
@ -2488,10 +2487,13 @@ public class RequiredModelMBean
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MODELMBEAN_LOGGER.isLoggable(Level.FINER)) {
|
if (MODELMBEAN_LOGGER.isLoggable(Level.FINER)) {
|
||||||
|
Vector<String> enabledAttrs = currFilter.getEnabledAttributes();
|
||||||
|
String s = (enabledAttrs.size() > 1) ?
|
||||||
|
"[" + enabledAttrs.firstElement() + ", ...]" :
|
||||||
|
enabledAttrs.toString();
|
||||||
MODELMBEAN_LOGGER.logp(Level.FINER,
|
MODELMBEAN_LOGGER.logp(Level.FINER,
|
||||||
RequiredModelMBean.class.getName(), mth,
|
RequiredModelMBean.class.getName(), mth,
|
||||||
"Set attribute change filter to " +
|
"Set attribute change filter to " + s);
|
||||||
currFilter.getEnabledAttributes().firstElement());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
attributeBroadcaster.addNotificationListener(inlistener,currFilter,
|
attributeBroadcaster.addNotificationListener(inlistener,currFilter,
|
||||||
|
@ -64,7 +64,8 @@ class Flag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
VMOption getVMOption() {
|
VMOption getVMOption() {
|
||||||
return new VMOption(name, value.toString(), writeable, origin);
|
String val = value == null ? "" : value.toString();
|
||||||
|
return new VMOption(name, val, writeable, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Flag getFlag(String name) {
|
static Flag getFlag(String name) {
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code 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 General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6658779
|
||||||
|
* @summary Basic Test for HotSpotDiagnosticMXBean.getDiagnosticOptions()
|
||||||
|
* @author Daniel Fuchs
|
||||||
|
*
|
||||||
|
* @run main GetDiagnosticOptions
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.sun.management.HotSpotDiagnosticMXBean;
|
||||||
|
import com.sun.management.VMOption;
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
|
import java.util.List;
|
||||||
|
import javax.management.MBeanServer;
|
||||||
|
|
||||||
|
public class GetDiagnosticOptions {
|
||||||
|
private static String HOTSPOT_DIAGNOSTIC_MXBEAN_NAME =
|
||||||
|
"com.sun.management:type=HotSpotDiagnostic";
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
HotSpotDiagnosticMXBean mbean =
|
||||||
|
sun.management.ManagementFactory.getDiagnosticMXBean();
|
||||||
|
checkDiagnosticOptions(mbean);
|
||||||
|
|
||||||
|
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
mbean = ManagementFactory.newPlatformMXBeanProxy(mbs,
|
||||||
|
HOTSPOT_DIAGNOSTIC_MXBEAN_NAME,
|
||||||
|
HotSpotDiagnosticMXBean.class);
|
||||||
|
checkDiagnosticOptions(mbean);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkDiagnosticOptions(HotSpotDiagnosticMXBean mbean) {
|
||||||
|
List<VMOption> options = mbean.getDiagnosticOptions();
|
||||||
|
for (VMOption opt : options) {
|
||||||
|
System.out.println("option: "+opt.getName()+"="+opt.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6471865 6675768
|
||||||
|
* @summary DescriptorSupport constructors throw IAE when traces are enabled;
|
||||||
|
* RequiredModelMBean.addAttributeChangeNotificationListener throws exception
|
||||||
|
* when traces enabled and no attributes.
|
||||||
|
* @author Luis-Miguel Alventosa
|
||||||
|
* @author Paul Cheeseman
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.logging.ConsoleHandler;
|
||||||
|
import java.util.logging.Handler;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import javax.management.Notification;
|
||||||
|
import javax.management.NotificationListener;
|
||||||
|
import javax.management.modelmbean.DescriptorSupport;
|
||||||
|
import javax.management.modelmbean.RequiredModelMBean;
|
||||||
|
|
||||||
|
public class LoggingExceptionTest {
|
||||||
|
private static final String tests[] = new String[] {
|
||||||
|
"DescriptorSupport()",
|
||||||
|
"DescriptorSupport(int)",
|
||||||
|
"DescriptorSupport(String)",
|
||||||
|
"DescriptorSupport(String...)",
|
||||||
|
"DescriptorSupport(String[], Object[])",
|
||||||
|
"DescriptorSupport(DescriptorSupport)",
|
||||||
|
"RequiredModelMBean.addAttributeChangeNotificationListener",
|
||||||
|
};
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Handler handler = new ConsoleHandler();
|
||||||
|
Logger logger = Logger.getLogger("javax.management.modelmbean");
|
||||||
|
logger.addHandler(handler);
|
||||||
|
logger.setLevel(Level.FINEST);
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < tests.length; i++) {
|
||||||
|
System.out.println(">>> DescriptorSupportLoggingTest: Test Case " + i);
|
||||||
|
DescriptorSupport ds;
|
||||||
|
String msg = "Instantiate " + tests[i];
|
||||||
|
System.out.println(msg);
|
||||||
|
switch (i) {
|
||||||
|
case 0:
|
||||||
|
ds = new DescriptorSupport();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ds = new DescriptorSupport(10);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ds = new DescriptorSupport(new DescriptorSupport().toXMLString());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ds = new DescriptorSupport("name1=value1", "name2=value2");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
ds = new DescriptorSupport(new String[] {"name"}, new Object[] {"value"});
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
ds = new DescriptorSupport(new DescriptorSupport());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
RequiredModelMBean mbean = new RequiredModelMBean();
|
||||||
|
NotificationListener nl = new NotificationListener() {
|
||||||
|
public void handleNotification(Notification notification,
|
||||||
|
Object handback) {}
|
||||||
|
};
|
||||||
|
mbean.addAttributeChangeNotificationListener(nl, null, null);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
System.out.println(msg + " OK");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Got unexpected exception = " + e);
|
||||||
|
String msg = "Test FAILED!";
|
||||||
|
System.out.println(msg);
|
||||||
|
throw new IllegalArgumentException(msg);
|
||||||
|
}
|
||||||
|
System.out.println("Test PASSED!");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user