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 ; 7 import org.w3c.dom.Element ; 8 import org.w3c.dom.NamedNodeMap ; 9 import org.w3c.dom.NodeList ; 10 11 import javax.management.MBeanServer ; 12 import javax.management.MBeanServerFactory ; 13 import java.io.Serializable ; 14 import java.util.Map ; 15 16 20 public class JChannel implements JChannelMBean { 21 22 org.jgroups.JChannel channel; 23 String props=null; 24 String group_name="TestGroup"; 25 String object_name=null; 26 Log log=LogFactory.getLog(getClass()); 27 28 29 private boolean receive_blocks=false; 30 32 private boolean receive_local_msgs=true; 33 34 private boolean auto_reconnect=false; 35 37 private boolean auto_getstate=false; 38 39 private String 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 public org.jgroups.JChannel getChannel() { 64 return channel; 65 } 66 67 public String getVersion() { 68 return Version.printDescription(); 69 } 70 71 public String getMBeanServerName() { 72 return mbean_server_name; 73 } 74 75 public void setMBeanServerName(String n) { 76 this.mbean_server_name=n; 77 } 78 79 public String getProperties() { 80 props=channel.getProperties(); 81 return props; 82 } 83 84 public void setProperties(String props) { 85 this.props=props; 86 } 87 88 public String getObjectName() { 89 return object_name; 90 } 91 92 public void setObjectName(String name) { 93 object_name=name; 94 } 95 96 public int getNumberOfTasksInTimer() { 97 return channel.getNumberOfTasksInTimer(); 98 } 99 100 public String dumpTimerQueue() { 101 return channel.dumpTimerQueue(); 102 } 103 104 public void setClusterConfig(Element config) { 105 StringBuilder buffer=new StringBuilder (); 106 NodeList stack=config.getChildNodes(); 107 int length=stack.getLength(); 108 109 for(int s=0; s < length; s++) { 110 org.w3c.dom.Node node=stack.item(s); 111 if(node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE) 112 continue; 113 114 Element tag=(Element )node; 115 String protocol=tag.getTagName(); 116 buffer.append(protocol); 117 NamedNodeMap 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 attr=(Attr )attrs.item(a); 123 String name=attr.getName(); 124 String 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 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 getGroupName() { 143 if(channel != null) 144 group_name=channel.getClusterName(); 145 return group_name; 146 } 147 148 public void setGroupName(String group_name) { 149 this.group_name=group_name; 150 } 151 152 public String getClusterName() { 153 return getGroupName(); 154 } 155 156 public void setClusterName(String cluster_name) { 157 setGroupName(cluster_name); 158 } 159 160 public boolean getReceiveBlockEvents() { 161 if(channel != null) 162 receive_blocks=((Boolean )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 )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 )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 )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 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 { 236 if(channel != null) 237 channel.close(); 238 channel=new org.jgroups.JChannel(props); 239 setOptions(); 240 setValues(); 241 MBeanServer server=(MBeanServer )MBeanServerFactory.findMBeanServer(mbean_server_name).get(0); 242 JmxConfigurator.registerProtocols(server, channel, getObjectName()); 243 } 244 245 public void start() throws Exception { 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 server=(MBeanServer )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 280 281 public View getView() { 282 return channel.getView(); 283 } 284 285 public String 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 getLocalAddressAsString() { 295 Address addr=getLocalAddress(); 296 return addr != null? addr.toString() : "n/a"; 297 } 298 299 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 dumpQueue() { 328 return channel.dumpQueue(); 329 } 330 331 public String printProtocolSpec(boolean include_properties) { 332 return channel.printProtocolSpec(include_properties); 333 } 334 335 public String toString(boolean print_details) { 336 return channel.toString(print_details); 337 } 338 339 public void connect(String 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 obj) throws ChannelNotConnectedException, ChannelClosedException { 360 channel.send(dst, src, obj); 361 } 362 363 public void sendToAll(String 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 receive(long timeout) throws ChannelNotConnectedException, ChannelClosedException, TimeoutException { 372 return channel.receive(timeout); 373 } 374 375 public Object 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 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 |