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/10/07 17:17:09 UTC

svn commit: r702512 - in /webservices/axis2/trunk/java/modules: clustering/src/org/apache/axis2/clustering/ clustering/src/org/apache/axis2/clustering/tribes/ kernel/conf/ kernel/src/org/apache/axis2/clustering/

Author: azeez
Date: Tue Oct  7 08:17:08 2008
New Revision: 702512

URL: http://svn.apache.org/viewvc?rev=702512&view=rev
Log:
Notify a membership listener when membership changes take place


Added:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/MembershipListenerImpl.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/MembershipListener.java
Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2Coordinator.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.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/WkaBasedMembershipScheme.java
    webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java

Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/MembershipListenerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/MembershipListenerImpl.java?rev=702512&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/MembershipListenerImpl.java (added)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/MembershipListenerImpl.java Tue Oct  7 08:17:08 2008
@@ -0,0 +1,31 @@
+/*                                                                             
+ * 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;
+
+/**
+ *
+ */
+public class MembershipListenerImpl implements MembershipListener{
+    public void memberAdded(Member member, boolean isLocalMemberCoordinator) {
+        //TODO: Method implementation
+
+    }
+
+    public void memberDisappeared(Member member, boolean isLocalMemberCoordinator) {
+        //TODO: Method implementation
+
+    }
+}

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2Coordinator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2Coordinator.java?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2Coordinator.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2Coordinator.java Tue Oct  7 08:17:08 2008
@@ -15,17 +15,41 @@
  */
 package org.apache.axis2.clustering.tribes;
 
+import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator;
+import org.apache.axis2.clustering.MembershipListener;
 
 /**
- *  The non-blocking coordinator interceptor 
+ * The non-blocking coordinator interceptor
  */
 public class Axis2Coordinator extends NonBlockingCoordinator {
 
-    public void fireInterceptorEvent(InterceptorEvent event) {
-        int type = event.getEventType();
-        if (type == CoordinationEvent.EVT_CONF_RX && isCoordinator()) {
-            //TODO: Implement specif
+    private MembershipListener membershipListener;
+
+    public Axis2Coordinator(MembershipListener membershipListener) {
+        this.membershipListener = membershipListener;
+    }
+
+    public void memberAdded(Member member) {
+        super.memberAdded(member);
+        if (membershipListener != null) {
+            membershipListener.memberAdded(TribesUtil.toAxis2Member(member), isCoordinator());
+        }
+    }
+
+    public void memberDisappeared(Member member) {
+        super.memberDisappeared(member);
+        if (isCoordinator()) {
+            if (TribesUtil.toAxis2Member(member).isActive()) {
+                //TODO If an ACTIVE member disappeared, activate a passive member
+
+            } else {
+                //TODO If a PASSIVE member disappeared, we may need to startup another
+                // passive node
+            }
+        }
+        if (membershipListener != null) {
+            membershipListener.memberDisappeared(TribesUtil.toAxis2Member(member), isCoordinator());
         }
     }
 }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java Tue Oct  7 08:17:08 2008
@@ -18,6 +18,7 @@
 import org.apache.axis2.clustering.ClusteringConstants;
 import org.apache.axis2.clustering.ClusteringFault;
 import org.apache.axis2.clustering.MembershipScheme;
+import org.apache.axis2.clustering.MembershipListener;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.util.Utils;
 import org.apache.catalina.tribes.ManagedChannel;
@@ -57,14 +58,18 @@
      */
     private OperationMode mode;
 
+    private MembershipListener membershipListener;
+
     public MulticastBasedMembershipScheme(ManagedChannel channel,
                                           OperationMode mode,
                                           Map<String, Parameter> parameters,
-                                          byte[] domain) {
+                                          byte[] domain,
+                                          MembershipListener membershipListener) {
         this.channel = channel;
         this.mode = mode;
         this.parameters = parameters;
         this.domain = domain;
+        this.membershipListener = membershipListener;
     }
 
     public void init() throws ClusteringFault {
@@ -160,9 +165,8 @@
         }
 
         // Add the NonBlockingCoordinator.
-        NonBlockingCoordinator nbc = new Axis2Coordinator();
-        channel.addInterceptor(nbc);
-        
+        channel.addInterceptor(new Axis2Coordinator(membershipListener));
+
         channel.getMembershipService().setDomain(domain);
         mode.addInterceptors(channel);
 

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=702512&r1=702511&r2=702512&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 Tue Oct  7 08:17:08 2008
@@ -27,6 +27,7 @@
 import org.apache.axis2.clustering.LoadBalanceEventHandler;
 import org.apache.axis2.clustering.MembershipScheme;
 import org.apache.axis2.clustering.RequestBlockingHandler;
+import org.apache.axis2.clustering.MembershipListener;
 import org.apache.axis2.clustering.configuration.ConfigurationManager;
 import org.apache.axis2.clustering.configuration.DefaultConfigurationManager;
 import org.apache.axis2.clustering.context.ClusteringContextListener;
@@ -366,15 +367,30 @@
     private void configureMembershipScheme(byte[] localDomain,
                                            List<MembershipManager> membershipManagers)
             throws ClusteringFault {
+        MembershipListener membershipListener = null;
+        Parameter parameter = getParameter(ClusteringConstants.Parameters.MEMBERSHIP_LISTENER);
+        if(parameter != null){
+            String clazz = ((String) parameter.getValue()).trim();
+            try {
+                membershipListener = (MembershipListener) Class.forName(clazz).newInstance();
+            } catch (Exception e) {
+                String msg = "Cannot instantiate MembershipListener " + clazz;
+                log.error(msg, e);
+                throw new ClusteringFault(msg, e);
+            }
+        }
+
         String scheme = getMembershipScheme();
         log.info("Using " + scheme + " based membership management scheme");
         if (scheme.equals(ClusteringConstants.MembershipScheme.WKA_BASED)) {
             membershipScheme = new WkaBasedMembershipScheme(channel, mode,
                                                             membershipManagers,
                                                             primaryMembershipManager,
-                                                            parameters, localDomain, members);
+                                                            parameters, localDomain, members,
+                                                            membershipListener);
         } else if (scheme.equals(ClusteringConstants.MembershipScheme.MULTICAST_BASED)) {
-            membershipScheme = new MulticastBasedMembershipScheme(channel, mode, parameters, localDomain);
+            membershipScheme = new MulticastBasedMembershipScheme(channel, mode, parameters,
+                                                                  localDomain, membershipListener);
         } else {
             String msg = "Invalid membership scheme '" + scheme +
                          "'. Supported schemes are multicast & wka";

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?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- 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 Tue Oct  7 08:17:08 2008
@@ -48,9 +48,6 @@
 
     public void memberDisappeared(Member member) {
         log.info("Member " + TribesUtil.getName(member) + " left cluster");
-        if (TribesUtil.toAxis2Member(member).isActive()) {
-        } else {
-        }
 //        System.err.println("++++++ IS COORD="+TribesClusterManager.nbc.isCoordinator());
     }
 }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java Tue Oct  7 08:17:08 2008
@@ -18,6 +18,7 @@
 import org.apache.axis2.clustering.ClusteringFault;
 import org.apache.axis2.clustering.Member;
 import org.apache.axis2.clustering.MembershipScheme;
+import org.apache.axis2.clustering.MembershipListener;
 import org.apache.axis2.clustering.control.wka.JoinGroupCommand;
 import org.apache.axis2.clustering.control.wka.MemberListCommand;
 import org.apache.axis2.clustering.control.wka.RpcMembershipRequestHandler;
@@ -81,13 +82,16 @@
      */
     private OperationMode mode;
 
+    private MembershipListener membershipListener;
+
     public WkaBasedMembershipScheme(ManagedChannel channel,
                                     OperationMode mode,
                                     List<MembershipManager> applicationDomainMembershipManagers,
                                     MembershipManager primaryMembershipManager,
                                     Map<String, Parameter> parameters,
                                     byte[] domain,
-                                    List<Member> members) {
+                                    List<Member> members,
+                                    MembershipListener membershipListener) {
         this.channel = channel;
         this.mode = mode;
         this.applicationDomainMembershipManagers = applicationDomainMembershipManagers;
@@ -95,6 +99,7 @@
         this.parameters = parameters;
         this.localDomain = domain;
         this.members = members;
+        this.membershipListener = membershipListener;
     }
 
     /**
@@ -301,8 +306,7 @@
         }
 
         // Add the NonBlockingCoordinator.
-        NonBlockingCoordinator nbc = new Axis2Coordinator();
-        channel.addInterceptor(nbc);
+        channel.addInterceptor(new Axis2Coordinator(membershipListener));
         
         staticMembershipInterceptor = new StaticMembershipInterceptor();
         staticMembershipInterceptor.setLocalMember(primaryMembershipManager.getLocalMember());

Modified: webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml (original)
+++ webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml Tue Oct  7 08:17:08 2008
@@ -272,6 +272,14 @@
         <parameter name="isActive">true</parameter>
 
         <!--
+           An implementation of org.apache.axis2.clustering.MembershipListener
+           which will be called on membership changes
+        -->
+        <!--
+        <parameter name="membershipListener">org.apache.axis2.clustering.MembershipListenerImpl</parameter>
+         -->
+        
+        <!--
            The membership scheme used in this setup. The only values supported at the moment are
            "multicast" and "wka"
 

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?rev=702512&r1=702511&r2=702512&view=diff
==============================================================================
--- 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 Tue Oct  7 08:17:08 2008
@@ -103,6 +103,11 @@
          * Indicates whether this member is ACTIVE or PASSIVE
          */
         public static final String IS_ACTIVE = "isActive";
+
+        /**
+         * The implementaion of
+         */
+        public static final String MEMBERSHIP_LISTENER = "membershipListener";
     }
 
     public static final class MembershipScheme {

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/MembershipListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/MembershipListener.java?rev=702512&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/MembershipListener.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/MembershipListener.java Tue Oct  7 08:17:08 2008
@@ -0,0 +1,40 @@
+/*                                                                             
+ * 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;
+
+/**
+ * This is the interface which will be notified when memership changes.
+ * If some specific activities need to be performed when membership changes occur,
+ * you can provide an implementation of this interface in the axis2.xml
+ */
+public interface MembershipListener {
+
+    /**
+     * Method which will be called when a member is added
+     *
+     * @param member The member which was added
+     * @param isLocalMemberCoordinator true - if the local member is the coordinator
+     */
+    public void memberAdded(Member member, boolean isLocalMemberCoordinator);
+
+    /**
+     * Method which will be called when a member dissapears
+     *
+     * @param member The member which disappeared
+     * @param isLocalMemberCoordinator true - if the local member is the coordinator
+     */
+    public void memberDisappeared(Member member,  boolean isLocalMemberCoordinator);
+}