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/07/08 16:23:05 UTC
svn commit: r554372 - in /webservices/axis2/trunk/java/modules:
clustering/src/org/apache/axis2/clustering/tribes/
kernel/src/org/apache/axis2/clustering/
Author: azeez
Date: Sun Jul 8 07:23:04 2007
New Revision: 554372
URL: http://svn.apache.org/viewvc?view=rev&rev=554372
Log:
Before Axis2 clustering functionality initializes, the state should be
obtained from a neighbour. Till then, Axis2 should block all reuqests.
The RequestBlockingHandler will facilitate this.
Added:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/RequestBlockingHandler.java
Modified:
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/ClusteringConstants.java
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?view=diff&rev=554372&r1=554371&r2=554372
==============================================================================
--- 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 Jul 8 07:23:04 2007
@@ -21,9 +21,14 @@
import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.engine.Phase;
+import org.apache.axis2.engine.DispatchPhase;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.engine.Handler;
import org.apache.axis2.clustering.ClusterManager;
import org.apache.axis2.clustering.ClusteringConstants;
import org.apache.axis2.clustering.ClusteringFault;
+import org.apache.axis2.clustering.RequestBlockingHandler;
import org.apache.axis2.clustering.configuration.ConfigurationManager;
import org.apache.axis2.clustering.configuration.DefaultConfigurationManager;
import org.apache.axis2.clustering.context.ContextManager;
@@ -32,6 +37,8 @@
import org.apache.axis2.clustering.control.GetStateCommand;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.PhaseRule;
+import org.apache.axis2.description.HandlerDescription;
import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.ChannelException;
import org.apache.catalina.tribes.ManagedChannel;
@@ -69,6 +76,43 @@
}
public void init() throws ClusteringFault {
+
+ // Until the clustering stuff is properly initialized, we have to block.
+ configurationContext.setProperty(ClusteringConstants.BLOCK_ALL_REQUESTS, "true");
+ AxisConfiguration axisConfig = configurationContext.getAxisConfiguration();
+ for (Iterator iterator = axisConfig.getInFlowPhases().iterator();
+ iterator.hasNext();) {
+ Phase phase = (Phase) iterator.next();
+ if (phase instanceof DispatchPhase) {
+ PhaseRule rule = new PhaseRule("Dispatch");
+ rule.setAfter("SOAPMessageBodyBasedDispatcher");
+ rule.setBefore("InstanceDispatcher");
+ RequestBlockingHandler requestBlockingHandler = new RequestBlockingHandler();
+ HandlerDescription handlerDesc = requestBlockingHandler.getHandlerDesc();
+ handlerDesc.setHandler(requestBlockingHandler);
+ handlerDesc.setName("RequestBlockingHandler");
+ handlerDesc.setRules(rule);
+ phase.addHandler(requestBlockingHandler);
+ break;
+ }
+ }
+ for (Iterator iterator = axisConfig.getInFaultFlowPhases().iterator();
+ iterator.hasNext();) {
+ Phase phase = (Phase) iterator.next();
+ if (phase instanceof DispatchPhase) {
+ PhaseRule rule = new PhaseRule("Dispatch");
+ rule.setAfter("SOAPMessageBodyBasedDispatcher");
+ rule.setBefore("InstanceDispatcher");
+ RequestBlockingHandler requestBlockingHandler = new RequestBlockingHandler();
+ HandlerDescription handlerDesc = requestBlockingHandler.getHandlerDesc();
+ handlerDesc.setHandler(requestBlockingHandler);
+ handlerDesc.setName("RequestBlockingHandler");
+ handlerDesc.setRules(rule);
+ phase.addHandler(requestBlockingHandler);
+ break;
+ }
+ }
+
ChannelSender sender = new ChannelSender();
channelListener = new ChannelListener(configurationContext,
@@ -169,7 +213,7 @@
log.error(e);
break;
}
- numberOfTries ++;
+ numberOfTries++;
}
configurationContext.
setNonReplicableProperty(ClusteringConstants.CLUSTER_INITIALIZED,
@@ -181,6 +225,7 @@
String message = "Error starting Tribes channel";
throw new ClusteringFault(message, e);
}
+ configurationContext.removeProperty(ClusteringConstants.BLOCK_ALL_REQUESTS);
}
public void setConfigurationManager(ConfigurationManager configurationManager) {
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?view=diff&rev=554372&r1=554371&r2=554372
==============================================================================
--- 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 Sun Jul 8 07:23:04 2007
@@ -23,7 +23,13 @@
import org.apache.axis2.clustering.context.ContextManager;
import org.apache.axis2.description.ParameterInclude;
import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.engine.Handler;
+/**
+ * This is the main interface in the Axis2 clustering implementation.
+ * In order to plug-in a new clustering implementation, this interface has to be
+ * implmented.
+ */
public interface ClusterManager extends ParameterInclude {
/**
@@ -31,37 +37,32 @@
*
* @throws ClusteringFault
*/
- public void init() throws ClusteringFault;
+ void init() throws ClusteringFault;
/**
- *
* @return The ContextManager
*/
- public ContextManager getContextManager ();
+ ContextManager getContextManager();
/**
- *
* @return The ConfigurationManager
*/
- public ConfigurationManager getConfigurationManager ();
+ ConfigurationManager getConfigurationManager();
/**
- *
* @param contextManager
*/
- public void setContextManager (ContextManager contextManager);
+ void setContextManager(ContextManager contextManager);
/**
- *
* @param configurationManager
*/
- public void setConfigurationManager (ConfigurationManager configurationManager);
+ void setConfigurationManager(ConfigurationManager configurationManager);
/**
- *
* @throws ClusteringFault
*/
- public void shutdown () throws ClusteringFault;
+ void shutdown() throws ClusteringFault;
/**
* Set the configuration context
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?view=diff&rev=554372&r1=554371&r2=554372
==============================================================================
--- 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 Jul 8 07:23:04 2007
@@ -27,6 +27,8 @@
public static final String AVOID_INITIATION_KEY = "AvoidInitiation";
public static final String DOMAIN = "domain";
+ public static final String NODE_MANAGER_SERVICE = "Axis2NodeManager";
public static final String CLUSTER_INITIALIZED = "local_cluster.initialized";
public static final String TIME_TO_SEND = "local_cluster.time.to.send";
+ public static final String BLOCK_ALL_REQUESTS = "local_wso2wsas.block.requests";
}
Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/RequestBlockingHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/RequestBlockingHandler.java?view=auto&rev=554372
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/RequestBlockingHandler.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/RequestBlockingHandler.java Sun Jul 8 07:23:04 2007
@@ -0,0 +1,81 @@
+/*
+ * 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.axis2.handlers.AbstractHandler;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.AxisService;
+
+/**
+ *
+ */
+public class RequestBlockingHandler extends AbstractHandler {
+ public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
+
+ // Handle blocking at gobal level
+ ConfigurationContext cfgCtx = msgContext.getConfigurationContext();
+ Boolean isBlockingAllRequests =
+ (Boolean) cfgCtx.getProperty(ClusteringConstants.BLOCK_ALL_REQUESTS);
+ AxisServiceGroup serviceGroup = msgContext.getAxisServiceGroup();
+
+ // Handle blocking at service group level
+ Boolean isBlockingServiceGroupRequests = Boolean.FALSE;
+ if (serviceGroup != null) {
+ Parameter blockingParam =
+ serviceGroup.getParameter(ClusteringConstants.BLOCK_ALL_REQUESTS);
+ if (blockingParam != null) {
+ isBlockingServiceGroupRequests = (Boolean) blockingParam.getValue();
+ }
+ }
+
+ // Handle blocking at service level
+ AxisService service = msgContext.getAxisService();
+ Boolean isBlockingServiceRequests = Boolean.FALSE;
+ if (service != null) {
+ Parameter blockingParam =
+ service.getParameter(ClusteringConstants.BLOCK_ALL_REQUESTS);
+ if (blockingParam != null) {
+ isBlockingServiceRequests = (Boolean) blockingParam.getValue();
+ }
+ }
+
+ if (isBlockingAllRequests != null && isBlockingAllRequests.booleanValue()) {
+
+ // Allow only NodeManager service commit requests to pass through. Block all others
+ AxisService axisService = msgContext.getAxisService();
+ if (!axisService.getName().equals(ClusteringConstants.NODE_MANAGER_SERVICE)) {
+ if (!msgContext.getAxisOperation().getName().equals("commit")) {
+ throw new AxisFault("System is being reinitialized. " +
+ "Please try again in a few seconds.");
+ } else {
+ throw new AxisFault("NodeManager service cannot call any other " +
+ "operation after calling prepare");
+ }
+ }
+ } else if (isBlockingServiceGroupRequests.booleanValue()) {
+ throw new AxisFault("This service group is being initialized or unloaded. " +
+ "Please try again in a few seconds.");
+ } else if (isBlockingServiceRequests.booleanValue()) {
+ throw new AxisFault("This service is being initialized. " +
+ "Please try again in a few seconds.");
+ }
+ return InvocationResponse.CONTINUE;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org