You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by az...@apache.org on 2008/05/17 07:24:58 UTC

svn commit: r657292 - in /webservices/axis2/trunk/java/modules: clustering/src/org/apache/axis2/clustering/tribes/ clustering/test/org/apache/axis2/clustering/ clustering/test/org/apache/axis2/clustering/configuration/ kernel/src/org/apache/axis2/clust...

Author: azeez
Date: Fri May 16 22:24:58 2008
New Revision: 657292

URL: http://svn.apache.org/viewvc?rev=657292&view=rev
Log:
1. If a static member is also the local member, do not add it to the member list
2. Test for excluding all properties from replication
3. Code improvement/Added few javadocs


Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.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/WkaMembershipService.java
    webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ClusterManagerTestCase.java
    webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java
    webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/configuration/ConfigurationManagerTestCase.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/Member.java

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java Fri May 16 22:24:58 2008
@@ -20,16 +20,24 @@
 package org.apache.axis2.clustering.tribes;
 
 import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.membership.MemberImpl;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
 /**
- * Responsible for managing the membership
+ * Responsible for managing the membership. Handles membership changes.
  */
 public class MembershipManager {
-    private final List members = new ArrayList();
+    /**
+     * List of members in the cluster
+     */
+    private final List<Member> members = new ArrayList<Member>();
+
+    /**
+     * The member representing this node
+     */
     private Member localMember;
 
     public Member getLocalMember() {
@@ -40,26 +48,47 @@
         this.localMember = localMember;
     }
 
+    /**
+     * A new member is added
+     *
+     * @param member The new member that joined the cluster
+     */
     public synchronized void memberAdded(Member member) {
-        members.add(member);
+        if (!members.contains(member)) {
+            members.add(member);
+        }
     }
 
+    /**
+     * A member disappeared
+     *
+     * @param member The member that left the cluster
+     */
     public synchronized void memberDisappeared(Member member) {
         members.remove(member);
     }
 
+    /**
+     * Get the list of current members
+     *
+     * @return list of current members
+     */
     public synchronized Member[] getMembers() {
-        return (Member[]) members.toArray(new Member[members.size()]);
+        return members.toArray(new Member[members.size()]);
     }
 
+    /**
+     * Get the member that has been alive for the longest time
+     *
+     * @return The member that has been alive for the longest time
+     */
     public synchronized Member getLongestLivingMember() {
         Member longestLivingMember = null;
         if (members.size() > 0) {
-            Member member0 = (Member) members.get(0);
+            Member member0 = members.get(0);
             long longestAliveTime = member0.getMemberAliveTime();
             longestLivingMember = member0;
-            for (int i = 0; i < members.size(); i++) {
-                Member member = (Member) members.get(i);
+            for (Member member : members) {
                 if (longestAliveTime < member.getMemberAliveTime()) {
                     longestAliveTime = member.getMemberAliveTime();
                     longestLivingMember = member;
@@ -69,15 +98,44 @@
         return longestLivingMember;
     }
 
+    /**
+     * Get a random member from the list of current members
+     *
+     * @return A random member from the list of current members
+     */
     public synchronized Member getRandomMember() {
         if (members.size() == 0) {
             return null;
         }
         int memberIndex = new Random().nextInt(members.size());
-        return (Member) members.get(memberIndex);
+        return members.get(memberIndex);
     }
 
-    public boolean hasMembers(){
+    /**
+     * Check whether there are any members
+     *
+     * @return true if there are other members, false otherwise
+     */
+    public boolean hasMembers() {
         return members.size() > 0;
     }
+
+    /**
+     * Get a member
+     *
+     * @param member The member to be found
+     * @return The member, if it is found
+     */
+    public Member getMember(Member member) {
+        if (hasMembers()) {
+            MemberImpl result = null;
+            for (int i = 0; i < this.members.size() && result == null; i++) {
+                if (members.get(i).equals(member)) {
+                    result = (MemberImpl) members.get(i);
+                }
+            }
+            return result;
+        }
+        return null;
+    }
 }

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?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- 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 Fri May 16 22:24:58 2008
@@ -60,12 +60,19 @@
 import org.apache.commons.logging.LogFactory;
 
 import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 
+/**
+ * The main ClusterManager class for the Tribes based clustering implementation
+ */
 public class TribesClusterManager implements ClusterManager {
     public static final int MSG_ORDER_OPTION = 512;
     private static final Log log = LogFactory.getLog(TribesClusterManager.class);
@@ -73,7 +80,7 @@
     private DefaultConfigurationManager configurationManager;
     private DefaultContextManager contextManager;
 
-    private HashMap parameters;
+    private HashMap<String, Parameter> parameters;
     private ManagedChannel channel;
     private RpcChannel rpcChannel;
     private ConfigurationContext configurationContext;
@@ -85,7 +92,7 @@
     private org.apache.axis2.clustering.Member[] members;
 
     public TribesClusterManager() {
-        parameters = new HashMap();
+        parameters = new HashMap<String, Parameter>();
         controlCmdProcessor = new ControlCommandProcessor(configurationContext);
     }
 
@@ -105,12 +112,16 @@
         return configurationManager;
     }
 
+    /**
+     * Initialize the cluster.
+     *
+     * @throws ClusteringFault If initialization fails
+     */
     public void init() throws ClusteringFault {
 
         AxisConfiguration axisConfig = configurationContext.getAxisConfiguration();
-        for (Iterator iterator = axisConfig.getInFlowPhases().iterator();
-             iterator.hasNext();) {
-            Phase phase = (Phase) iterator.next();
+        for (Object o : axisConfig.getInFlowPhases()) {
+            Phase phase = (Phase) o;
             if (phase instanceof DispatchPhase) {
                 RequestBlockingHandler requestBlockingHandler = new RequestBlockingHandler();
                 if (!phase.getHandlers().contains(requestBlockingHandler)) {
@@ -122,13 +133,15 @@
                     handlerDesc.setName(ClusteringConstants.REQUEST_BLOCKING_HANDLER);
                     handlerDesc.setRules(rule);
                     phase.addHandler(requestBlockingHandler);
+
+                    log.info("Added " + ClusteringConstants.REQUEST_BLOCKING_HANDLER +
+                             " between SOAPMessageBodyBasedDispatcher & InstanceDispatcher to InFlow");
+                    break;
                 }
-                break;
             }
         }
-        for (Iterator iterator = axisConfig.getInFaultFlowPhases().iterator();
-             iterator.hasNext();) {
-            Phase phase = (Phase) iterator.next();
+        for (Object o : axisConfig.getInFaultFlowPhases()) {
+            Phase phase = (Phase) o;
             if (phase instanceof DispatchPhase) {
                 RequestBlockingHandler requestBlockingHandler = new RequestBlockingHandler();
                 if (!phase.getHandlers().contains(requestBlockingHandler)) {
@@ -140,6 +153,9 @@
                     handlerDesc.setName(ClusteringConstants.REQUEST_BLOCKING_HANDLER);
                     handlerDesc.setRules(rule);
                     phase.addHandler(requestBlockingHandler);
+
+                    log.info("Added " + ClusteringConstants.REQUEST_BLOCKING_HANDLER +
+                             " between SOAPMessageBodyBasedDispatcher & InstanceDispatcher to InFaultFlow");
                     break;
                 }
             }
@@ -172,58 +188,20 @@
         channel.getMembershipService().getProperties().setProperty("mcastClusterDomain",
                                                                    new String(domain));
 
-        // Membership scheme handling
-        //TODO: if it is a WKA scheme, connect to a WKA and get a list of members. Add the members
-        // TODO: to the membership manager
         Parameter membershipSchemeParam = getParameter("membershipScheme");
         String membershipScheme = ClusteringConstants.MembershipScheme.MULTICAST_BASED;
         if (membershipSchemeParam != null) {
             membershipScheme = ((String) membershipSchemeParam.getValue()).trim();
         }
-        if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
-            log.info("Using WKA based membership management scheme");
-            channel.setMembershipService(new WkaMembershipService(membershipManager));
-            StaticMember localMember = new StaticMember();
-            membershipManager.setLocalMember(localMember);
-            ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
-            Parameter tcpListenHost = getParameter("tcpListenHost");
-            if (tcpListenHost != null) {
-                String host = ((String) tcpListenHost.getValue()).trim();
-                receiver.setAddress(host);
-                localMember.setHost(host);
-            }
-            Parameter tcpListenPort = getParameter("tcpListenPort");
-            if (tcpListenPort != null) {
-                String port = ((String) tcpListenPort.getValue()).trim();
-                receiver.setPort(Integer.parseInt(port));
-                localMember.setPort(Integer.parseInt(port));
-            }
-            localMember.setDomain(domain);
-            byte[] payload = "test".getBytes();
-            localMember.setPayload(payload);
-
-            staticMembershipInterceptor = new StaticMembershipInterceptor();
-            try {
-                for (int i = 0; i < members.length; i++) {
-                    org.apache.axis2.clustering.Member member = members[i];
-                    StaticMember member1 = new StaticMember(member.getHostName(),
-                                                            member.getPort(), 10, payload);
-                    member1.setDomain(domain);
-                    staticMembershipInterceptor.addStaticMember(member1);
-                }
-            } catch (IOException e) {
-                String msg = "Could not add static members";
-                log.error(msg, e);
-                throw new ClusteringFault(msg, e);
-            }
-        } else if (membershipScheme.equals(ClusteringConstants.MembershipScheme.MULTICAST_BASED)) {
-            log.info("Using multicast based membership management scheme");
-            configureMulticastParameters(channel);
-        }
 
         // Add all the ChannelInterceptors
         addInterceptors(channel, domain, membershipScheme);
 
+        // Membership scheme handling
+        //TODO: if it is a WKA scheme, connect to a WKA and get a list of members. Add the members
+        // TODO: to the membership manager
+        configureMembershipScheme(domain, membershipScheme);
+
         channel.addChannelListener(channelListener);
 
         TribesMembershipListener membershipListener = new TribesMembershipListener(membershipManager);
@@ -240,7 +218,9 @@
                                           " System property and retry.");
             }
         } catch (ChannelException e) {
-            throw new ClusteringFault("Error starting Tribes channel", e);
+            String msg = "Error starting Tribes channel";
+            log.error(msg, e);
+            throw new ClusteringFault(msg, e);
         }
 
         // RpcChannel is a ChannelListener. When the reply to a particular request comes back, it
@@ -271,7 +251,91 @@
                 setNonReplicableProperty(ClusteringConstants.CLUSTER_INITIALIZED, "true");
     }
 
-    //TODO: The order of the interceptors will depend on the membership scheme
+    /**
+     * Handle specific configurations related to different membership management schemes.
+     *
+     * @param domain           The clustering domain to which this member belongs to
+     * @param membershipScheme The membership scheme. Only wka & multicast are valid values.
+     * @throws ClusteringFault If the membership scheme is invalid, or if an error occurs
+     *                         while configuring membership scheme
+     */
+    private void configureMembershipScheme(byte[] domain, String membershipScheme)
+            throws ClusteringFault {
+
+        if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
+            log.info("Using WKA based membership management scheme");
+            channel.setMembershipService(new WkaMembershipService(membershipManager));
+            StaticMember localMember = new StaticMember();
+            membershipManager.setLocalMember(localMember);
+            ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
+            Parameter tcpListenHost = getParameter("tcpListenHost");
+            if (tcpListenHost != null) {
+                String host = ((String) tcpListenHost.getValue()).trim();
+                receiver.setAddress(host);
+                localMember.setHost(host);
+            }
+            Parameter tcpListenPort = getParameter("tcpListenPort");
+            if (tcpListenPort != null) {
+                String port = ((String) tcpListenPort.getValue()).trim();
+                receiver.setPort(Integer.parseInt(port));
+                localMember.setPort(Integer.parseInt(port));
+            }
+            localMember.setDomain(domain);
+            byte[] payload = "ping".getBytes();
+            localMember.setPayload(payload);
+
+            try {
+                for (org.apache.axis2.clustering.Member member : members) {
+                    StaticMember tribesMember = new StaticMember(member.getHostName(),
+                                                                 member.getPort(),
+                                                                 0,
+                                                                 payload);
+                    // Do not add the local member to the list of members
+                    if (!(Arrays.equals(localMember.getHost(), tribesMember.getHost()) &&
+                          localMember.getPort() == tribesMember.getPort())) {
+                        tribesMember.setDomain(domain);
+                        staticMembershipInterceptor.addStaticMember(tribesMember);
+                        try {
+
+                            // Before adding a static member, we will try to verify whether
+                            // we can connect to it
+                            InetAddress addr = InetAddress.getByName(member.getHostName());
+                            SocketAddress sockaddr = new InetSocketAddress(addr,
+                                                                           member.getPort());
+                            new Socket().connect(sockaddr, 3000);
+                            membershipManager.memberAdded(tribesMember);
+                            log.info("Added static member " + TribesUtil.getHost(tribesMember));
+                        } catch (Exception e) {
+                            log.info("Could not connect to member " +
+                                     TribesUtil.getHost(tribesMember));
+                        }
+                    }
+                }
+            } catch (IOException e) {
+                String msg = "Could not add static members";   // TODO host and port
+                log.error(msg, e);
+                throw new ClusteringFault(msg, e);
+            }
+        } else if (membershipScheme.equals(ClusteringConstants.MembershipScheme.MULTICAST_BASED)) {
+            log.info("Using multicast based membership management scheme");
+            configureMulticastParameters(channel);
+        } else {
+            String msg = "Invalid membership scheme '" + membershipScheme +
+                         "'. Supported schemes are multicast & wka";
+            log.error(msg);
+            throw new ClusteringFault(msg);
+        }
+    }
+
+    /**
+     * Add ChannelInterceptors. The order of the interceptors that are added will depend on the
+     * membership management scheme
+     *
+     * @param channel          The Tribes channel
+     * @param domain           The domain to which this node belongs to
+     * @param membershipScheme The membership scheme. Only wka & multicast are valid values.
+     * @throws ClusteringFault If an error occurs while adding interceptors
+     */
     private void addInterceptors(ManagedChannel channel, byte[] domain, String membershipScheme)
             throws ClusteringFault {
 
@@ -313,10 +377,17 @@
         channel.addInterceptor(tcpFailureDetector);
 
         if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
+            staticMembershipInterceptor = new StaticMembershipInterceptor();
             channel.addInterceptor(staticMembershipInterceptor);
         }
     }
 
+    /**
+     * If a multicast based membership management scheme is used, configure the multicasting related
+     * parameters
+     *
+     * @param channel The Tribes channel
+     */
     private void configureMulticastParameters(ManagedChannel channel) {
         Properties mcastProps = channel.getMembershipService().getProperties();
         Parameter mcastAddress = getParameter("multicastAddress");
@@ -381,7 +452,7 @@
 
         // Keep track of members to whom we already sent an initialization command
         // Do not send another request to these members
-        List sentMembersList = new ArrayList();
+        List<String> sentMembersList = new ArrayList<String>();
         sentMembersList.add(TribesUtil.getLocalHost(channel));
         Member[] members = membershipManager.getMembers();
         if (members.length == 0) {
@@ -443,19 +514,19 @@
     }
 
     public Parameter getParameter(String name) {
-        return (Parameter) parameters.get(name);
+        return parameters.get(name);
     }
 
     public ArrayList getParameters() {
-        ArrayList list = new ArrayList();
-        for (Iterator it = parameters.keySet().iterator(); it.hasNext();) {
-            list.add(parameters.get(it.next()));
+        ArrayList<Parameter> list = new ArrayList<Parameter>();
+        for (String msg : parameters.keySet()) {
+            list.add(parameters.get(msg));
         }
         return list;
     }
 
     public boolean isParameterLocked(String parameterName) {
-        Parameter parameter = (Parameter) parameters.get(parameterName);
+        Parameter parameter = parameters.get(parameterName);
         return parameter != null && parameter.isLocked();
     }
 
@@ -463,6 +534,11 @@
         parameters.remove(param.getName());
     }
 
+    /**
+     * Shutdown the cluster. This member will leave the cluster when this method is called.
+     *
+     * @throws ClusteringFault If an error occurs while shutting down
+     */
     public void shutdown() throws ClusteringFault {
         log.debug("Enter: TribesClusterManager::shutdown");
         if (channel != null) {

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java Fri May 16 22:24:58 2008
@@ -20,6 +20,7 @@
 import org.apache.catalina.tribes.MembershipService;
 import org.apache.catalina.tribes.membership.MemberImpl;
 import org.apache.catalina.tribes.membership.StaticMember;
+import org.apache.catalina.tribes.util.UUIDGenerator;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -32,10 +33,6 @@
 
     private MembershipManager membershipManager;
 
-    /**
-     * The descriptive information about this implementation.
-     */
-    private static final String info = "McastService/2.1";
 
     /**
      * The implementation specific properties
@@ -60,18 +57,15 @@
     }
 
     public void start() throws Exception {
-        //TODO: Method implementation
-
+        // Nothing to do here
     }
 
     public void start(int i) throws Exception {
-        //TODO: Method implementation
-
+        // Nothing to do here
     }
 
     public void stop(int i) {
-        //TODO: Method implementation
-
+        // Nothing to do here
     }
 
     public boolean hasMembers() {
@@ -79,14 +73,7 @@
     }
 
     public Member getMember(Member member) {
-
-        //TODO: Method implementation
-        try {
-            return new MemberImpl("127.0.0.1", 11, 111);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return member;
+        return membershipManager.getMember(member);
     }
 
     public Member[] getMembers() {
@@ -95,37 +82,51 @@
 
     public Member getLocalMember(boolean b) {
         return membershipManager.getLocalMember();
-
-        //TODO: Method implementation
-//        StaticMember member2 = null;
-//        try {
-//            member2 = new StaticMember("delly", 4000, 10, payload);
-//            member2.setDomain(domain);
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//
-//        return member2;
     }
 
     public String[] getMembersByName() {
-        //TODO: Method implementation
-        return new String[0];
+        Member[] currentMembers = getMembers();
+        String[] membernames;
+        if (currentMembers != null) {
+            membernames = new String[currentMembers.length];
+            for (int i = 0; i < currentMembers.length; i++) {
+                membernames[i] = currentMembers[i].toString();
+            }
+        } else {
+            membernames = new String[0];
+        }
+        return membernames;
     }
 
-    public Member findMemberByName(String s) {
-        //TODO: Method implementation
-        try {
-            return new MemberImpl("127.0.0.1", 11, 111);
-        } catch (IOException e) {
-            e.printStackTrace();
+    public Member findMemberByName(String name) {
+        Member[] currentMembers = getMembers();
+        for (Member currentMember : currentMembers) {
+            if (name.equals(currentMember.toString())) {
+                return currentMember;
+            }
         }
         return null;
     }
 
-    public void setLocalMemberProperties(String s, int i) {
-        //TODO: Method implementation
-
+    public void setLocalMemberProperties(String listenHost, int listenPort) {
+        properties.setProperty("tcpListenHost", listenHost);
+        properties.setProperty("tcpListenPort", String.valueOf(listenPort));
+        StaticMember localMember = (StaticMember) membershipManager.getLocalMember();
+        try {
+            if (localMember != null) {
+                localMember.setHostname(listenHost);
+                localMember.setPort(listenPort);
+            } else {
+                localMember = new StaticMember(listenHost, listenPort, 0);
+                localMember.setUniqueId(UUIDGenerator.randomUUID(true));
+                localMember.setPayload(payload);
+                localMember.setDomain(domain);
+                membershipManager.setLocalMember(localMember);
+            }
+            localMember.getData(true, true);
+        } catch (IOException x) {
+            throw new IllegalArgumentException(x);
+        }
     }
 
     public void setMembershipListener(MembershipListener membershipListener) {
@@ -136,11 +137,11 @@
         this.membershipListener = null;
     }
 
-    public void setPayload(byte[] bytes) {
+    public void setPayload(byte[] payload) {
         this.payload = payload;
     }
 
-    public void setDomain(byte[] bytes) {
+    public void setDomain(byte[] domain) {
         this.domain = domain;
     }
 }

Modified: webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ClusterManagerTestCase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ClusterManagerTestCase.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ClusterManagerTestCase.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ClusterManagerTestCase.java Fri May 16 22:24:58 2008
@@ -30,8 +30,6 @@
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.transport.http.server.HttpUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 public abstract class ClusterManagerTestCase extends TestCase {
 
@@ -55,8 +53,6 @@
     protected TestConfigurationManagerListener configurationManagerListener;
     protected DefaultContextManagerListener contextManagerListener;
 
-    private static final Log log = LogFactory.getLog(ClusterManagerTestCase.class);
-
     protected void setUp() throws Exception {
 
         Thread.sleep(3000);
@@ -102,7 +98,8 @@
         } catch (ClusteringFault e) {
             String message =
                     "Could not initialize ClusterManagers. Please check the network connection";
-            log.error(message, e);
+            System.out.println(message + ": " + e);
+            e.printStackTrace();
             skipChannelTests = true;
         }
     }

Modified: webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java Fri May 16 22:24:58 2008
@@ -556,6 +556,23 @@
         assertNull(serviceContext1.getProperty(key1));
     }
 
+    public void testReplicationExclusion0() throws Exception {
+        if (!canRunTests) {
+            return;
+        }
+
+        String key1 = "local_configCtxKey";
+        String val1 = "configCtxVal1";
+        configurationContext1.setProperty(key1, val1);
+        List<String> exclusionPatterns = new ArrayList<String>();
+        exclusionPatterns.add("*"); // Exclude all properties
+        ctxMan1.setReplicationExcludePatterns("defaults", exclusionPatterns);
+        ctxMan1.updateContext(configurationContext1);
+
+        String value = (String) configurationContext2.getProperty(key1);
+        assertNull(value); // The property should not have gotten replicated
+    }
+
     public void testReplicationExclusion1() throws Exception {
         if (!canRunTests) {
             return;
@@ -564,7 +581,7 @@
         String key1 = "local_configCtxKey";
         String val1 = "configCtxVal1";
         configurationContext1.setProperty(key1, val1);
-        List exclusionPatterns = new ArrayList();
+        List<String> exclusionPatterns = new ArrayList<String>();
         exclusionPatterns.add("local_*");
         ctxMan1.setReplicationExcludePatterns("defaults", exclusionPatterns);
         ctxMan1.updateContext(configurationContext1);
@@ -581,7 +598,7 @@
         String key1 = "local_configCtxKey";
         String val1 = "configCtxVal1";
         configurationContext1.setProperty(key1, val1);
-        List exclusionPatterns = new ArrayList();
+        List<String> exclusionPatterns = new ArrayList<String>();
         exclusionPatterns.add("local_*");
         ctxMan1.setReplicationExcludePatterns("org.apache.axis2.context.ConfigurationContext",
                                               exclusionPatterns);
@@ -608,9 +625,9 @@
         String val3 = "configCtxVal3";
         configurationContext1.setProperty(key3, val3);
 
-        List exclusionPatterns1 = new ArrayList();
+        List<String> exclusionPatterns1 = new ArrayList<String>();
         exclusionPatterns1.add("local1_*");
-        List exclusionPatterns2 = new ArrayList();
+        List<String> exclusionPatterns2 = new ArrayList<String>();
         exclusionPatterns2.add("local2_*");
         ctxMan1.setReplicationExcludePatterns("org.apache.axis2.context.ConfigurationContext",
                                               exclusionPatterns1);

Modified: webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/configuration/ConfigurationManagerTestCase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/configuration/ConfigurationManagerTestCase.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/configuration/ConfigurationManagerTestCase.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/configuration/ConfigurationManagerTestCase.java Fri May 16 22:24:58 2008
@@ -21,16 +21,12 @@
 
 import org.apache.axis2.clustering.ClusterManagerTestCase;
 import org.apache.axis2.clustering.ClusteringFault;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 import javax.xml.stream.XMLStreamException;
 
 
 public abstract class ConfigurationManagerTestCase extends ClusterManagerTestCase {
 
-    private static final Log log = LogFactory.getLog(ConfigurationManagerTestCase.class);
-
     public void testLoadServiceGroup() throws ClusteringFault {
 
         String serviceGroupName = "testService";

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?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- 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 Fri May 16 22:24:58 2008
@@ -27,7 +27,7 @@
 /**
  * This is the main interface in the Axis2 clustering implementation.
  * In order to plug-in a new clustering implementation, this interface has to be
- * implmented.
+ * implemented.
  */
 public interface ClusterManager extends ParameterInclude {
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java?rev=657292&r1=657291&r2=657292&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java Fri May 16 22:24:58 2008
@@ -20,7 +20,14 @@
  */
 public class Member {
 
+    /**
+     * The host name of this member. Can be the name or the IP address
+     */
     private String hostName;
+
+    /**
+     * The TCP port used by this member
+     */
     private int port;
 
     public Member(String hostName, int port) {