📄 simpletcpcluster.java
字号:
/* * Copyright 1999,2004-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.catalina.ha.tcp;import java.beans.PropertyChangeSupport;import java.io.IOException;import java.io.Serializable;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.catalina.Container;import org.apache.catalina.Context;import org.apache.catalina.Engine;import org.apache.catalina.Host;import org.apache.catalina.Lifecycle;import org.apache.catalina.LifecycleEvent;import org.apache.catalina.LifecycleException;import org.apache.catalina.LifecycleListener;import org.apache.catalina.Manager;import org.apache.catalina.Valve;import org.apache.catalina.ha.CatalinaCluster;import org.apache.catalina.tribes.Channel;import org.apache.catalina.tribes.ChannelListener;import org.apache.catalina.ha.ClusterListener;import org.apache.catalina.ha.ClusterManager;import org.apache.catalina.ha.ClusterMessage;import org.apache.catalina.ha.ClusterValve;import org.apache.catalina.tribes.Member;import org.apache.catalina.tribes.MembershipListener;import org.apache.catalina.tribes.group.GroupChannel;import org.apache.catalina.ha.session.DeltaManager;import org.apache.catalina.ha.util.IDynamicProperty;import org.apache.catalina.util.LifecycleSupport;import org.apache.catalina.util.StringManager;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.tomcat.util.IntrospectionUtils;/** * A <b>Cluster </b> implementation using simple multicast. Responsible for * setting up a cluster and provides callers with a valid multicast * receiver/sender. * * FIXME remove install/remove/start/stop context dummys * FIXME wrote testcases * * @author Filip Hanik * @author Remy Maucherat * @author Peter Rossbach * @version $Revision: 379550 $, $Date: 2006-02-21 12:06:35 -0600 (Tue, 21 Feb 2006) $ */public class SimpleTcpCluster implements CatalinaCluster, Lifecycle, LifecycleListener, IDynamicProperty, MembershipListener, ChannelListener{ public static Log log = LogFactory.getLog(SimpleTcpCluster.class); // ----------------------------------------------------- Instance Variables /** * Descriptive information about this component implementation. */ protected static final String info = "SimpleTcpCluster/2.2"; public static final String BEFORE_MEMBERREGISTER_EVENT = "before_member_register"; public static final String AFTER_MEMBERREGISTER_EVENT = "after_member_register"; public static final String BEFORE_MANAGERREGISTER_EVENT = "before_manager_register"; public static final String AFTER_MANAGERREGISTER_EVENT = "after_manager_register"; public static final String BEFORE_MANAGERUNREGISTER_EVENT = "before_manager_unregister"; public static final String AFTER_MANAGERUNREGISTER_EVENT = "after_manager_unregister"; public static final String BEFORE_MEMBERUNREGISTER_EVENT = "before_member_unregister"; public static final String AFTER_MEMBERUNREGISTER_EVENT = "after_member_unregister"; public static final String SEND_MESSAGE_FAILURE_EVENT = "send_message_failure"; public static final String RECEIVE_MESSAGE_FAILURE_EVENT = "receive_message_failure"; /** * Group channel. */ protected Channel channel = new GroupChannel(); /** * Name for logging purpose */ protected String clusterImpName = "SimpleTcpCluster"; /** * The string manager for this package. */ protected StringManager sm = StringManager.getManager(Constants.Package); /** * The cluster name to join */ protected String clusterName ; /** * The Container associated with this Cluster. */ protected Container container = null; /** * The lifecycle event support for this component. */ protected LifecycleSupport lifecycle = new LifecycleSupport(this); /** * Has this component been started? */ protected boolean started = false; /** * The property change support for this component. */ protected PropertyChangeSupport support = new PropertyChangeSupport(this); /** * The context name <->manager association for distributed contexts. */ protected Map managers = new HashMap(); private String managerClassName = "org.apache.catalina.ha.session.DeltaManager"; private List valves = new ArrayList(); private org.apache.catalina.ha.ClusterDeployer clusterDeployer; /** * Listeners of messages */ protected List clusterListeners = new ArrayList(); /** * Comment for <code>notifyLifecycleListenerOnFailure</code> */ private boolean notifyLifecycleListenerOnFailure = false; /** * dynamic sender <code>properties</code> */ private Map properties = new HashMap(); private int channelSendOptions = Channel.SEND_OPTIONS_ASYNCHRONOUS | Channel.SEND_OPTIONS_SYNCHRONIZED_ACK | Channel.SEND_OPTIONS_USE_ACK; // ------------------------------------------------------------- Properties public SimpleTcpCluster() { } /** * Return descriptive information about this Cluster implementation and the * corresponding version number, in the format * <code><description>/<version></code>. */ public String getInfo() { return (info); } /** * Set the name of the cluster to join, if no cluster with this name is * present create one. * * @param clusterName * The clustername to join */ public void setClusterName(String clusterName) { this.clusterName = clusterName; } /** * Return the name of the cluster that this Server is currently configured * to operate within. * * @return The name of the cluster associated with this server */ public String getClusterName() { if(clusterName == null && container != null) return container.getName() ; return clusterName; } /** * Set the Container associated with our Cluster * * @param container * The Container to use */ public void setContainer(Container container) { Container oldContainer = this.container; this.container = container; support.firePropertyChange("container", oldContainer, this.container); } /** * Get the Container associated with our Cluster * * @return The Container associated with our Cluster */ public Container getContainer() { return (this.container); } /** * @return Returns the notifyLifecycleListenerOnFailure. */ public boolean isNotifyLifecycleListenerOnFailure() { return notifyLifecycleListenerOnFailure; } /** * @param notifyListenerOnFailure * The notifyLifecycleListenerOnFailure to set. */ public void setNotifyLifecycleListenerOnFailure( boolean notifyListenerOnFailure) { boolean oldNotifyListenerOnFailure = this.notifyLifecycleListenerOnFailure; this.notifyLifecycleListenerOnFailure = notifyListenerOnFailure; support.firePropertyChange("notifyLifecycleListenerOnFailure", oldNotifyListenerOnFailure, this.notifyLifecycleListenerOnFailure); } public String getManagerClassName() { if(managerClassName != null) return managerClassName; return (String)getProperty("manager.className"); } public void setManagerClassName(String managerClassName) { this.managerClassName = managerClassName; } /** * Add cluster valve * Cluster Valves are only add to container when cluster is started! * @param valve The new cluster Valve. */ public void addValve(Valve valve) { if (valve instanceof ClusterValve) valves.add(valve); } /** * get all cluster valves * @return current cluster valves */ public Valve[] getValves() { return (Valve[]) valves.toArray(new Valve[valves.size()]); } /** * Get the cluster listeners associated with this cluster. If this Array has * no listeners registered, a zero-length array is returned. */ public ClusterListener[] findClusterListeners() { if (clusterListeners.size() > 0) { ClusterListener[] listener = new ClusterListener[clusterListeners.size()]; clusterListeners.toArray(listener); return listener; } else return new ClusterListener[0]; } /** * add cluster message listener and register cluster to this listener * * @see org.apache.catalina.ha.CatalinaCluster#addClusterListener(org.apache.catalina.ha.MessageListener) */ public void addClusterListener(ClusterListener listener) { if (listener != null && !clusterListeners.contains(listener)) { clusterListeners.add(listener); listener.setCluster(this); } } /**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -