jchannel.java

来自「JGRoups源码」· Java 代码 · 共 398 行

JAVA
398
字号
package org.jgroups.jmx;import org.jgroups.*;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Attr;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import javax.management.MBeanServer;import javax.management.MBeanServerFactory;import java.io.Serializable;import java.util.Map;/** * @author Bela Ban * @version $Id: JChannel.java,v 1.14 2006/08/10 08:05:00 belaban Exp $ */public class JChannel implements JChannelMBean {    /** Ref to the original JGroups channel */    org.jgroups.JChannel channel;    String props=null;    String group_name="TestGroup";    String object_name=null;    Log    log=LogFactory.getLog(getClass());    /*flag to indicate whether to receive blocks, if this is set to true, receive_views is set to true*/    private boolean receive_blocks=false;    /*flag to indicate whether to receive local messages     *if this is set to false, the JChannel will not receive messages sent by itself*/    private boolean receive_local_msgs=true;    /*flag to indicate whether the channel will reconnect (reopen) when the exit message is received*/    private boolean auto_reconnect=false;    /*flag t indicate whether the state is supposed to be retrieved after the channel is reconnected     *setting this to true, automatically forces auto_reconnect to true*/    private boolean auto_getstate=false;    private String mbean_server_name=null;    public JChannel() {    }    public JChannel(org.jgroups.JChannel channel) {        this.channel=channel;        setValues();    }    protected final void setValues() {        if(channel != null) {            props=getProperties();            group_name=channel.getClusterName();            receive_blocks=getReceiveBlockEvents();            receive_local_msgs=getReceiveLocalMessages();            auto_reconnect=getAutoReconnect();            auto_getstate=getAutoGetState();        }    }    //void jbossInternalLifecycle(String method) throws Exception;    public org.jgroups.JChannel getChannel() {        return channel;    }    public String getVersion() {        return Version.printDescription();    }    public String getMBeanServerName() {        return mbean_server_name;    }    public void setMBeanServerName(String n) {        this.mbean_server_name=n;    }    public String getProperties() {        props=channel.getProperties();        return props;    }    public void setProperties(String props) {        this.props=props;    }    public String getObjectName() {        return object_name;    }    public void setObjectName(String name) {        object_name=name;    }    public int getNumberOfTasksInTimer() {        return channel.getNumberOfTasksInTimer();    }    public String dumpTimerQueue() {        return channel.dumpTimerQueue();    }    public void setClusterConfig(Element config) {        StringBuffer buffer=new StringBuffer();        NodeList stack=config.getChildNodes();        int length=stack.getLength();        for(int s=0; s < length; s++) {            org.w3c.dom.Node node=stack.item(s);            if(node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)                continue;            Element tag=(Element)node;            String protocol=tag.getTagName();            buffer.append(protocol);            NamedNodeMap attrs=tag.getAttributes();            int attrLength=attrs.getLength();            if(attrLength > 0)                buffer.append('(');            for(int a=0; a < attrLength; a++) {                Attr attr=(Attr)attrs.item(a);                String name=attr.getName();                String value=attr.getValue();                buffer.append(name);                buffer.append('=');                buffer.append(value);                if(a < attrLength - 1)                    buffer.append(';');            }            if(attrLength > 0)                buffer.append(')');            buffer.append(':');        }        // Remove the trailing ':'        buffer.setLength(buffer.length() - 1);        setProperties(buffer.toString());        if(log.isInfoEnabled())            log.info("setting cluster properties from xml to: " + props);    }    public String getGroupName() {        if(channel != null)            group_name=channel.getClusterName();        return group_name;    }    public void setGroupName(String group_name) {        this.group_name=group_name;    }    public String getClusterName() {        return getGroupName();    }    public void setClusterName(String cluster_name) {        setGroupName(cluster_name);    }    public boolean getReceiveBlockEvents() {        if(channel != null)            receive_blocks=((Boolean)channel.getOpt(Channel.BLOCK)).booleanValue();        return receive_blocks;    }    public void setReceiveBlockEvents(boolean flag) {        this.receive_blocks=flag;        if(channel != null)            channel.setOpt(Channel.BLOCK, new Boolean(flag));    }    public boolean getReceiveLocalMessages() {        if(channel != null)            receive_local_msgs=((Boolean)channel.getOpt(Channel.LOCAL)).booleanValue();        return receive_local_msgs;    }    public void setReceiveLocalMessages(boolean flag) {        this.receive_local_msgs=flag;        if(channel != null)            channel.setOpt(Channel.LOCAL, new Boolean(flag));    }    public boolean getAutoReconnect() {        if(channel != null)            auto_reconnect=((Boolean)channel.getOpt(Channel.AUTO_RECONNECT)).booleanValue();        return auto_reconnect;    }    public void setAutoReconnect(boolean flag) {        this.auto_reconnect=flag;        if(channel != null)            channel.setOpt(Channel.AUTO_RECONNECT, new Boolean(flag));    }    public boolean getAutoGetState() {        if(channel != null)            auto_getstate=((Boolean)channel.getOpt(Channel.AUTO_GETSTATE)).booleanValue();        return auto_getstate;    }    public void setAutoGetState(boolean flag) {        this.auto_getstate=flag;        if(channel != null)            channel.setOpt(Channel.AUTO_GETSTATE, new Boolean(flag));    }    public boolean getStatsEnabled() {        return channel.statsEnabled();    }    public void setStatsEnabled(boolean flag) {        channel.enableStats(flag);    }    public Map dumpStats() {        return channel.dumpStats();    }    public void resetStats() {        channel.resetStats();    }    public long getSentMessages() {return channel.getSentMessages();}    public long getSentBytes() {return channel.getSentBytes();}    public long getReceivedMessages() {return channel.getReceivedMessages();}    public long getReceivedBytes() {return channel.getReceivedBytes();}    public void create() throws Exception {        if(channel != null)            channel.close();        channel=new org.jgroups.JChannel(props);        setOptions();        setValues();        MBeanServer server=(MBeanServer)MBeanServerFactory.findMBeanServer(mbean_server_name).get(0);        JmxConfigurator.registerProtocols(server, channel, getObjectName());    }    public void start() throws Exception {        channel.connect(group_name);    }    public void stop() {        if(channel != null)            channel.disconnect();    }    public void destroy() {        MBeanServer server=(MBeanServer)MBeanServerFactory.findMBeanServer(mbean_server_name).get(0);        JmxConfigurator.unregisterProtocols(server, channel, getObjectName());        if(channel != null) {            channel.close();            channel=null;        }    }//    public void jbossInternalLifecycle(String method) throws Exception {//        System.out.println("method: " + method);//        if (method == null)//            throw new IllegalArgumentException("Null method name");////        if (method.equals("create"))//            create();//        else if (method.equals("start"))//            start();//        else if (method.equals("stop"))//            stop();//        else if (method.equals("destroy"))//            destroy();//        else//            throw new IllegalArgumentException("Unknown lifecyle method " + method);//    }    public View getView() {        return channel.getView();    }    public String getViewAsString() {        View v=channel.getView();        return v != null ? v.toString() : "n/a";    }    public Address getLocalAddress() {        return channel.getLocalAddress();    }    public String getLocalAddressAsString() {        Address addr=getLocalAddress();        return addr != null? addr.toString() : "n/a";    }    /** @deprecated Use addChannelListener() instead */    public void setChannelListener(ChannelListener channel_listener) {        if(channel != null)            channel.addChannelListener(channel_listener);    }    public void addChannelListener(ChannelListener listener) {        if(channel != null)            channel.addChannelListener(listener);    }    public void removeChannelListener(ChannelListener l) {        if(channel != null)            channel.removeChannelListener(l);    }    public boolean isOpen() {        return channel.isOpen();    }    public boolean isConnected() {        return channel.isConnected();    }    public int getNumMessages() {        return channel.getNumMessages();    }    public String dumpQueue() {        return channel.dumpQueue();    }    public String printProtocolSpec(boolean include_properties) {        return channel.printProtocolSpec(include_properties);    }    public String toString(boolean print_details) {        return channel.toString(print_details);    }    public void connect(String channel_name) throws ChannelException, ChannelClosedException {        channel.connect(channel_name);    }    public void disconnect() {        channel.disconnect();    }    public void close() {        channel.close();    }    public void shutdown() {        channel.shutdown();    }    public void send(Message msg) throws ChannelNotConnectedException, ChannelClosedException {        channel.send(msg);    }    public void send(Address dst, Address src, Serializable obj) throws ChannelNotConnectedException, ChannelClosedException {        channel.send(dst, src, obj);    }    public void sendToAll(String msg) throws ChannelNotConnectedException, ChannelClosedException {        send(null, null, msg);    }    public void down(Event evt) {        channel.down(evt);    }    public Object receive(long timeout) throws ChannelNotConnectedException, ChannelClosedException, TimeoutException {        return channel.receive(timeout);    }    public Object peek(long timeout) throws ChannelNotConnectedException, ChannelClosedException, TimeoutException {        return channel.peek(timeout);    }    public void blockOk() {        channel.blockOk();    }    public boolean getState(Address target, long timeout) throws ChannelNotConnectedException, ChannelClosedException {        return channel.getState(target, timeout);    }    public void returnState(byte[] state) {        channel.returnState(state);    }    public void returnState(byte[] state, String state_id) {        channel.returnState(state, state_id);    }    private void setOptions() {        channel.setOpt(Channel.BLOCK, new Boolean(this.receive_blocks));        channel.setOpt(Channel.LOCAL, new Boolean(this.receive_local_msgs));        channel.setOpt(Channel.AUTO_RECONNECT, new Boolean(this.auto_reconnect));        channel.setOpt(Channel.AUTO_GETSTATE, new Boolean(this.auto_getstate));    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?