You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by az...@apache.org on 2012/02/14 13:04:35 UTC
svn commit: r1243888 - in
/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes:
Axis2ChannelListener.java Axis2GroupChannel.java ClassLoaderUtil.java
TribesAxisObserver.java TribesClusteringAgent.java
Author: azeez
Date: Tue Feb 14 12:04:34 2012
New Revision: 1243888
URL: http://svn.apache.org/viewvc?rev=1243888&view=rev
Log:
Rather than creating a new classloader array everytime a Tribes message is received, we use an AxisObserver which will notify the relevant code to update the classloader array when service & modules are deployed & undeployed.
Added:
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesAxisObserver.java
Modified:
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2GroupChannel.java
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ClassLoaderUtil.java
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java
Modified: axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java?rev=1243888&r1=1243887&r2=1243888&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java (original)
+++ axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java Tue Feb 14 12:04:34 2012
@@ -91,7 +91,7 @@ public class Axis2ChannelListener implem
msg = XByteBuffer.deserialize(message,
0,
message.length,
- ClassLoaderUtil.getClassLoaders(configurationContext));
+ ClassLoaderUtil.getClassLoaders());
} catch (Exception e) {
String errMsg = "Cannot deserialize received message";
log.error(errMsg, e);
Modified: axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2GroupChannel.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2GroupChannel.java?rev=1243888&r1=1243887&r2=1243888&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2GroupChannel.java (original)
+++ axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2GroupChannel.java Tue Feb 14 12:04:34 2012
@@ -39,12 +39,6 @@ import java.io.Serializable;
*/
public class Axis2GroupChannel extends GroupChannel{
- private ConfigurationContext configurationContext;
-
- public Axis2GroupChannel(ConfigurationContext configurationContext) {
- this.configurationContext = configurationContext;
- }
-
@Override
public void messageReceived(ChannelMessage msg) {
if ( msg == null ) return;
@@ -62,7 +56,7 @@ public class Axis2GroupChannel extends G
try {
fwd = XByteBuffer.deserialize(msg.getMessage().getBytesDirect(), 0,
msg.getMessage().getLength(),
- ClassLoaderUtil.getClassLoaders(configurationContext));
+ ClassLoaderUtil.getClassLoaders());
}catch (Exception sx) {
log.error("Unable to deserialize message:"+msg,sx);
return;
Modified: axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ClassLoaderUtil.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ClassLoaderUtil.java?rev=1243888&r1=1243887&r2=1243888&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ClassLoaderUtil.java (original)
+++ axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ClassLoaderUtil.java Tue Feb 14 12:04:34 2012
@@ -17,33 +17,61 @@
*/
package org.apache.axis2.clustering.tribes;
-import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.AxisModule;
import org.apache.axis2.description.AxisServiceGroup;
import org.apache.axis2.engine.AxisConfiguration;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
+import java.util.Map;
/**
* A util for manipulating classloaders to be used while serializing & deserializing Tribes messages
*/
public class ClassLoaderUtil {
- public static ClassLoader[] getClassLoaders(ConfigurationContext configurationContext) {
- AxisConfiguration configuration = configurationContext.getAxisConfiguration();
- List<ClassLoader> classLoaders = new ArrayList<ClassLoader>();
- classLoaders.add(configuration.getSystemClassLoader());
- classLoaders.add(ClassLoaderUtil.class.getClassLoader());
+ private static Map<String, ClassLoader> classLoaders = new HashMap<String, ClassLoader>();
+
+ public static void init(AxisConfiguration configuration) {
+ classLoaders.put("system", configuration.getSystemClassLoader());
+ classLoaders.put("axis2", ClassLoaderUtil.class.getClassLoader());
for (Iterator iter = configuration.getServiceGroups(); iter.hasNext(); ) {
AxisServiceGroup group = (AxisServiceGroup) iter.next();
- classLoaders.add(group.getServiceGroupClassLoader());
+ classLoaders.put(getServiceGroupMapKey(group), group.getServiceGroupClassLoader());
}
for (Object obj : configuration.getModules().values()) {
AxisModule module = (AxisModule) obj;
- classLoaders.add(module.getModuleClassLoader());
+ classLoaders.put(getModuleMapKey(module), module.getModuleClassLoader());
}
- return classLoaders.toArray(new ClassLoader[classLoaders.size()]);
+ }
+
+ public static void addServiceGroupClassLoader(AxisServiceGroup serviceGroup) {
+ classLoaders.put(getServiceGroupMapKey(serviceGroup),
+ serviceGroup.getServiceGroupClassLoader());
+ }
+
+ public static void removeServiceGroupClassLoader(AxisServiceGroup serviceGroup) {
+ classLoaders.remove(getServiceGroupMapKey(serviceGroup));
+ }
+
+ private static String getServiceGroupMapKey(AxisServiceGroup serviceGroup) {
+ return serviceGroup.getServiceGroupName() + "$#sg";
+ }
+
+ public static void addModuleClassLoader(AxisModule module) {
+ classLoaders.put(getModuleMapKey(module),
+ module.getModuleClassLoader());
+ }
+
+ public static void removeModuleClassLoader(AxisModule axisModule) {
+ classLoaders.remove(getModuleMapKey(axisModule));
+ }
+
+ private static String getModuleMapKey(AxisModule module) {
+ return module.getName() + "-" + module.getVersion() + "$#mod";
+ }
+
+ public static ClassLoader[] getClassLoaders() {
+ return classLoaders.values().toArray(new ClassLoader[classLoaders.size()]);
}
}
Added: axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesAxisObserver.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesAxisObserver.java?rev=1243888&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesAxisObserver.java (added)
+++ axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesAxisObserver.java Tue Feb 14 12:04:34 2012
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you 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.tribes;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.engine.AxisEvent;
+import org.apache.axis2.engine.AxisObserver;
+
+import java.util.ArrayList;
+
+/**
+ * AxisObserver which specifically handles setting of service & module classloaders for
+ * message deserialization by Tribes
+ */
+public class TribesAxisObserver implements AxisObserver {
+ public void init(AxisConfiguration axisConfiguration) {
+ //Nothing to do
+ }
+
+ public void serviceUpdate(AxisEvent axisEvent, AxisService axisService) {
+ //Nothing to do
+ }
+
+ public void serviceGroupUpdate(AxisEvent axisEvent, AxisServiceGroup axisServiceGroup) {
+ if (axisEvent.getEventType() == AxisEvent.SERVICE_DEPLOY) {
+ ClassLoaderUtil.addServiceGroupClassLoader(axisServiceGroup);
+ } else if (axisEvent.getEventType() == AxisEvent.SERVICE_REMOVE) {
+ ClassLoaderUtil.removeServiceGroupClassLoader(axisServiceGroup);
+ }
+ }
+
+ public void moduleUpdate(AxisEvent axisEvent, AxisModule axisModule) {
+ if (axisEvent.getEventType() == AxisEvent.MODULE_DEPLOY) {
+ ClassLoaderUtil.addModuleClassLoader(axisModule);
+ } else if (axisEvent.getEventType() == AxisEvent.MODULE_DEPLOY) {
+ ClassLoaderUtil.removeModuleClassLoader(axisModule);
+ }
+ }
+
+ public void addParameter(Parameter parameter) throws AxisFault {
+ //Nothing to do
+ }
+
+ public void removeParameter(Parameter parameter) throws AxisFault {
+ //Nothing to do
+ }
+
+ public void deserializeParameters(OMElement omElement) throws AxisFault {
+ //Nothing to do
+ }
+
+ public Parameter getParameter(String carbonHome) {
+ return null; //Nothing to do
+ }
+
+ public ArrayList<Parameter> getParameters() {
+ return null; //Nothing to do
+ }
+
+ public boolean isParameterLocked(String carbonHome) {
+ return false; //Nothing to do
+ }
+}
Modified: axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java?rev=1243888&r1=1243887&r2=1243888&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java (original)
+++ axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java Tue Feb 14 12:04:34 2012
@@ -22,7 +22,14 @@ package org.apache.axis2.clustering.trib
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
-import org.apache.axis2.clustering.*;
+import org.apache.axis2.clustering.ClusteringAgent;
+import org.apache.axis2.clustering.ClusteringCommand;
+import org.apache.axis2.clustering.ClusteringConstants;
+import org.apache.axis2.clustering.ClusteringFault;
+import org.apache.axis2.clustering.ClusteringMessage;
+import org.apache.axis2.clustering.MembershipListener;
+import org.apache.axis2.clustering.MembershipScheme;
+import org.apache.axis2.clustering.RequestBlockingHandler;
import org.apache.axis2.clustering.control.ControlCommand;
import org.apache.axis2.clustering.control.GetConfigurationCommand;
import org.apache.axis2.clustering.control.GetStateCommand;
@@ -47,7 +54,6 @@ import org.apache.catalina.tribes.ErrorH
import org.apache.catalina.tribes.ManagedChannel;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.UniqueId;
-import org.apache.catalina.tribes.group.GroupChannel;
import org.apache.catalina.tribes.group.Response;
import org.apache.catalina.tribes.group.RpcChannel;
import org.apache.catalina.tribes.transport.MultiPointSender;
@@ -156,7 +162,7 @@ public class TribesClusteringAgent imple
addRequestBlockingHandlerToInFlows();
primaryMembershipManager = new MembershipManager(configurationContext);
- channel = new Axis2GroupChannel(configurationContext);
+ channel = new Axis2GroupChannel();
channel.setHeartbeat(true);
channelSender = new ChannelSender(channel, primaryMembershipManager, synchronizeAllMembers());
axis2ChannelListener =
@@ -211,6 +217,9 @@ public class TribesClusteringAgent imple
membershipScheme.joinGroup();
+ configurationContext.getAxisConfiguration().addObservers(new TribesAxisObserver());
+ ClassLoaderUtil.init(configurationContext.getAxisConfiguration());
+
// If configuration management is enabled, get the latest config from a neighbour
if (configurationManager != null) {
configurationManager.setSender(channelSender);
@@ -225,7 +234,6 @@ public class TribesClusteringAgent imple
ClusteringContextListener contextListener = new ClusteringContextListener(channelSender);
configurationContext.addContextListener(contextListener);
}
- configurationContext.getAxisConfiguration().addObservers(new TribesAxisObserver());
configurationContext.
setNonReplicableProperty(ClusteringConstants.CLUSTER_INITIALIZED, "true");
log.info("Cluster initialization completed.");