javax.management woes, again

Andrew Haley aph@redhat.com
Thu May 3 17:20:00 GMT 2007


Fixes https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=236541.
Andrew.
2007年05月03日 Andrew Haley <aph@redhat.com>
	* gnu/javax/management/Server.java (Server): Record the delegate.
	(registerMBean): Notify the delegate.
	(unregisterMBean): Likewise.
	(notify): New method.
Index: Server.java
===================================================================
--- Server.java	(revision 124185)
+++ Server.java	(working copy)
@@ -53,6 +53,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 import javax.management.Attribute;
 import javax.management.AttributeList;
@@ -75,6 +76,7 @@
 import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
 import javax.management.MBeanServerDelegate;
+import javax.management.MBeanServerNotification;
 import javax.management.MBeanTrustPermission;
 import javax.management.NotCompliantMBeanException;
 import javax.management.Notification;
@@ -137,6 +139,15 @@
 private Map listeners;
 
 /**
+ * An MBean that emits notifications when an MBean is registered and
+ * unregistered with this server.
+ *
+ */
+ private final MBeanServerDelegate delegate;
+
+ static private final AtomicLong sequenceNumber = new AtomicLong();
+
+ /**
 * Initialise the delegate name.
 */
 static
@@ -171,6 +182,7 @@
 {
 this.defaultDomain = defaultDomain;
 this.outer = outer;
+ this.delegate = delegate;
 try
 {
 	registerMBean(delegate, DELEGATE_NAME);
@@ -1703,6 +1715,7 @@
 beans.put(name, new ServerInfo(obji, obj));
 if (register != null)
 register.postRegister(Boolean.TRUE);
+ notify(name, MBeanServerNotification.REGISTRATION_NOTIFICATION);
 return obji;
 }
 
@@ -2088,6 +2101,7 @@
 	 }
 }
 beans.remove(name);
+ notify(name, MBeanServerNotification.UNREGISTRATION_NOTIFICATION);
 if (register != null)
 register.postDeregister();
 }
@@ -2149,6 +2163,13 @@
 }
 }
 
+ private void notify(ObjectName name, String type)
+ {
+ delegate.sendNotification
+	(new MBeanServerNotification
+	 (type, DELEGATE_NAME, sequenceNumber.getAndIncrement(), name));
+ }
+
 /**
 * Notification listener which removes direct references
 * to beans.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /