⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpletcpcluster.java

📁 精通tomcat书籍原代码,希望大家共同学习
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
     * remove message listener and deregister Cluster from listener     *      * @see org.apache.catalina.ha.CatalinaCluster#removeClusterListener(org.apache.catalina.ha.MessageListener)     */    public void removeClusterListener(ClusterListener listener) {        if (listener != null) {            clusterListeners.remove(listener);            listener.setCluster(null);        }    }    /**     * get current Deployer     */    public org.apache.catalina.ha.ClusterDeployer getClusterDeployer() {        return clusterDeployer;    }    /**     * set a new Deployer, must be set before cluster started!     */    public void setClusterDeployer(            org.apache.catalina.ha.ClusterDeployer clusterDeployer) {        this.clusterDeployer = clusterDeployer;    }    public void setChannel(Channel channel) {        this.channel = channel;    }    /**     * has members     */    public boolean hasMembers() {        return channel.hasMembers();    }        /**     * Get all current cluster members     * @return all members or empty array      */    public Member[] getMembers() {        return channel.getMembers();    }    /**     * Return the member that represents this node.     *      * @return Member     */    public Member getLocalMember() {        return channel.getLocalMember(true);    }    // ------------------------------------------------------------- dynamic    // manager property handling    /**     * JMX hack to direct use at jconsole     *      * @param name     * @param value     */    public void setProperty(String name, String value) {        setProperty(name, (Object) value);    }    /**     * set config attributes with reflect and propagate to all managers     *      * @param name     * @param value     */    public void setProperty(String name, Object value) {        if (log.isTraceEnabled())            log.trace(sm.getString("SimpleTcpCluster.setProperty", name, value,                    properties.get(name)));        properties.put(name, value);        if(started) {            // FIXME Hmm, is that correct when some DeltaManagers are direct configured inside Context?            // Why we not support it for other elements, like sender, receiver or membership?            // Must we restart element after change?            if (name.startsWith("manager")) {                String key = name.substring("manager".length() + 1);                String pvalue = value.toString();                for (Iterator iter = managers.values().iterator(); iter.hasNext();) {                    Manager manager = (Manager) iter.next();                    if(manager instanceof DeltaManager && ((ClusterManager) manager).isDefaultMode()) {                        IntrospectionUtils.setProperty(manager, key, pvalue );                    }                }            }         }    }    /**     * get current config     *      * @param key     * @return The property     */    public Object getProperty(String key) {        if (log.isTraceEnabled())            log.trace(sm.getString("SimpleTcpCluster.getProperty", key));        return properties.get(key);    }    /**     * Get all properties keys     *      * @return An iterator over the property names.     */    public Iterator getPropertyNames() {        return properties.keySet().iterator();    }    /**     * remove a configured property.     *      * @param key     */    public void removeProperty(String key) {        properties.remove(key);    }    /**     * transfer properties from cluster configuration to subelement bean.     * @param prefix     * @param bean     */    protected void transferProperty(String prefix, Object bean) {        if (prefix != null) {            for (Iterator iter = getPropertyNames(); iter.hasNext();) {                String pkey = (String) iter.next();                if (pkey.startsWith(prefix)) {                    String key = pkey.substring(prefix.length() + 1);                    Object value = getProperty(pkey);                    IntrospectionUtils.setProperty(bean, key, value.toString());                }            }        }    }    // --------------------------------------------------------- Public Methods    /**     * @return Returns the managers.     */    public Map getManagers() {        return managers;    }    public Channel getChannel() {        return channel;    }    /**     * Create new Manager without add to cluster (comes with start the manager)     *      * @param name     *            Context Name of this manager     * @see org.apache.catalina.Cluster#createManager(java.lang.String)     * @see #addManager(String, Manager)     * @see DeltaManager#start()     */    public synchronized Manager createManager(String name) {        if (log.isDebugEnabled()) log.debug("Creating ClusterManager for context " + name + " using class " + getManagerClassName());        Manager manager = null;        try {            manager = (Manager) getClass().getClassLoader().loadClass(getManagerClassName()).newInstance();        } catch (Exception x) {            log.error("Unable to load class for replication manager", x);            manager = new org.apache.catalina.ha.session.DeltaManager();        } finally {            if(manager != null) {                manager.setDistributable(true);                if (manager instanceof ClusterManager) {                    ClusterManager cmanager = (ClusterManager) manager ;                    cmanager.setDefaultMode(true);                    cmanager.setName(getManagerName(name,manager));                    cmanager.setCluster(this);                }            }        }        return manager;    }    /**     * remove an application form cluster replication bus     *      * @see org.apache.catalina.ha.CatalinaCluster#removeManager(java.lang.String,Manager)     */    public void removeManager(String name,Manager manager) {        if (manager != null) {            // Notify our interested LifecycleListeners            lifecycle.fireLifecycleEvent(BEFORE_MANAGERUNREGISTER_EVENT,manager);            managers.remove(getManagerName(name,manager));            if (manager instanceof ClusterManager) ((ClusterManager) manager).setCluster(null);            // Notify our interested LifecycleListeners            lifecycle.fireLifecycleEvent(AFTER_MANAGERUNREGISTER_EVENT, manager);        }    }    /**     * add an application to cluster replication bus     *      * @param name     *            of the context     * @param manager     *            manager to register     * @see org.apache.catalina.ha.CatalinaCluster#addManager(java.lang.String,     *      org.apache.catalina.Manager)     */    public void addManager(String name, Manager manager) {        if (!manager.getDistributable()) {            log.warn("Manager with name " + name + " is not distributable, can't add as cluster manager");            return;        }        // Notify our interested LifecycleListeners        lifecycle.fireLifecycleEvent(BEFORE_MANAGERREGISTER_EVENT, manager);        String clusterName = getManagerName(name, manager);        if (manager instanceof ClusterManager) {            ClusterManager cmanager = (ClusterManager) manager ;            cmanager.setName(clusterName);            cmanager.setCluster(this);            if(cmanager.isDefaultMode()) transferProperty("manager",cmanager);        }        managers.put(clusterName, manager);        // Notify our interested LifecycleListeners        lifecycle.fireLifecycleEvent(AFTER_MANAGERREGISTER_EVENT, manager);    }    /**     * @param name     * @param manager     * @return     */    public String getManagerName(String name, Manager manager) {        String clusterName = name ;        if(getContainer() instanceof Engine) {            Container context = manager.getContainer() ;            if(context != null && context instanceof Context) {                Container host = ((Context)context).getParent();                if(host != null && host instanceof Host)                    clusterName = host.getName()  + name ;            }        }        return clusterName;    }    /*     * Get Manager     *      * @see org.apache.catalina.ha.CatalinaCluster#getManager(java.lang.String)     */    public Manager getManager(String name) {        return (Manager) managers.get(name);    }        // ------------------------------------------------------ Lifecycle Methods    /**     * Execute a periodic task, such as reloading, etc. This method will be     * invoked inside the classloading context of this container. Unexpected     * throwables will be caught and logged.     * @see org.apache.catalina.ha.deploy.FarmWarDeployer#backgroundProcess()     * @see ReplicationTransmitter#backgroundProcess()     */    public void backgroundProcess() {        if (clusterDeployer != null) clusterDeployer.backgroundProcess();        //send a heartbeat through the channel        if ( channel !=null ) channel.heartbeat();    }    /**     * Add a lifecycle event listener to this component.     *      * @param listener     *            The listener to add     */    public void addLifecycleListener(LifecycleListener listener) {        lifecycle.addLifecycleListener(listener);    }    /**     * Get the lifecycle listeners associated with this lifecycle. If this     * Lifecycle has no listeners registered, a zero-length array is returned.     */    public LifecycleListener[] findLifecycleListeners() {        return lifecycle.findLifecycleListeners();    }    /**     * Remove a lifecycle event listener from this component.     *      * @param listener     *            The listener to remove     */    public void removeLifecycleListener(LifecycleListener listener) {        lifecycle.removeLifecycleListener(listener);    }    /**     * Use as base to handle start/stop/periodic Events from host. Currently     * only log the messages as trace level.     * 

⌨️ 快捷键说明

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