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/09 18:48:23 UTC
svn commit: r665759 - in /webservices/axis2/trunk/java/modules:
clustering/src/org/apache/axis2/clustering/
clustering/src/org/apache/axis2/clustering/tribes/
kernel/src/org/apache/axis2/clustering/
Author: azeez
Date: Mon Jun 9 09:48:23 2008
New Revision: 665759
URL: http://svn.apache.org/viewvc?rev=665759&view=rev
Log:
1. Handling member specific properties in a more elegant manner
2. The load balancer impl needs to be able to retrieve the LoadBalanceEvent handler instance
Modified:
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java
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/src/org/apache/axis2/clustering/ClusterManager.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/DefaultLoadBalanceEventHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java?rev=665759&r1=665758&r2=665759&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/DefaultLoadBalanceEventHandler.java Mon Jun 9 09:48:23 2008
@@ -18,18 +18,29 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.List;
+import java.util.ArrayList;
+
/**
* The default, dummy implementation of {@link LoadBalanceEventHandler}
*/
public class DefaultLoadBalanceEventHandler implements LoadBalanceEventHandler{
private static final Log log = LogFactory.getLog(DefaultLoadBalanceEventHandler.class);
+ private List<Member> members = new ArrayList<Member>();
public void applicationMemberAdded(Member member) {
log.info("Application member " + member + " joined cluster.");
+ members.add(member);
}
public void applicationMemberRemoved(Member member) {
log.info("Application member " + member + " left cluster.");
+ members.remove(member);
+ }
+
+ public List<Member> getMembers() {
+ return members;
}
+
}
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=665759&r1=665758&r2=665759&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 Mon Jun 9 09:48:23 2008
@@ -15,6 +15,7 @@
*/
package org.apache.axis2.clustering.tribes;
+import org.apache.axis2.clustering.LoadBalanceEventHandler;
import org.apache.catalina.tribes.ChannelMessage;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.group.ChannelInterceptorBase;
@@ -22,11 +23,13 @@
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.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.ArrayList;
+import java.util.Properties;
/**
* This interceptor is used when this member is part of a load balancer cluster.
@@ -87,22 +90,19 @@
}
if (notify) {
super.memberAdded(member);
-
+
}
// Is this an application domain member?
if (Arrays.equals(applicationDomain, member.getDomain())) {
log.info("Application member " + TribesUtil.getName(member) + " joined cluster");
- if(eventHandler != null){
+ if (eventHandler != null) {
org.apache.axis2.clustering.Member axis2Member =
new org.apache.axis2.clustering.Member(TribesUtil.getHost(member),
member.getPort());
- byte[] payload = member.getPayload();
- String payloadStr = new String(payload);
-
- String[] ports = payloadStr.split(";");
- int httpPort = Integer.parseInt(ports[0].substring(ports[0].indexOf(":") + 1));
- int httpsPort = Integer.parseInt(ports[1].substring(ports[1].indexOf(":") + 1));
+ Properties props = getProperties(member.getPayload());
+ int httpPort = Integer.parseInt(props.getProperty("HTTP"));
+ int httpsPort = Integer.parseInt(props.getProperty("HTTPS"));
axis2Member.setHttpPort(httpPort);
axis2Member.setHttpsPort(httpsPort);
eventHandler.applicationMemberAdded(axis2Member);
@@ -112,6 +112,18 @@
}
+ private Properties getProperties(byte[] payload) {
+ Properties props = null;
+ try {
+ ByteArrayInputStream bin = new ByteArrayInputStream(payload);
+ props = new Properties();
+ props.load(bin);
+ } catch (IOException ignored) {
+ // This error will never occur
+ }
+ return props;
+ }
+
public void memberDisappeared(Member member) {
if (loadBalancerMembership == null) {
setupMembership();
@@ -128,7 +140,7 @@
// Is this an application domain member?
if (Arrays.equals(applicationDomain, member.getDomain())) {
log.info("Application member " + TribesUtil.getName(member) + " left cluster");
- if(eventHandler != null){
+ if (eventHandler != null) {
org.apache.axis2.clustering.Member axis2Member =
new org.apache.axis2.clustering.Member(member.getName(), member.getPort());
eventHandler.applicationMemberRemoved(axis2Member);
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=665759&r1=665758&r2=665759&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 Mon Jun 9 09:48:23 2008
@@ -65,6 +65,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -98,6 +99,7 @@
private RpcRequestHandler rpcRequestHandler;
private StaticMembershipInterceptor staticMembershipInterceptor;
private List<org.apache.axis2.clustering.Member> members;
+ private LoadBalanceEventHandler lbEventHandler;
public TribesClusterManager() {
parameters = new HashMap<String, Parameter>();
@@ -111,6 +113,10 @@
return members;
}
+ public LoadBalanceEventHandler getLoadBalanceEventHandler() {
+ return lbEventHandler;
+ }
+
public ContextManager getContextManager() {
return contextManager;
}
@@ -266,24 +272,32 @@
log.info("Cluster initialization completed.");
}
- private void setMemberTransportInfo() {
- String payload = "";
+ private void setMemberTransportInfo() throws ClusteringFault {
+ Properties transportInfo = new Properties();
AxisConfiguration axisConfig = configurationContext.getAxisConfiguration();
TransportInDescription httpTransport = axisConfig.getTransportIn("http");
if (httpTransport != null) {
Parameter port = httpTransport.getParameter("port");
if (port != null) {
- payload +="HTTP:" + Integer.parseInt((String) port.getValue()) + ";";
+ transportInfo.put("HTTP", port.getValue());
}
}
TransportInDescription httpsTransport = axisConfig.getTransportIn("https");
if (httpsTransport != null) {
Parameter port = httpsTransport.getParameter("port");
if (port != null) {
- payload +="HTTPS:" + Integer.parseInt((String) port.getValue()) + ";";
+ transportInfo.put("HTTPS", port.getValue());
}
}
- channel.getMembershipService().setPayload(payload.getBytes());
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ try {
+ transportInfo.store(bout, "");
+ } catch (IOException e) {
+ String msg = "Cannot store member transport properties in the ByteArrayOutputStream";
+ log.error(msg, e);
+ throw new ClusteringFault(msg, e);
+ }
+ channel.getMembershipService().setPayload(bout.toByteArray());
}
/**
@@ -674,8 +688,9 @@
if (lbEvtHandlerParam != null && lbEvtHandlerParam.getValue() != null) {
String lbEvtHandlerClass = ((String) lbEvtHandlerParam.getValue()).trim();
try {
- lbInterceptor.
- setEventHandler((LoadBalanceEventHandler) Class.forName(lbEvtHandlerClass).newInstance());
+ lbEventHandler =
+ (LoadBalanceEventHandler) Class.forName(lbEvtHandlerClass).newInstance();
+ lbInterceptor.setEventHandler(lbEventHandler);
} catch (Exception e) {
String msg = "Could not instantiate LoadBalanceEventHandler class " +
lbEvtHandlerClass;
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=665759&r1=665758&r2=665759&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 Mon Jun 9 09:48:23 2008
@@ -150,4 +150,11 @@
*/
List<Member> getMembers();
+ /**
+ * Get the load balance event handler which will be notified when load balance events occur.
+ * This will be valid only when this node is running in loadBalance mode
+ *
+ * @return The load balance event handler
+ */
+ LoadBalanceEventHandler getLoadBalanceEventHandler();
}
\ No newline at end of file
Modified: 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=665759&r1=665758&r2=665759&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/LoadBalanceEventHandler.java Mon Jun 9 09:48:23 2008
@@ -15,6 +15,8 @@
*/
package org.apache.axis2.clustering;
+import java.util.List;
+
/**
* 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,
@@ -36,4 +38,11 @@
* @param member Represents the member who left
*/
void applicationMemberRemoved(Member member);
+
+ /**
+ * Get the list of current members
+ *
+ * @return List of current members
+ */
+ List<Member> getMembers();
}