pero        2005/07/16 14:04:37

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/tcp
                        SimpleTcpCluster.java
  Log:
  Open Cluster APi that Context can have its own Cluster Manager config.
  
  Revision  Changes    Path
  1.71      +56 -12    
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
  
  Index: SimpleTcpCluster.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- SimpleTcpCluster.java     8 Jul 2005 20:50:30 -0000       1.70
  +++ SimpleTcpCluster.java     16 Jul 2005 21:04:37 -0000      1.71
  @@ -32,6 +32,9 @@
   import javax.management.modelmbean.ModelMBean;
   
   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;
  @@ -335,11 +338,20 @@
           this.membershipService = membershipService;
       }
   
  +    /**
  +     * Add cluster valve 
  +     * Cluster Valves are only add to container when cluster is started!
  +     * @param 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()]);
       }
  @@ -392,6 +404,10 @@
           this.clusterDeployer = clusterDeployer;
       }
   
  +    /**
  +     * Get all current cluster members
  +     * @return all members or empty array 
  +     */
       public Member[] getMembers() {
           Member[] members = membershipService.getMembers();
           if(members != null) {
  @@ -437,12 +453,17 @@
   
           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();
  -                    IntrospectionUtils.setProperty(manager, key, pvalue );
  +                    if(manager instanceof DeltaManager && ((ClusterManager) 
manager).isDefaultMode()) {
  +                        IntrospectionUtils.setProperty(manager, key, pvalue 
);
  +                    }
                   }
               } 
           }
  @@ -529,8 +550,10 @@
               if(manager != null) {
                   manager.setDistributable(true);
                   if (manager instanceof ClusterManager) {
  -                    ((ClusterManager) manager).setName(name);
  -                    ((ClusterManager) manager).setCluster(this);
  +                    ClusterManager cmanager = (ClusterManager) manager ;
  +                    cmanager.setDefaultMode(true);
  +                    cmanager.setName(getManagerName(name,manager));
  +                    cmanager.setCluster(this);
                   }
               }
           }
  @@ -540,15 +563,14 @@
       /**
        * remove an application form cluster replication bus
        * 
  -     * @see 
org.apache.catalina.cluster.CatalinaCluster#removeManager(java.lang.String)
  +     * @see 
org.apache.catalina.cluster.CatalinaCluster#removeManager(java.lang.String,Manager)
        */
  -    public void removeManager(String name) {
  -        Manager manager = getManager(name);
  +    public void removeManager(String name,Manager manager) {
           if (manager != null) {
               // Notify our interested LifecycleListeners
               lifecycle.fireLifecycleEvent(BEFORE_MANAGERUNREGISTER_EVENT,
                       manager);
  -            managers.remove(name);
  +            managers.remove(getManagerName(name,manager));
               if (manager instanceof ClusterManager)
                   ((ClusterManager) manager).setCluster(null);
               // Notify our interested LifecycleListeners
  @@ -575,16 +597,37 @@
           }
           // Notify our interested LifecycleListeners
           lifecycle.fireLifecycleEvent(BEFORE_MANAGERREGISTER_EVENT, manager);
  +        String clusterName = getManagerName(name, manager);
           if (manager instanceof ClusterManager) {
  -            ((ClusterManager) manager).setName(name);
  -            ((ClusterManager) manager).setCluster(this);
  +            ClusterManager cmanager = (ClusterManager) manager ;
  +            cmanager.setName(clusterName);
  +            cmanager.setCluster(this);
  +            if(cmanager.isDefaultMode())
  +                transferProperty("manager",cmanager);
           }
  -        transferProperty("manager",manager);
  -        managers.put(name, manager);
  +        managers.put(clusterName, manager);
           // Notify our interested LifecycleListeners
           lifecycle.fireLifecycleEvent(AFTER_MANAGERREGISTER_EVENT, manager);
       }
   
  +    /**
  +     * @param name
  +     * @param manager
  +     * @return
  +     */
  +    private 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
        * 
  @@ -928,6 +971,7 @@
           if (clusterDeployer != null) {
               clusterDeployer.stop();
           }
  +        // FIXME remove registered managers!!
           if(membershipService != null) {
               membershipService.stop();
               membershipService.removeMembershipListener();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to