Author: azeez Date: Thu May 24 08:09:17 2007 New Revision: 541316 URL: http://svn.apache.org/viewvc?view=rev&rev=541316 Log: Functionality for sending control messages between axis2 nodes in a cluster
At the moment, I've identified 2 control messages; 1. GetStateCommand - Sent by a node which is joining a cluster which already has one or more members. In such a case, it will send a request for the latest node to a randomly selected member, and will wait till a reply is reveived. If such a reply is not received, it will retry by sending the same request to another member, or until there are no members in the cluster. Unless a GetStateResponseCommand message is received, a node cannot start successfuly and join a cluster, unless it is the very first node which is joining the cluster. 2. GetStateResponseCommand - Sent by the node which receives the GetStateCommand. It will populate this message with the latest state and send it out to the requester. Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ControlCommand.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateCommand.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateResponseCommand.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesControlCommandProcessor.java Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesMembershipListener.java webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ControlCommand.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ControlCommand.java?view=auto&rev=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ControlCommand.java (added) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/ControlCommand.java Thu May 24 08:09:17 2007 @@ -0,0 +1,32 @@ +/* + * Copyright 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.axis2.clustering.control; + +import org.apache.axis2.clustering.ClusteringCommand; +import org.apache.axis2.clustering.ClusteringFault; +import org.apache.axis2.context.ConfigurationContext; + +/** + * + */ +public abstract class ControlCommand extends ClusteringCommand { + public int getCommandType() { + //TODO: Method implementation + return 0; + } + + public abstract void execute(ConfigurationContext configurationContext) throws ClusteringFault; +} Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateCommand.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateCommand.java?view=auto&rev=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateCommand.java (added) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateCommand.java Thu May 24 08:09:17 2007 @@ -0,0 +1,30 @@ +/* + * Copyright 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.axis2.clustering.control; + +import org.apache.axis2.clustering.ClusteringFault; +import org.apache.axis2.context.ConfigurationContext; + +/** + * + */ +public class GetStateCommand extends ControlCommand { + + public void execute(ConfigurationContext configurationContext) throws ClusteringFault { + //TODO: Method implementation + System.err.println("####### Going to send state to Member"); + } +} Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateResponseCommand.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateResponseCommand.java?view=auto&rev=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateResponseCommand.java (added) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/GetStateResponseCommand.java Thu May 24 08:09:17 2007 @@ -0,0 +1,32 @@ +/* + * Copyright 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.axis2.clustering.control; + +import org.apache.axis2.clustering.ClusteringConstants; +import org.apache.axis2.clustering.ClusteringFault; +import org.apache.axis2.context.ConfigurationContext; + +/** + * + */ +public class GetStateResponseCommand extends ControlCommand { + + public void execute(ConfigurationContext configurationContext) throws ClusteringFault { + //TODO: Method implementation + configurationContext. + setNonReplicableProperty(ClusteringConstants.GET_STATE_RESPONSE_RECEIVED, "true"); + } +} Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java Thu May 24 08:09:17 2007 @@ -34,11 +34,13 @@ private static final Log log = LogFactory.getLog(ReplicationHandler.class); public InvocationResponse invoke(MessageContext msgContext) throws AxisFault { + log.debug("Going to replicate state on invoke"); replicateState(msgContext); return InvocationResponse.CONTINUE; } public void flowComplete(MessageContext msgContext) { + log.debug("Going to replicate state on flowComplete"); try { replicateState(msgContext); } catch (Exception e) { Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java Thu May 24 08:09:17 2007 @@ -17,6 +17,9 @@ package org.apache.axis2.clustering.tribes; import org.apache.axis2.clustering.ClusteringFault; +import org.apache.axis2.clustering.control.ControlCommand; +import org.apache.axis2.clustering.control.GetStateCommand; +import org.apache.axis2.clustering.control.GetStateResponseCommand; import org.apache.axis2.clustering.configuration.ConfigurationClusteringCommand; import org.apache.axis2.clustering.configuration.DefaultConfigurationManager; import org.apache.axis2.clustering.context.ContextClusteringCommand; @@ -31,13 +34,16 @@ public class ChannelListener implements org.apache.catalina.tribes.ChannelListener { private static final Log log = LogFactory.getLog(ChannelListener.class); - private DefaultContextManager contextManager = null; - private DefaultConfigurationManager configurationManager = null; + private DefaultContextManager contextManager; + private DefaultConfigurationManager configurationManager; + private TribesControlCommandProcessor controlCommandProcessor; public ChannelListener(DefaultConfigurationManager configurationManager, - DefaultContextManager contextManager) { + DefaultContextManager contextManager, + TribesControlCommandProcessor controlCommandProcessor) { this.configurationManager = configurationManager; this.contextManager = contextManager; + this.controlCommandProcessor = controlCommandProcessor; } public void setContextManager(DefaultContextManager contextManager) { @@ -56,17 +62,21 @@ log.debug("Message received : " + msg); if (msg instanceof ContextClusteringCommand) { try { - ContextClusteringCommand comMsg = (ContextClusteringCommand) msg; - contextManager.notifyListener(comMsg); + contextManager.notifyListener((ContextClusteringCommand) msg); } catch (ClusteringFault e) { log.error("Could not process ContextCommand", e); } } else if (msg instanceof ConfigurationClusteringCommand) { - ConfigurationClusteringCommand command = (ConfigurationClusteringCommand) msg; try { - configurationManager.notifyListener(command); + configurationManager.notifyListener((ConfigurationClusteringCommand) msg); } catch (ClusteringFault e) { log.error("Could not process ConfigurationCommand", e); + } + } else if(msg instanceof ControlCommand){ + try { + controlCommandProcessor.process((ControlCommand) msg, sender); + } catch (ClusteringFault e) { + log.error("Could not process ControlCommand", e); } } } Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java Thu May 24 08:09:17 2007 @@ -33,17 +33,12 @@ public void sendToGroup(ClusteringCommand msg) throws ClusteringFault { if(channel == null) return; - Member[] group = channel.getMembers(); - log.debug("Group size " + group.length); - // send the message - -// for (int i = 0; i < group.length; i++) { -// printMember(group[i]); -// } + Member[] members = channel.getMembers(); - if (group.length > 0) { + // send the message + if (members.length > 0) { try { - channel.send(group, msg, 0); + channel.send(members, msg, 0); } catch (ChannelException e) { log.error("" + msg, e); String message = "Error sending command message : " + msg; @@ -69,9 +64,9 @@ log.debug("Group size " + group.length); // send the message - for (int i = 0; i < group.length; i++) { + /*for (int i = 0; i < group.length; i++) { printMember(group[i]); - } + }*/ if (group.length > 0) { try { @@ -81,6 +76,14 @@ String message = "Error sending exception message : " + throwable; throw new ClusteringFault(message, e); } + } + } + + public void sendToMember(ClusteringCommand cmd, Member member) throws ClusteringFault { + try { + channel.send(new Member[]{member}, cmd, Channel.SEND_OPTIONS_USE_ACK); + } catch (ChannelException e) { + throw new ClusteringFault(e); } } Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java Thu May 24 08:09:17 2007 @@ -18,13 +18,15 @@ import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; +import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.clustering.ClusterManager; -import org.apache.axis2.clustering.ClusteringFault; import org.apache.axis2.clustering.ClusteringConstants; +import org.apache.axis2.clustering.ClusteringFault; import org.apache.axis2.clustering.configuration.ConfigurationManager; import org.apache.axis2.clustering.configuration.DefaultConfigurationManager; import org.apache.axis2.clustering.context.ContextManager; import org.apache.axis2.clustering.context.DefaultContextManager; +import org.apache.axis2.clustering.control.GetStateCommand; import org.apache.axis2.clustering.tribes.info.TransientTribesChannelInfo; import org.apache.axis2.clustering.tribes.info.TransientTribesMemberInfo; import org.apache.axis2.description.Parameter; @@ -48,10 +50,14 @@ private DefaultContextManager contextManager; private HashMap parameters; - private Channel channel; + private ManagedChannel channel; + private TribesMembershipListener membershipListener; + private ConfigurationContext configurationContext; + private TribesControlCommandProcessor controlCmdProcessor; public TribesClusterManager() { parameters = new HashMap(); + controlCmdProcessor = new TribesControlCommandProcessor(configurationContext); } public ContextManager getContextManager() { @@ -63,29 +69,28 @@ } public void init() throws ClusteringFault { - if (log.isDebugEnabled()) { - log.debug("Enter: TribesClusterManager::init"); - } - ChannelSender sender = new ChannelSender(); - ChannelListener listener = new ChannelListener(configurationManager, contextManager); + ChannelListener listener = new ChannelListener(configurationManager, + contextManager, + controlCmdProcessor); TransientTribesChannelInfo channelInfo = new TransientTribesChannelInfo(); TransientTribesMemberInfo memberInfo = new TransientTribesMemberInfo(); contextManager.setSender(sender); configurationManager.setSender(sender); + controlCmdProcessor.setChannelSender(sender); try { - ManagedChannel channel = new GroupChannel(); + channel = new GroupChannel(); // Set the domain for this Node Parameter domainParam = getParameter(ClusteringConstants.DOMAIN); byte[] domain; if (domainParam != null) { - domain = ((String)domainParam.getValue()).getBytes(); + domain = ((String) domainParam.getValue()).getBytes(); channel.getMembershipService().setDomain(domain); } else { domain = "apache.axis2.domain".getBytes(); @@ -95,35 +100,63 @@ dfi.setDomain(domain); channel.addInterceptor(dfi); - this.channel = channel; + // Add the NonBlockingCoordinator. This is used for leader election + /*nbc = new NonBlockingCoordinator() { + public void fireInterceptorEvent(InterceptorEvent event) { + String status = event.getEventTypeDesc(); + System.err.println("$$$$$$$$$$$$ NBC status=" + status); + int type = event.getEventType(); + } + }; + nbc.setPrevious(dfi); + channel.addInterceptor(nbc);*/ + +// TcpFailureDetector tcpFailureDetector = new TcpFailureDetector(); +// tcpFailureDetector.setPrevious(nbc); +// channel.addInterceptor(tcpFailureDetector); channel.addChannelListener(listener); channel.addChannelListener(channelInfo); channel.addMembershipListener(memberInfo); - channel.addMembershipListener(new TribesMembershipListener()); + membershipListener = new TribesMembershipListener(); +// membershipListener.setConfigContext(configurationManager); //TODO: set the config ctx here and when config context is switched + channel.addMembershipListener(membershipListener); channel.start(Channel.DEFAULT); sender.setChannel(channel); contextManager.setSender(sender); configurationManager.setSender(sender); - Member[] members = channel.getMembers(); - TribesUtil.printMembers(members); - listener.setContextManager(contextManager); - } catch (ChannelException e) { + Member[] members = channel.getMembers(); + TribesUtil.printMembers(members); - if (log.isDebugEnabled()) { - log.debug("Exit: TribesClusterManager::init"); + // If there is at least one member in the Tribe, get the current state from a member + /*while (members.length > 0 && + configurationContext. + getProperty(ClusteringConstants.GET_STATE_RESPONSE_RECEIVED) == null) { + + // While there are members and GetStateResponseCommand is not received do the following + try { + members = channel.getMembers(); + + //TODO: select a random member and send the request to it. Otherwise the same member will + // get overloaded + sender.sendToMember(new GetStateCommand(), members[0]); + System.out.println("### WAITING FOR STATE UPDATE"); + Thread.sleep(200); + } catch (Exception e) { + e.printStackTrace(); + break; + } } + configurationContext. + removePropertyNonReplicable(ClusteringConstants.GET_STATE_RESPONSE_RECEIVED);*/ + } catch (ChannelException e) { String message = "Error starting Tribes channel"; throw new ClusteringFault(message, e); } - - if (log.isDebugEnabled()) { - log.debug("Exit: TribesClusterManager::init"); - } } public void setConfigurationManager(ConfigurationManager configurationManager) { @@ -190,5 +223,10 @@ if (log.isDebugEnabled()) { log.debug("Exit: TribesClusterManager::shutdown"); } + } + + public void setConfigurationContext(ConfigurationContext configurationContext) { + this.configurationContext = configurationContext; + controlCmdProcessor.setConfigurationContext(configurationContext); } } Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesControlCommandProcessor.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesControlCommandProcessor.java?view=auto&rev=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesControlCommandProcessor.java (added) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesControlCommandProcessor.java Thu May 24 08:09:17 2007 @@ -0,0 +1,52 @@ +/* + * Copyright 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.axis2.clustering.tribes; + +import org.apache.axis2.clustering.ClusteringFault; +import org.apache.axis2.clustering.control.ControlCommand; +import org.apache.axis2.clustering.control.GetStateCommand; +import org.apache.axis2.clustering.control.GetStateResponseCommand; +import org.apache.axis2.context.ConfigurationContext; +import org.apache.catalina.tribes.Member; + +/** + * + */ +public class TribesControlCommandProcessor { + private ConfigurationContext configurationContext; + + private ChannelSender channelSender; + + public void setChannelSender(ChannelSender channelSender) { + this.channelSender = channelSender; + } + + public TribesControlCommandProcessor(ConfigurationContext configurationContext) { + this.configurationContext = configurationContext; + } + + public void setConfigurationContext(ConfigurationContext configurationContext) { + this.configurationContext = configurationContext; + } + + public void process(ControlCommand command, Member sender) throws ClusteringFault { + command.execute(configurationContext); + if(command instanceof GetStateCommand){ + channelSender.sendToMember(new GetStateResponseCommand(), + sender); + } + } +} Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesMembershipListener.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesMembershipListener.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesMembershipListener.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesMembershipListener.java Thu May 24 08:09:17 2007 @@ -17,8 +17,10 @@ import org.apache.catalina.tribes.Member; import org.apache.catalina.tribes.MembershipListener; +import org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.axis2.context.ConfigurationContext; /** * @@ -26,13 +28,20 @@ public class TribesMembershipListener implements MembershipListener { private static Log log = LogFactory.getLog(TribesMembershipListener.class); +// private ConfigurationContext configContext; public void memberAdded(Member member) { log.info("New member " + getHostSocket(member) + " added to Tribes group."); + /* TODO: Send state information to this member. + But if all of the members start sending these messages, there is + it is going to be messy. Need to ensure that only one node send this message*/ + +// System.err.println("++++++ IS COORD="+TribesClusterManager.nbc.isCoordinator()); } public void memberDisappeared(Member member) { log.info("Member " + getHostSocket(member) + " left Tribes group"); +// System.err.println("++++++ IS COORD="+TribesClusterManager.nbc.isCoordinator()); } private String getHostSocket(Member member) { @@ -42,5 +51,9 @@ host = (host == null) ? ("" + hostBytes[i]) : (host + "." + hostBytes[i]); } return host + ":" + member.getPort(); - } + }/* + + public void setConfigContext(ConfigurationContext configContext) { + this.configContext = configContext; + }*/ } Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java (original) +++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java Thu May 24 08:09:17 2007 @@ -26,23 +26,27 @@ public static void printMembers(Member[] members) { - log.info("MEMBERS OF THE CURRENT TRIBES GROUP..."); if (members != null) { int length = members.length; - for (int i = 0; i < length; i++) { - byte[] hostBts = members[i].getHost(); - String host = null; - if (hostBts != null) { - for (int j = 0; j < hostBts.length; j++) { - host = host == null ? ("" + hostBts[j]) : (host + "." + hostBts[j]); + if (length > 0) { + log.info("Members of current Tribes..."); + for (int i = 0; i < length; i++) { + byte[] hostBts = members[i].getHost(); + String host = null; + if (hostBts != null) { + for (int j = 0; j < hostBts.length; j++) { + host = host == null ? ("" + hostBts[j]) : (host + "." + hostBts[j]); + } } - } - String port = "" + members[i].getPort(); - log.info("Member " + (i + 1) + " NAME:" + members[i].getName() + " HOST:" - + host + " PORT:" + port); + String port = "" + members[i].getPort(); + log.info("Member " + (i + 1) + " NAME:" + members[i].getName() + " HOST:" + + host + " PORT:" + port); + } + } else { + log.info("No members in current Tribe"); } } } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java Thu May 24 08:09:17 2007 @@ -19,14 +19,21 @@ import org.apache.axis2.clustering.configuration.ConfigurationManager; import org.apache.axis2.clustering.context.ContextManager; import org.apache.axis2.description.ParameterInclude; +import org.apache.axis2.context.ConfigurationContext; public interface ClusterManager extends ParameterInclude { - + public void init() throws ClusteringFault; public ContextManager getContextManager (); public ConfigurationManager getConfigurationManager (); public void setContextManager (ContextManager contextManager); public void setConfigurationManager (ConfigurationManager configurationManager); public void shutdown () throws ClusteringFault; - + + /** + * Set the configuration context + * + * @param configurationContext + */ + void setConfigurationContext(ConfigurationContext configurationContext); } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java Thu May 24 08:09:17 2007 @@ -17,7 +17,11 @@ package org.apache.axis2.clustering; -public class ClusteringConstants { - public static final String AVOID_INITIATION_KEY = "AvoidInitiation"; - public static final String DOMAIN = "domain"; +public final class ClusteringConstants { + private ClusteringConstants() { + } + + public static final String AVOID_INITIATION_KEY = "AvoidInitiation"; + public static final String DOMAIN = "domain"; + public static final String GET_STATE_RESPONSE_RECEIVED = "local_get.state.response.recd"; } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java Thu May 24 08:09:17 2007 @@ -94,6 +94,7 @@ configManager.setConfigurationContext(this); } if (shouldClusterBeInitiated(clusterManager)) { + clusterManager.setConfigurationContext(this); clusterManager.init(); } } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java?view=diff&rev=541316&r1=541315&r2=541316 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java Thu May 24 08:09:17 2007 @@ -66,6 +66,8 @@ Class clazz = Class.forName(className); clusterManager = (ClusterManager) clazz.newInstance(); + clusterManager.setConfigurationContext(configCtx); + //loading the parameters. processParameters(clusterElement.getChildrenWithName(new QName(TAG_PARAMETER)), clusterManager, --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]