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]