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 2007/06/13 18:36:08 UTC
svn commit: r546951 - in /webservices/axis2/trunk/java/modules:
clustering/src/org/apache/axis2/clustering/handlers/
kernel/src/org/apache/axis2/clustering/context/
kernel/src/org/apache/axis2/receivers/
Author: azeez
Date: Wed Jun 13 09:36:02 2007
New Revision: 546951
URL: http://svn.apache.org/viewvc?view=rev&rev=546951
Log:
Removing the Replicationhandler and invoking the replication logic at the MR level after the business logic is invoked.
Added:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java
Removed:
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/handlers/ReplicationHandler.java
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInMessageReceiver.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutSyncMessageReceiver.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java
Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java?view=auto&rev=546951
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java Wed Jun 13 09:36:02 2007
@@ -0,0 +1,122 @@
+/*
+ * 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.context;
+
+import org.apache.axis2.clustering.ClusterManager;
+import org.apache.axis2.clustering.ClusteringFault;
+import org.apache.axis2.context.*;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class Replicator {
+
+ private static final Log log = LogFactory.getLog(Replicator.class);
+
+ public static void replicate(MessageContext msgContext) throws ClusteringFault {
+
+ // Do replication only if context replication is enabled.
+ // Also note that if there are no members, we need not do any replication
+ ClusterManager clusterManager =
+ msgContext.getConfigurationContext().getAxisConfiguration().getClusterManager();
+ if (clusterManager == null ||
+ clusterManager.getContextManager() == null ||
+ clusterManager.getMemberCount() == 0) {
+ return;
+ }
+
+ AxisOperation axisOperation = msgContext.getAxisOperation();
+ if (axisOperation == null) {
+ return;
+ }
+ log.debug("Going to replicate state...");
+ try {
+ replicateState(msgContext);
+ } catch (Exception e) {
+ String message = "Could not replicate the state";
+ throw new ClusteringFault(message, e);
+ }
+ }
+
+ private static void replicateState(MessageContext msgContext) throws ClusteringFault {
+ ConfigurationContext configurationContext = msgContext.getConfigurationContext();
+ AxisConfiguration axisConfiguration = configurationContext.getAxisConfiguration();
+ ClusterManager clusterManager = axisConfiguration.getClusterManager();
+
+ if (clusterManager != null) {
+
+ ContextManager contextManager = clusterManager.getContextManager();
+ if (contextManager == null) {
+ String msg = "Cannot replicate contexts since " +
+ "ContextManager is not specified in the axis2.xml file.";
+ throw new ClusteringFault(msg);
+ }
+
+ List contexts = new ArrayList();
+
+ // Do we need to replicate state stored in ConfigurationContext?
+ if (!configurationContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(configurationContext);
+ }
+
+ // Do we need to replicate state stored in ServiceGroupContext?
+ ServiceGroupContext sgContext = msgContext.getServiceGroupContext();
+ if (sgContext != null && !sgContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(sgContext);
+ }
+
+ // Do we need to replicate state stored in ServiceContext?
+ ServiceContext serviceContext = msgContext.getServiceContext();
+ if (serviceContext != null && !serviceContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(serviceContext);
+ }
+
+ // Do the actual replication here
+ if (!contexts.isEmpty()) {
+ String msgUUID =
+ contextManager.updateContexts((AbstractContext[]) contexts.
+ toArray(new AbstractContext[contexts.size()]));
+
+ long start = System.currentTimeMillis();
+
+ // Wait till all members have ACKed receipt & successful processing of
+ // the message with UUID 'msgUUID'
+ do {
+
+ // Wait sometime before checking whether message is ACKed
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException ignored) {
+ }
+ if (System.currentTimeMillis() - start > 40000) {
+ throw new ClusteringFault("ACKs not received from all members within 40 sec. " +
+ "Aborting wait.");
+ }
+ } while (!contextManager.isMessageAcknowledged(msgUUID));
+ }
+
+ } else {
+ String msg = "Cannot replicate contexts since " +
+ "ClusterManager is not specified in the axis2.xml file.";
+ throw new ClusteringFault(msg);
+ }
+ }
+}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInMessageReceiver.java?view=diff&rev=546951&r1=546950&r2=546951
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInMessageReceiver.java Wed Jun 13 09:36:02 2007
@@ -31,6 +31,7 @@
ThreadContextDescriptor tc = setThreadContext(messageCtx);
try {
invokeBusinessLogic(messageCtx);
+ replicateState(messageCtx);
} finally {
restoreThreadContext(tc);
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutSyncMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutSyncMessageReceiver.java?view=diff&rev=546951&r1=546950&r2=546951
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutSyncMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutSyncMessageReceiver.java Wed Jun 13 09:36:02 2007
@@ -37,14 +37,10 @@
ThreadContextDescriptor tc = setThreadContext(msgContext);
try {
invokeBusinessLogic(msgContext, outMsgContext);
+ replicateState(msgContext);
} finally {
restoreThreadContext(tc);
}
-
- AxisEngine engine =
- new AxisEngine(
- msgContext.getConfigurationContext());
-
- engine.send(outMsgContext);
+ AxisEngine.send(outMsgContext);
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java?view=diff&rev=546951&r1=546950&r2=546951
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java Wed Jun 13 09:36:02 2007
@@ -23,6 +23,8 @@
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
+import org.apache.axis2.clustering.context.Replicator;
+import org.apache.axis2.clustering.ClusteringFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.description.AxisService;
@@ -47,6 +49,10 @@
public class ThreadContextDescriptor {
public ClassLoader oldClassLoader;
public MessageContext oldMessageContext;
+ }
+
+ public void replicateState(MessageContext messageContext) throws ClusteringFault {
+ Replicator.replicate(messageContext);
}
/**
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java?view=diff&rev=546951&r1=546950&r2=546951
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java Wed Jun 13 09:36:02 2007
@@ -31,6 +31,7 @@
ThreadContextDescriptor tc = setThreadContext(messageCtx);
try {
invokeBusinessLogic(messageCtx);
+ replicateState(messageCtx);
} finally {
restoreThreadContext(tc);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org