| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF 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.state; |
| |
| import org.apache.axis2.clustering.ClusteringFault; |
| import org.apache.axis2.context.AbstractContext; |
| import org.apache.axis2.context.ConfigurationContext; |
| import org.apache.axis2.description.ParameterInclude; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * <p> |
| * This interface is responsible for handling context replication. The property changes in the |
| * <a href="http://www.ibm.com/developerworks/webservices/library/ws-apacheaxis2/"> |
| * Axis2 context hierarchy |
| * </a> in this node, are propagated to all other nodes in the cluster. |
| * </p> |
| * <p> |
| * It is not mandatory to have a StateManager in a node. If we are not interested in |
| * <a href="http://blog.afkham.org/2008/05/definition-of-high-availability.html"> |
| * High Availability</a>, we may disable context replication by commenting out the "contextManager" |
| * section in the axis2.xml cluster configuration section. In such a scenatio, the cluster will be |
| * used only for the purpose of |
| * <a href="http://blog.afkham.org/2008/05/definition-of-scalability.html">Scalability</a> |
| * </p> |
| * <p> |
| * The implementation of this interface is set by the |
| * {@link org.apache.axis2.deployment.ClusterBuilder}, by |
| * reading the "contextManager" element in the axis2.xml |
| * <p/> |
| * e.g. |
| * <code> |
| * <b> |
| * <contextManager class="org.apache.axis2.cluster.configuration.TribesContextManager"> |
| * </b> |
| * </code> |
| * </p> |
| */ |
| public interface StateManager extends ParameterInclude { |
| |
| /** |
| * This method is called when properties in an {@link AbstractContext} are updated. |
| * This could be addition of new properties, modifications of existing properties or |
| * removal of properties. |
| * |
| * @param context The context to be replicated |
| * @throws ClusteringFault If replication fails |
| */ |
| void updateContext(AbstractContext context) throws ClusteringFault; |
| |
| /** |
| * This method is called when one need to update/replicate only certains properties in the |
| * specified <code>context</code> |
| * |
| * @param context The AbstractContext containing the properties to be replicated |
| * @param propertyNames The names of the specific properties that should be replicated |
| * @throws ClusteringFault If replication fails |
| */ |
| void updateContext(AbstractContext context, String[] propertyNames) throws ClusteringFault; |
| |
| /** |
| * This method is called when properties in a collection of {@link AbstractContext}s are updated. |
| * This could be addition of new properties, modifications of existing properties or |
| * removal of properties. |
| * |
| * @param contexts The AbstractContexts containing the properties to be replicated |
| * @throws ClusteringFault If replication fails |
| */ |
| void updateContexts(AbstractContext[] contexts) throws ClusteringFault; |
| |
| /** |
| * Replicate state using a custom StateClusteringCommand |
| * |
| * @param command The custom StateClusteringCommand which can be used for replicating state |
| * @throws ClusteringFault If replication fails |
| */ |
| void replicateState(StateClusteringCommand command) throws ClusteringFault; |
| |
| /** |
| * This method is called when {@link AbstractContext} is removed from the system |
| * |
| * @param context The AbstractContext to be removed |
| * @throws ClusteringFault If context removal fails |
| */ |
| void removeContext(AbstractContext context) throws ClusteringFault; |
| |
| /** |
| * This is a check to see whether the properties in an instance of {@link AbstractContext} |
| * should be replicated. This allows an implementer to dissallow the replication of properties |
| * stored in a certain type of context |
| * |
| * @param context The instance of AbstractContext under consideration |
| * @return True - if the provided {@link AbstractContext} is clusterable |
| */ |
| boolean isContextClusterable(AbstractContext context); |
| |
| /** |
| * Set the system's configuration context. This will be used by the clustering implementations |
| * to get information about the Axis2 environment and to correspond with the Axis2 environment |
| * |
| * @param configurationContext The configuration context |
| */ |
| void setConfigurationContext(ConfigurationContext configurationContext); |
| |
| /** |
| * <p> |
| * All properties in the context with type <code>contextType</code> which have |
| * names that match the specified pattern will be excluded from replication. |
| * </p> |
| * <p/> |
| * <p> |
| * Only prefixes and suffixes are allowed. e.g. the local_* pattern indicates that |
| * all property names starting with local_ should be omitted from replication. *_local pattern |
| * indicated that all property names ending with _local should be omitted from replication. |
| * * pattern indicates that all properties should be excluded. |
| * </p> |
| * <p> |
| * Generally, we can use the context class name as the context type. |
| * </p> |
| * |
| * @param contextType The type of the context such as |
| * org.apache.axis2.context.ConfigurationContext, |
| * org.apache.axis2.context.ServiceGroupContext & |
| * org.apache.axis2.context.ServiceContext. |
| * Also "defaults" is a special type, which will apply to all contexts |
| * @param patterns The patterns |
| */ |
| void setReplicationExcludePatterns(String contextType, List patterns); |
| |
| /** |
| * Get all the excluded context property name patterns |
| * |
| * @return All the excluded pattern of all the contexts. The key of the Map is the |
| * the <code>contextType</code>. See {@link #setReplicationExcludePatterns(String,List)}. |
| * The values are of type {@link List} of {@link String} Objects, |
| * which are a collection of patterns to be excluded. |
| * @see #setReplicationExcludePatterns(String, java.util.List) |
| */ |
| Map getReplicationExcludePatterns(); |
| } |