1 package cz.cuni.amis.pogamut.base.utils.jmx.flag;
2
3 import javax.management.MBeanServerConnection;
4 import javax.management.MalformedObjectNameException;
5 import javax.management.Notification;
6 import javax.management.NotificationListener;
7 import javax.management.ObjectName;
8
9 import cz.cuni.amis.pogamut.base.utils.jmx.PogamutJMX;
10 import cz.cuni.amis.utils.flag.Flag;
11
12
13
14
15
16 public class FlagJMXProxy<T> extends Flag<T> {
17
18 NotificationListener listener = null;
19
20 public FlagJMXProxy(final ObjectName source, final MBeanServerConnection mbsc, final String flagName) throws MalformedObjectNameException {
21 ObjectName name = PogamutJMX.getObjectName(source, flagName, PogamutJMX.FLAGS_SUBTYPE);
22 try {
23 listener = new NotificationListener() {
24
25 @Override
26 public void handleNotification(Notification notification, Object handback) {
27 if (notification.getSource().equals(source) && notification.getType().equals(flagName)) {
28 setFlag((T) notification.getUserData());
29 }
30 }
31 };
32
33 T val = (T) mbsc.getAttribute(name, "Flag");
34 setFlag(val);
35
36
37
38
39
40
41
42
43
44
45
46
47 mbsc.addNotificationListener(name, listener, null, mbsc);
48 } catch (Exception ex) {
49 ex.printStackTrace();
50 throw new RuntimeException(ex);
51 }
52 }
53 }