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);
+}