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/06/08 14:24:30 UTC
svn commit: r664489 - 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: Sun Jun 8 05:24:30 2008
New Revision: 664489
URL: http://svn.apache.org/viewvc?rev=664489&view=rev
Log:
Adding load balancing event notification mechanism
Added:
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java
Modified:
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/Member.java
Added: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java?rev=664489&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java (added)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java Sun Jun 8 05:24:30 2008
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The default, dummy implementation of {@link LoadBalanceEventHandler}
+ */
+public class DefaultLoadBalanceEventHandler implements LoadBalanceEventHandler{
+
+ private static final Log log = LogFactory.getLog(DefaultLoadBalanceEventHandler.class);
+
+ public void applicationMemberAdded(Member member) {
+ log.info("Application member " + member + " joined cluster.");
+ }
+
+ public void applicationMemberRemoved(Member member) {
+ log.info("Application member " + member + " left cluster.");
+ }
+}
Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java?rev=664489&r1=664488&r2=664489&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java Sun Jun 8 05:24:30 2008
@@ -22,6 +22,7 @@
import org.apache.catalina.tribes.membership.Membership;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.axis2.clustering.LoadBalanceEventHandler;
import java.util.Arrays;
import java.util.List;
@@ -55,6 +56,8 @@
*/
protected byte[] applicationDomain = new byte[0];
+ private LoadBalanceEventHandler eventHandler;
+
public LoadBalancerInterceptor(byte[] loadBalancerDomain,
byte[] applicationDomain) {
this.loadBalancerDomain = loadBalancerDomain;
@@ -67,6 +70,8 @@
if (Arrays.equals(msg.getAddress().getDomain(), loadBalancerDomain)) {
super.messageReceived(msg);
}
+
+ // TODO: Application members may inform about their HTTP/S ports
}
public void memberAdded(Member member) {
@@ -82,11 +87,17 @@
}
if (notify) {
super.memberAdded(member);
+
}
// Is this an application domain member?
if (Arrays.equals(applicationDomain, member.getDomain())) {
log.info("Application member " + TribesUtil.getHost(member) + " joined cluster");
+ if(eventHandler != null){
+ org.apache.axis2.clustering.Member axis2Member =
+ new org.apache.axis2.clustering.Member(member.getName(), member.getPort());
+ eventHandler.applicationMemberAdded(axis2Member);
+ }
applicationMembers.add(member);
}
@@ -108,7 +119,12 @@
// Is this an application domain member?
if (Arrays.equals(applicationDomain, member.getDomain())) {
log.info("Application member " + TribesUtil.getHost(member) + " left cluster");
- applicationMembers.remove(member);
+ if(eventHandler != null){
+ org.apache.axis2.clustering.Member axis2Member =
+ new org.apache.axis2.clustering.Member(member.getName(), member.getPort());
+ eventHandler.applicationMemberRemoved(axis2Member);
+ applicationMembers.remove(member);
+ }
}
}
@@ -158,4 +174,8 @@
public void setLoadBalancerDomain(byte[] loadBalancerDomain) {
this.loadBalancerDomain = loadBalancerDomain;
}
+
+ public void setEventHandler(LoadBalanceEventHandler eventHandler) {
+ this.eventHandler = eventHandler;
+ }
}
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=664489&r1=664488&r2=664489&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 Sun Jun 8 05:24:30 2008
@@ -25,6 +25,7 @@
import org.apache.axis2.clustering.ClusteringConstants;
import org.apache.axis2.clustering.ClusteringFault;
import org.apache.axis2.clustering.RequestBlockingHandler;
+import org.apache.axis2.clustering.LoadBalanceEventHandler;
import org.apache.axis2.clustering.configuration.ConfigurationManager;
import org.apache.axis2.clustering.configuration.DefaultConfigurationManager;
import org.apache.axis2.clustering.context.ClusteringContextListener;
@@ -646,6 +647,20 @@
} else if (mode.equals(ClusteringConstants.Mode.LOAD_BALANCE)) {
LoadBalancerInterceptor lbInterceptor =
new LoadBalancerInterceptor(domain, applicationDomain);
+ Parameter lbEvtHandlerParam =
+ getParameter(ClusteringConstants.Parameters.LOAD_BALANCE_EVENT_HANDLER);
+ if(lbEvtHandlerParam != null && lbEvtHandlerParam.getValue() != null){
+ String lbEvtHandlerClass = ((String)lbEvtHandlerParam.getValue()).trim();
+ try {
+ lbInterceptor.
+ setEventHandler((LoadBalanceEventHandler)Class.forName(lbEvtHandlerClass).newInstance());
+ } catch (Exception e) {
+ String msg = "Could not instantiate LoadBalanceEventHandler class " +
+ lbEvtHandlerClass;
+ log.error(msg, e);
+ throw new ClusteringFault(msg, e);
+ }
+ }
channel.addInterceptor(lbInterceptor);
}
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=664489&r1=664488&r2=664489&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml (original)
+++ webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml Sun Jun 8 05:24:30 2008
@@ -289,6 +289,16 @@
<parameter name="mode">application</parameter>
<!--
+ This is the even handler which will be notified in the case of load balancing events occurring.
+ This class has to be an implementation of org.apache.axis2.clustering.LoadBalanceEventHandler
+
+ This entry is only valid if the "mode" parameter is set to loadBalance
+ -->
+ <parameter name="loadBalanceEventHandler">
+ org.apache.axis2.clustering.DefaultLoadBalanceEventHandler
+ </parameter>
+
+ <!--
This parameter is only valid when the "mode" parameter is set to application. This indicates
the domain in which the the applications being load balanced are deployed.
-->
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=664489&r1=664488&r2=664489&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 Sun Jun 8 05:24:30 2008
@@ -67,15 +67,23 @@
/**
* Indicates the mode in which this member is running. Valid values are "application" and
* "loadBalance"
- *
+ * <p/>
* application - This member hosts end user applications
* loadBalance - This member is a part of the load balancer cluster
*/
public static final String MODE = "mode";
/**
+ * This is the even handler which will be notified in the case of load balancing events occurring.
+ * This class has to be an implementation of org.apache.axis2.clustering.LoadBalanceEventHandler
+ * <p/>
+ * This entry is only valid if the "mode" parameter is set to loadBalance
+ */
+ public static final String LOAD_BALANCE_EVENT_HANDLER = "loadBalanceEventHandler";
+
+ /**
* This parameter is only valid when the "mode" parameter is set to "application"
- *
+ * <p/>
* This indicates the domain in which the the applications being load balanced are deployed.
*/
public static final String APPLICATION_DOMAIN = "applicationDomain";
@@ -100,7 +108,7 @@
/**
* Represents the mode of this member
*/
- public static final class Mode{
+ public static final class Mode {
/**
* Load balancing mode
Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java?rev=664489&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java Sun Jun 8 05:24:30 2008
@@ -0,0 +1,39 @@
+/*
+ * 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 through which the load balancing event are notified.
+ * This will only be used when this member is running in loadBalance mode. In order to do this,
+ * in the axis2.xml file, set the value of the "mode" parameter to "loadBalance" and then provide
+ * the class that implements this interface using the "loadBalanceEventHandler" entry.
+ */
+public interface LoadBalanceEventHandler {
+
+ /**
+ * An application member joined the application group
+ *
+ * @param member Represents the member who joined
+ */
+ void applicationMemberAdded(Member member);
+
+ /**
+ * An application member left the application group
+ *
+ * @param member Represents the member who left
+ */
+ void applicationMemberRemoved(Member member);
+}
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=664489&r1=664488&r2=664489&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 Sun Jun 8 05:24:30 2008
@@ -63,4 +63,8 @@
result = 31 * result + port;
return result;
}
+
+ public String toString() {
+ return hostName + ":" + port;
+ }
}