KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jgroups > jmx > JChannel


1 package org.jgroups.jmx;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.jgroups.*;
6 import org.w3c.dom.Attr JavaDoc;
7 import org.w3c.dom.Element JavaDoc;
8 import org.w3c.dom.NamedNodeMap JavaDoc;
9 import org.w3c.dom.NodeList JavaDoc;
10
11 import javax.management.MBeanServer JavaDoc;
12 import javax.management.MBeanServerFactory JavaDoc;
13 import java.io.Serializable JavaDoc;
14 import java.util.Map JavaDoc;
15
16 /**
17  * @author Bela Ban
18  * @version $Id: JChannel.java,v 1.17 2007/06/06 11:02:32 belaban Exp $
19  */

20 public class JChannel implements JChannelMBean {
21     /** Ref to the original JGroups channel */
22     org.jgroups.JChannel channel;
23     String JavaDoc props=null;
24     String JavaDoc group_name="TestGroup";
25     String JavaDoc object_name=null;
26     Log log=LogFactory.getLog(getClass());
27
28     /*flag to indicate whether to receive blocks, if this is set to true, receive_views is set to true*/
29     private boolean receive_blocks=false;
30     /*flag to indicate whether to receive local messages
31      *if this is set to false, the JChannel will not receive messages sent by itself*/

32     private boolean receive_local_msgs=true;
33     /*flag to indicate whether the channel will reconnect (reopen) when the exit message is received*/
34     private boolean auto_reconnect=false;
35     /*flag t indicate whether the state is supposed to be retrieved after the channel is reconnected
36      *setting this to true, automatically forces auto_reconnect to true*/

37     private boolean auto_getstate=false;
38
39     private String JavaDoc mbean_server_name=null;
40
41
42     public JChannel() {
43     }
44
45     public JChannel(org.jgroups.JChannel channel) {
46         this.channel=channel;
47         setValues();
48     }
49
50
51     protected final void setValues() {
52         if(channel != null) {
53             props=getProperties();
54             group_name=channel.getClusterName();
55             receive_blocks=getReceiveBlockEvents();
56             receive_local_msgs=getReceiveLocalMessages();
57             auto_reconnect=getAutoReconnect();
58             auto_getstate=getAutoGetState();
59         }
60     }
61
62     //void jbossInternalLifecycle(String method) throws Exception;
63
public org.jgroups.JChannel getChannel() {
64         return channel;
65     }
66
67     public String JavaDoc getVersion() {
68         return Version.printDescription();
69     }
70
71     public String JavaDoc getMBeanServerName() {
72         return mbean_server_name;
73     }
74
75     public void setMBeanServerName(String JavaDoc n) {
76         this.mbean_server_name=n;
77     }
78
79     public String JavaDoc getProperties() {
80         props=channel.getProperties();
81         return props;
82     }
83
84     public void setProperties(String JavaDoc props) {
85         this.props=props;
86     }
87
88     public String JavaDoc getObjectName() {
89         return object_name;
90     }
91
92     public void setObjectName(String JavaDoc name) {
93         object_name=name;
94     }
95
96     public int getNumberOfTasksInTimer() {
97         return channel.getNumberOfTasksInTimer();
98     }
99
100     public String JavaDoc dumpTimerQueue() {
101         return channel.dumpTimerQueue();
102     }
103
104     public void setClusterConfig(Element JavaDoc config) {
105         StringBuilder JavaDoc buffer=new StringBuilder JavaDoc();
106         NodeList JavaDoc stack=config.getChildNodes();
107         int length=stack.getLength();
108
109         for(int s=0; s < length; s++) {
110             org.w3c.dom.Node JavaDoc node=stack.item(s);
111             if(node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)
112                 continue;
113
114             Element JavaDoc tag=(Element JavaDoc)node;
115             String JavaDoc protocol=tag.getTagName();
116             buffer.append(protocol);
117             NamedNodeMap JavaDoc attrs=tag.getAttributes();
118             int attrLength=attrs.getLength();
119             if(attrLength > 0)
120                 buffer.append('(');
121             for(int a=0; a < attrLength; a++) {
122                 Attr JavaDoc attr=(Attr JavaDoc)attrs.item(a);
123                 String JavaDoc name=attr.getName();
124                 String JavaDoc value=attr.getValue();
125                 buffer.append(name);
126                 buffer.append('=');
127                 buffer.append(value);
128                 if(a < attrLength - 1)
129                     buffer.append(';');
130             }
131             if(attrLength > 0)
132                 buffer.append(')');
133             buffer.append(':');
134         }
135         // Remove the trailing ':'
136
buffer.setLength(buffer.length() - 1);
137         setProperties(buffer.toString());
138         if(log.isDebugEnabled())
139             log.debug("setting cluster properties from xml to: " + props);
140     }
141
142     public String JavaDoc getGroupName() {
143         if(channel != null)
144             group_name=channel.getClusterName();
145         return group_name;
146     }
147
148     public void setGroupName(String JavaDoc group_name) {
149         this.group_name=group_name;
150     }
151
152     public String JavaDoc getClusterName() {
153         return getGroupName();
154     }
155
156     public void setClusterName(String JavaDoc cluster_name) {
157         setGroupName(cluster_name);
158     }
159
160     public boolean getReceiveBlockEvents() {
161         if(channel != null)
162             receive_blocks=((Boolean JavaDoc)channel.getOpt(Channel.BLOCK)).booleanValue();
163         return receive_blocks;
164     }
165
166     public void setReceiveBlockEvents(boolean flag) {
167         this.receive_blocks=flag;
168         if(channel != null)
169             channel.setOpt(Channel.BLOCK, Boolean.valueOf(flag));
170     }
171
172     public boolean getReceiveLocalMessages() {
173         if(channel != null)
174             receive_local_msgs=((Boolean JavaDoc)channel.getOpt(Channel.LOCAL)).booleanValue();
175         return receive_local_msgs;
176     }
177
178     public void setReceiveLocalMessages(boolean flag) {
179         this.receive_local_msgs=flag;
180         if(channel != null)
181             channel.setOpt(Channel.LOCAL, Boolean.valueOf(flag));
182     }
183
184     public boolean getAutoReconnect() {
185         if(channel != null)
186             auto_reconnect=((Boolean JavaDoc)channel.getOpt(Channel.AUTO_RECONNECT)).booleanValue();
187         return auto_reconnect;
188     }
189
190     public void setAutoReconnect(boolean flag) {
191         this.auto_reconnect=flag;
192         if(channel != null) {
193             channel.setOpt(Channel.AUTO_RECONNECT, Boolean.valueOf(flag));
194         }
195     }
196
197     public boolean getAutoGetState() {
198         if(channel != null)
199             auto_getstate=((Boolean JavaDoc)channel.getOpt(Channel.AUTO_GETSTATE)).booleanValue();
200         return auto_getstate;
201     }
202
203     public void setAutoGetState(boolean flag) {
204         this.auto_getstate=flag;
205         if(channel != null)
206             channel.setOpt(Channel.AUTO_GETSTATE, Boolean.valueOf(flag));
207     }
208
209     public boolean getStatsEnabled() {
210         return channel.statsEnabled();
211     }
212
213     public void setStatsEnabled(boolean flag) {
214         channel.enableStats(flag);
215     }
216
217     public Map JavaDoc dumpStats() {
218         return channel.dumpStats();
219     }
220
221     public void resetStats() {
222         channel.resetStats();
223     }
224
225     public long getSentMessages() {return channel.getSentMessages();}
226     public long getSentBytes() {return channel.getSentBytes();}
227     public long getReceivedMessages() {return channel.getReceivedMessages();}
228     public long getReceivedBytes() {return channel.getReceivedBytes();}
229
230
231     public int getTimerThreads() {
232         return channel.getTimerThreads();
233     }
234
235     public void create() throws Exception JavaDoc {
236         if(channel != null)
237             channel.close();
238         channel=new org.jgroups.JChannel(props);
239         setOptions();
240         setValues();
241         MBeanServer JavaDoc server=(MBeanServer JavaDoc)MBeanServerFactory.findMBeanServer(mbean_server_name).get(0);
242         JmxConfigurator.registerProtocols(server, channel, getObjectName());
243     }
244
245     public void start() throws Exception JavaDoc {
246         channel.connect(group_name);
247     }
248
249     public void stop() {
250         if(channel != null)
251             channel.disconnect();
252     }
253
254     public void destroy() {
255         MBeanServer JavaDoc server=(MBeanServer JavaDoc)MBeanServerFactory.findMBeanServer(mbean_server_name).get(0);
256         JmxConfigurator.unregisterProtocols(server, channel, getObjectName());
257         if(channel != null) {
258             channel.close();
259             channel=null;
260         }
261     }
262
263 // public void jbossInternalLifecycle(String method) throws Exception {
264
// System.out.println("method: " + method);
265
// if (method == null)
266
// throw new IllegalArgumentException("Null method name");
267
//
268
// if (method.equals("create"))
269
// create();
270
// else if (method.equals("start"))
271
// start();
272
// else if (method.equals("stop"))
273
// stop();
274
// else if (method.equals("destroy"))
275
// destroy();
276
// else
277
// throw new IllegalArgumentException("Unknown lifecyle method " + method);
278
// }
279

280
281     public View getView() {
282         return channel.getView();
283     }
284
285     public String JavaDoc getViewAsString() {
286         View v=channel.getView();
287         return v != null ? v.toString() : "n/a";
288     }
289
290     public Address getLocalAddress() {
291         return channel.getLocalAddress();
292     }
293
294     public String JavaDoc getLocalAddressAsString() {
295         Address addr=getLocalAddress();
296         return addr != null? addr.toString() : "n/a";
297     }
298
299     /** @deprecated Use addChannelListener() instead */
300     public void setChannelListener(ChannelListener channel_listener) {
301         if(channel != null)
302             channel.addChannelListener(channel_listener);
303     }
304
305     public void addChannelListener(ChannelListener listener) {
306         if(channel != null)
307             channel.addChannelListener(listener);
308     }
309
310     public void removeChannelListener(ChannelListener l) {
311         if(channel != null)
312             channel.removeChannelListener(l);
313     }
314
315     public boolean isOpen() {
316         return channel.isOpen();
317     }
318
319     public boolean isConnected() {
320         return channel.isConnected();
321     }
322
323     public int getNumMessages() {
324         return channel.getNumMessages();
325     }
326
327     public String JavaDoc dumpQueue() {
328         return channel.dumpQueue();
329     }
330
331     public String JavaDoc printProtocolSpec(boolean include_properties) {
332         return channel.printProtocolSpec(include_properties);
333     }
334
335     public String JavaDoc toString(boolean print_details) {
336         return channel.toString(print_details);
337     }
338
339     public void connect(String JavaDoc channel_name) throws ChannelException {
340         channel.connect(channel_name);
341     }
342
343     public void disconnect() {
344         channel.disconnect();
345     }
346
347     public void close() {
348         channel.close();
349     }
350
351     public void shutdown() {
352         channel.shutdown();
353     }
354
355     public void send(Message msg) throws ChannelNotConnectedException, ChannelClosedException {
356         channel.send(msg);
357     }
358
359     public void send(Address dst, Address src, Serializable JavaDoc obj) throws ChannelNotConnectedException, ChannelClosedException {
360         channel.send(dst, src, obj);
361     }
362
363     public void sendToAll(String JavaDoc msg) throws ChannelNotConnectedException, ChannelClosedException {
364         send(null, null, msg);
365     }
366
367     public void down(Event evt) {
368         channel.down(evt);
369     }
370
371     public Object JavaDoc receive(long timeout) throws ChannelNotConnectedException, ChannelClosedException, TimeoutException {
372         return channel.receive(timeout);
373     }
374
375     public Object JavaDoc peek(long timeout) throws ChannelNotConnectedException, ChannelClosedException, TimeoutException {
376         return channel.peek(timeout);
377     }
378
379     public void blockOk() {
380         channel.blockOk();
381     }
382
383     public boolean getState(Address target, long timeout) throws ChannelNotConnectedException, ChannelClosedException {
384         return channel.getState(target, timeout);
385     }
386
387     public void returnState(byte[] state) {
388         channel.returnState(state);
389     }
390
391     public void returnState(byte[] state, String JavaDoc state_id) {
392         channel.returnState(state, state_id);
393     }
394
395     private void setOptions() {
396         channel.setOpt(Channel.BLOCK, Boolean.valueOf(this.receive_blocks));
397         channel.setOpt(Channel.LOCAL, Boolean.valueOf(this.receive_local_msgs));
398         channel.setOpt(Channel.AUTO_RECONNECT, Boolean.valueOf(this.auto_reconnect));
399         channel.setOpt(Channel.AUTO_GETSTATE, Boolean.valueOf(this.auto_getstate));
400     }
401
402 }
403
Popular Tags