Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 59074 invoked from network); 8 Jun 2008 12:24:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 8 Jun 2008 12:24:53 -0000 Received: (qmail 72508 invoked by uid 500); 8 Jun 2008 12:24:55 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 72374 invoked by uid 500); 8 Jun 2008 12:24:55 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 72365 invoked by uid 500); 8 Jun 2008 12:24:55 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 72362 invoked by uid 99); 8 Jun 2008 12:24:54 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Jun 2008 05:24:54 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Jun 2008 12:24:13 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 18B8B23889F7; Sun, 8 Jun 2008 05:24:31 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Sun, 08 Jun 2008 12:24:30 -0000 To: axis2-cvs@ws.apache.org From: azeez@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080608122431.18B8B23889F7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@ application + + org.apache.axis2.clustering.DefaultLoadBalanceEventHandler + + + 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" - * + *

* 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 + *

+ * 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" - * + *

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