You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by az...@apache.org on 2008/05/14 15:20:13 UTC

svn commit: r656272 - in /webservices/axis2/trunk/java/modules: clustering/src/org/apache/axis2/clustering/tribes/ kernel/src/org/apache/axis2/clustering/ kernel/src/org/apache/axis2/deployment/ parent/

Author: azeez
Date: Wed May 14 06:20:13 2008
New Revision: 656272

URL: http://svn.apache.org/viewvc?rev=656272&view=rev
Log:
1. Now we can specify a static group of members
2. Upgraded to Tribes 6.0.16


Added:
    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
    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/TribesUtil.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusterManager.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ClusterBuilder.java
    webservices/axis2/trunk/java/modules/parent/pom.xml

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=656272&r1=656271&r2=656272&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 Wed May 14 06:20:13 2008
@@ -30,6 +30,15 @@
  */
 public class MembershipManager {
     private final List members = new ArrayList();
+    private Member localMember;
+
+    public Member getLocalMember() {
+        return localMember;
+    }
+
+    public void setLocalMember(Member localMember) {
+        this.localMember = localMember;
+    }
 
     public synchronized void memberAdded(Member member) {
         members.add(member);
@@ -68,4 +77,7 @@
         return (Member) members.get(memberIndex);
     }
 
+    public boolean hasMembers(){
+        return members.size() > 0;
+    }
 }

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=656272&r1=656271&r2=656272&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 Wed May 14 06:20:13 2008
@@ -49,13 +49,17 @@
 import org.apache.catalina.tribes.group.RpcChannel;
 import org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor;
 import org.apache.catalina.tribes.group.interceptors.OrderInterceptor;
+import org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor;
 import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
+import org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor;
+import org.apache.catalina.tribes.membership.StaticMember;
 import org.apache.catalina.tribes.transport.MultiPointSender;
 import org.apache.catalina.tribes.transport.ReceiverBase;
 import org.apache.catalina.tribes.transport.ReplicationTransmitter;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -77,12 +81,22 @@
     private ChannelListener channelListener;
     private ChannelSender channelSender;
     private MembershipManager membershipManager;
+    private StaticMembershipInterceptor staticMembershipInterceptor;
+    private org.apache.axis2.clustering.Member[] members;
 
     public TribesClusterManager() {
         parameters = new HashMap();
         controlCmdProcessor = new ControlCommandProcessor(configurationContext);
     }
 
+    public void setMembers(org.apache.axis2.clustering.Member[] members) {
+        this.members = members;
+    }
+
+    public org.apache.axis2.clustering.Member[] getMembers() {
+        return members;
+    }
+
     public ContextManager getContextManager() {
         return contextManager;
     }
@@ -158,22 +172,57 @@
         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());
+            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);
+        addInterceptors(channel, domain, membershipScheme);
 
         channel.addChannelListener(channelListener);
 
@@ -223,7 +272,14 @@
     }
 
     //TODO: The order of the interceptors will depend on the membership scheme
-    private void addInterceptors(ManagedChannel channel, byte[] domain) {
+    private void addInterceptors(ManagedChannel channel, byte[] domain, String membershipScheme)
+            throws ClusteringFault {
+
+        if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
+            TcpPingInterceptor tcpPingInterceptor = new TcpPingInterceptor();
+            tcpPingInterceptor.setInterval(100);
+            channel.addInterceptor(tcpPingInterceptor);
+        }
 
         // Add a DomainFilterInterceptor
         channel.getMembershipService().setDomain(domain);
@@ -256,18 +312,9 @@
         tcpFailureDetector.setPrevious(dfi);
         channel.addInterceptor(tcpFailureDetector);
 
-//        if(memberDiscoverMode = WKA){
-//            TcpPing
-//            TcpFailure
-//            StaticMembership
-//        }
-        /*StaticMembershipInterceptor staticMembershipInterceptor = new StaticMembershipInterceptor();
-        channel.addInterceptor(staticMembershipInterceptor);
-        try {
-            staticMembershipInterceptor.addStaticMember(new StaticMember("10.100.1.190", 4000, 10));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }*/
+        if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
+            channel.addInterceptor(staticMembershipInterceptor);
+        }
     }
 
     private void configureMulticastParameters(ManagedChannel channel) {

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?rev=656272&r1=656271&r2=656272&view=diff
==============================================================================
--- 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 Wed May 14 06:20:13 2008
@@ -24,6 +24,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.StringTokenizer;
+
 public class TribesUtil {
 
     private static Log log = LogFactory.getLog(TribesUtil.class);

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=656272&r1=656271&r2=656272&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 Wed May 14 06:20:13 2008
@@ -19,6 +19,7 @@
 import org.apache.catalina.tribes.MembershipListener;
 import org.apache.catalina.tribes.MembershipService;
 import org.apache.catalina.tribes.membership.MemberImpl;
+import org.apache.catalina.tribes.membership.StaticMember;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -29,6 +30,8 @@
  */
 public class WkaMembershipService implements MembershipService {
 
+    private MembershipManager membershipManager;
+
     /**
      * The descriptive information about this implementation.
      */
@@ -38,19 +41,22 @@
      * The implementation specific properties
      */
     protected Properties properties = new Properties();
-    
+
     protected byte[] payload;
 
     protected byte[] domain;
+    private MembershipListener membershipListener;
 
-    public void setProperties(Properties properties) {
-        //TODO: Method implementation
+    public WkaMembershipService(MembershipManager membershipManager) {
+        this.membershipManager = membershipManager;
+    }
 
+    public void setProperties(Properties properties) {
+        this.properties = properties;
     }
 
     public Properties getProperties() {
-        //TODO: Method implementation
-        return null;
+        return properties;
     }
 
     public void start() throws Exception {
@@ -69,11 +75,11 @@
     }
 
     public boolean hasMembers() {
-        //TODO: Method implementation
-        return false;
+        return membershipManager.hasMembers();
     }
 
     public Member getMember(Member member) {
+
         //TODO: Method implementation
         try {
             return new MemberImpl("127.0.0.1", 11, 111);
@@ -84,13 +90,22 @@
     }
 
     public Member[] getMembers() {
-        //TODO: Method implementation
-        return new Member[0];
+        return membershipManager.getMembers();
     }
 
     public Member getLocalMember(boolean b) {
+        return membershipManager.getLocalMember();
+
         //TODO: Method implementation
-        return new MemberImpl();
+//        StaticMember member2 = null;
+//        try {
+//            member2 = new StaticMember("delly", 4000, 10, payload);
+//            member2.setDomain(domain);
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//
+//        return member2;
     }
 
     public String[] getMembersByName() {
@@ -114,22 +129,18 @@
     }
 
     public void setMembershipListener(MembershipListener membershipListener) {
-        //TODO: Method implementation
-
+        this.membershipListener = membershipListener;
     }
 
     public void removeMembershipListener() {
-        //TODO: Method implementation
-
+        this.membershipListener = null;
     }
 
     public void setPayload(byte[] bytes) {
-        //TODO: Method implementation
-
+        this.payload = payload;
     }
 
     public void setDomain(byte[] bytes) {
-        //TODO: Method implementation
-
+        this.domain = domain;
     }
 }

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=656272&r1=656271&r2=656272&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 Wed May 14 06:20:13 2008
@@ -70,4 +70,19 @@
      */
     void setConfigurationContext(ConfigurationContext configurationContext);
 
+    /**
+     * Set the static members of the cluster. This is used only with static group membership.
+     *
+     * @param members Members to be added
+     */
+    void setMembers(Member[] members);
+
+    /**
+     * Get the list of members in a static group
+     *
+     * @return The members if static group membership is used. If any other membership scheme is used,
+     *         the values returned may not be valid
+     */
+    Member[] getMembers();
+
 }
\ No newline at end of file

Added: 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=656272&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java Wed May 14 06:20:13 2008
@@ -0,0 +1,38 @@
+/*                                                                             
+ * 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;
+
+/**
+ * Represents a member in the cluster. This is used with static membership
+ */
+public class Member {
+
+    private String hostName;
+    private int port;
+
+    public Member(String hostName, int port) {
+        this.hostName = hostName;
+        this.port = port;
+    }
+
+    public String getHostName() {
+        return hostName;
+    }
+
+    public int getPort() {
+        return port;
+    }
+}

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?rev=656272&r1=656271&r2=656272&view=diff
==============================================================================
--- 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 Wed May 14 06:20:13 2008
@@ -23,10 +23,13 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.clustering.ClusterManager;
+import org.apache.axis2.clustering.Member;
+import org.apache.axis2.clustering.ClusteringConstants;
 import org.apache.axis2.clustering.configuration.ConfigurationManager;
 import org.apache.axis2.clustering.configuration.ConfigurationManagerListener;
 import org.apache.axis2.clustering.context.ContextManager;
 import org.apache.axis2.clustering.context.ContextManagerListener;
+import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.i18n.Messages;
 
@@ -54,6 +57,8 @@
 
     /**
      * Populates service from corresponding OM.
+     *
+     * @param clusterElement Cluster element
      */
     public void buildCluster(OMElement clusterElement) throws DeploymentException {
 
@@ -82,6 +87,9 @@
                               clusterManager,
                               null);
 
+            // loading the members
+            loadMembers(clusterManager, clusterElement);
+
             //loading the ConfigurationManager
             loadConfigManager(clusterElement, clusterManager);
 
@@ -96,6 +104,31 @@
         }
     }
 
+    private void loadMembers(ClusterManager clusterManager, OMElement clusterElement) {
+        clusterManager.setMembers(new Member[0]);
+        Parameter membershipSchemeParam = clusterManager.getParameter("membershipScheme");
+        if (membershipSchemeParam != null) {
+            String membershipScheme = ((String) membershipSchemeParam.getValue()).trim();
+            if (membershipScheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
+                List members = new ArrayList();
+                OMElement membersEle =
+                        clusterElement.getFirstChildWithName(new QName("members"));
+                if (membersEle != null) {
+                    for (Iterator iter = membersEle.getChildrenWithLocalName("member"); iter.hasNext();)
+                    {
+                        OMElement memberEle = (OMElement) iter.next();
+                        String hostName =
+                                memberEle.getFirstChildWithName(new QName("hostName")).getText().trim();
+                        String port =
+                                memberEle.getFirstChildWithName(new QName("port")).getText().trim();
+                        members.add(new Member(hostName, Integer.parseInt(port)));
+                    }
+                }
+                clusterManager.setMembers((Member[]) members.toArray(new Member[members.size()]));
+            }
+        }
+    }
+
     private void loadContextManager(OMElement clusterElement,
                                     ClusterManager clusterManager) throws DeploymentException,
                                                                           InstantiationException,

Modified: webservices/axis2/trunk/java/modules/parent/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/parent/pom.xml?rev=656272&r1=656271&r2=656272&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/parent/pom.xml (original)
+++ webservices/axis2/trunk/java/modules/parent/pom.xml Wed May 14 06:20:13 2008
@@ -134,7 +134,7 @@
         <stax.impl.artifact>wstx-asl</stax.impl.artifact>
         <stax.impl.groupid>org.codehaus.woodstox</stax.impl.groupid>
         <stax.impl.version>3.2.4</stax.impl.version>
-        <tomcat.version>6.0.14</tomcat.version>
+        <tomcat.version>6.0.16</tomcat.version>
         <woden.version>1.0M8</woden.version>
         <wsdl4j.version>1.6.2</wsdl4j.version>
         <xalan.version>2.7.0</xalan.version>



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org