1 8 9 package mx4j.tools.remote.local; 10 11 import java.io.IOException ; 12 import java.util.HashSet ; 13 import java.util.Set ; 14 import javax.management.InstanceNotFoundException ; 15 import javax.management.ListenerNotFoundException ; 16 import javax.management.MBeanServer ; 17 import javax.management.NotificationFilter ; 18 import javax.management.NotificationListener ; 19 import javax.management.ObjectName ; 20 import javax.security.auth.Subject ; 21 22 import mx4j.remote.NotificationTuple; 23 import mx4j.tools.remote.AbstractServerInvoker; 24 25 28 class LocalServerInvoker extends AbstractServerInvoker implements LocalConnection 29 { 30 private final Set listeners = new HashSet (); 31 32 LocalServerInvoker(MBeanServer server) 33 { 34 super(server); 35 } 36 37 public void close() throws IOException 38 { 39 NotificationTuple[] tuples = null; 40 synchronized (listeners) 41 { 42 tuples = (NotificationTuple[])listeners.toArray(new NotificationTuple[listeners.size()]); 43 listeners.clear(); 44 } 45 for (int i = 0; i < tuples.length; i++) 46 { 47 NotificationTuple tuple = tuples[i]; 48 try 49 { 50 getServer().removeNotificationListener(tuple.getObjectName(), tuple.getNotificationListener(), tuple.getNotificationFilter(), tuple.getHandback()); 51 } 52 catch (InstanceNotFoundException ignored) 53 { 54 } 55 catch (ListenerNotFoundException ignored) 56 { 57 } 58 } 59 } 60 61 public void addNotificationListener(ObjectName observed, NotificationListener listener, NotificationFilter filter, Object handback, Subject delegate) 62 throws InstanceNotFoundException , IOException 63 { 64 NotificationTuple tuple = new NotificationTuple(observed, listener, filter, handback); 65 synchronized (listeners) 66 { 67 listeners.add(tuple); 68 } 69 getServer().addNotificationListener(observed, listener, filter, handback); 70 } 71 72 public void removeNotificationListener(ObjectName observed, NotificationListener listener, Subject delegate) 73 throws InstanceNotFoundException , ListenerNotFoundException , IOException 74 { 75 NotificationTuple tuple = new NotificationTuple(observed, listener); 76 synchronized (listeners) 77 { 78 listeners.remove(tuple); 79 } 80 getServer().removeNotificationListener(observed, listener); 81 } 82 83 public void removeNotificationListener(ObjectName observed, NotificationListener listener, NotificationFilter filter, Object handback, Subject delegate) 84 throws InstanceNotFoundException , ListenerNotFoundException , IOException 85 { 86 NotificationTuple tuple = new NotificationTuple(observed, listener, filter, handback); 87 synchronized (listeners) 88 { 89 listeners.remove(tuple); 90 } 91 getServer().removeNotificationListener(observed, listener, filter, handback); 92 } 93 } 94 | Popular Tags |