# HG changeset patch # User emcmanus # Date 1205936242 -3600 # Node ID db2a63668df3de3fd8e24b5e9256c2d3518397e1 # Parent 2ccefd4e038f19210fb3019a2840c7faa3378545 6675768: NoSuchElementException thrown in RequiredModelMBean when tracing enabled Summary: Rewrite logging in RequiredModelMBean.addAttributeChangeNotificationListener Reviewed-by: dfuchs diff -r 2ccefd4e038f -r db2a63668df3 jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java --- a/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java Mon Mar 17 12:27:58 2008 -0700 +++ b/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java Wed Mar 19 15:17:22 2008 +0100 @@ -48,6 +48,7 @@ import java.util.Map; import java.util.Set; +import java.util.Vector; import javax.management.Attribute; import javax.management.AttributeChangeNotification; import javax.management.AttributeChangeNotificationFilter; @@ -132,8 +133,6 @@ * and operations will be executed */ private Object managedResource = null; - private static final String currClass = "RequiredModelMBean"; - /* records the registering in MBeanServer */ private boolean registered = false; private transient MBeanServer server = null; @@ -2488,10 +2487,13 @@ } if (MODELMBEAN_LOGGER.isLoggable(Level.FINER)) { + Vector enabledAttrs = currFilter.getEnabledAttributes(); + String s = (enabledAttrs.size() > 1) ? + "[" + enabledAttrs.firstElement() + ", ...]" : + enabledAttrs.toString(); MODELMBEAN_LOGGER.logp(Level.FINER, RequiredModelMBean.class.getName(), mth, - "Set attribute change filter to " + - currFilter.getEnabledAttributes().firstElement()); + "Set attribute change filter to " + s); } attributeBroadcaster.addNotificationListener(inlistener,currFilter, diff -r 2ccefd4e038f -r db2a63668df3 jdk/test/javax/management/modelmbean/LoggingExceptionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/management/modelmbean/LoggingExceptionTest.java Wed Mar 19 15:17:22 2008 +0100 @@ -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!"); + } +}