KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > jmx > server > StatefulInfo


1 /*
2  * (c) Rob Gordon 2005
3  */

4 package org.oddjob.jmx.server;
5
6 import javax.management.MBeanAttributeInfo JavaDoc;
7 import javax.management.MBeanException JavaDoc;
8 import javax.management.MBeanNotificationInfo JavaDoc;
9 import javax.management.MBeanOperationInfo JavaDoc;
10 import javax.management.Notification JavaDoc;
11 import javax.management.ReflectionException JavaDoc;
12
13 import org.oddjob.Stateful;
14 import org.oddjob.state.JobStateEvent;
15 import org.oddjob.state.JobStateListener;
16
17 public class StatefulInfo implements InterfaceInfo {
18     
19     public static final String JavaDoc STATE_CHANGE_NOTIF_TYPE = "org.oddjob.statechange";
20
21     public Class JavaDoc interfaceClass() {
22         return Stateful.class;
23     }
24     
25     public MBeanAttributeInfo JavaDoc[] getMBeanAttributeInfo() {
26         return new MBeanAttributeInfo JavaDoc[0];
27     }
28
29     public MBeanOperationInfo JavaDoc[] getMBeanOperationInfo() {
30         return new MBeanOperationInfo JavaDoc[0];
31     }
32     
33     public MBeanNotificationInfo JavaDoc[] getMBeanNotificationInfo() {
34
35         MBeanNotificationInfo JavaDoc[] nInfo = new MBeanNotificationInfo JavaDoc[] {
36                     new MBeanNotificationInfo JavaDoc(
37                             new String JavaDoc[] { STATE_CHANGE_NOTIF_TYPE },
38                             Notification JavaDoc.class.getName(),
39                             "State change notification.") };
40         return nInfo;
41     }
42
43     public InterfaceHandler attach(Object JavaDoc target,
44             OddjobMBean ojmb) {
45         Stateful stateful = (Stateful) target;
46         ServerStateHelper stateHelper = new ServerStateHelper(stateful, ojmb);
47         stateful.addJobStateListener(stateHelper);
48         return stateHelper;
49     }
50     
51     class ServerStateHelper implements JobStateListener, InterfaceHandler {
52
53         private final Stateful stateful;
54         private final OddjobMBean ojmb;
55         
56         /** Remember last event. */
57         private Notification JavaDoc lastNotification;
58
59         ServerStateHelper(Stateful stateful,
60                 OddjobMBean ojmb) {
61             this.stateful = stateful;
62             this.ojmb = ojmb;
63         }
64
65         /*
66          * (non-Javadoc)
67          *
68          * @see org.oddjob.state.AbstractJobStateListener#jobStateChange(org.oddjob.state.JobStateEvent)
69          */

70         public void jobStateChange(final JobStateEvent event) {
71             ojmb.runSynchronized(new Runnable JavaDoc() {
72                 public void run() {
73                     // send a dummy source accross the wire
74
JobStateEvent newEvent = new JobStateEvent(new Object JavaDoc(), event
75                             .getJobState(), event.getTime(), event.getException());
76                     Notification JavaDoc notification = new Notification JavaDoc(
77                             STATE_CHANGE_NOTIF_TYPE, ojmb, ojmb.getNextNotificationNumber());
78                     notification.setUserData(newEvent);
79                     ojmb.sendNotification(notification);
80                     lastNotification = notification;
81                 }
82             });
83         }
84
85         public Object JavaDoc invoke(String JavaDoc actionName, Object JavaDoc[] params, String JavaDoc[] signature) throws MBeanException JavaDoc, ReflectionException JavaDoc {
86             throw new ReflectionException JavaDoc(
87                     new IllegalStateException JavaDoc("invoked for an unknown method."),
88                             actionName);
89         }
90         
91         public Notification JavaDoc[] getLastNotifications() {
92             return new Notification JavaDoc[] { lastNotification };
93         }
94         
95         public void destroy() {
96             stateful.removeJobStateListener(this);
97         }
98     }
99 }
100
Popular Tags