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/01/07 14:22:16 UTC

svn commit: r609597 - in /webservices/axis2/trunk/java: ./ modules/clustering/src/org/apache/axis2/clustering/tribes/ modules/kernel/conf/ modules/kernel/src/org/apache/axis2/clustering/ modules/kernel/src/org/apache/axis2/clustering/context/

Author: azeez
Date: Mon Jan  7 05:22:14 2008
New Revision: 609597

URL: http://svn.apache.org/viewvc?rev=609597&view=rev
Log:
1. Added prameter for synchronizing all nodes in a cluster
2. No need to block all requests since transport listeners do no start until the configuration context is created


Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AckManager.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
    webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
    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
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java
    webservices/axis2/trunk/java/pom.xml

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AckManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AckManager.java?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AckManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AckManager.java Mon Jan  7 05:22:14 2008
@@ -31,7 +31,7 @@
 import java.util.Vector;
 
 /**
- *
+ * This class is responsible for handling all ACKs by the members in a cluster
  */
 public final class AckManager {
     private static Log log = LogFactory.getLog(AckManager.class);
@@ -41,6 +41,12 @@
         messageAckTable.put(command.getUniqueId(), new MessageACK(command));
     }
 
+    /**
+     * When a particular member send an ACK for a particular message, the ACK is stored here
+     *
+     * @param messageUniqueId ID of the message being ACKed
+     * @param memberId The ID of the member who ACKed the above message
+     */
     public static void addAcknowledgement(String messageUniqueId,
                                           String memberId) {
         MessageACK ack = (MessageACK) messageAckTable.get(messageUniqueId);
@@ -51,19 +57,30 @@
         }
     }
 
-    public static void removeMessage(String messageUniqueId){
+    public static void removeMessage(String messageUniqueId) {
         messageAckTable.remove(messageUniqueId);
     }
 
+    /**
+     * Check whether a particular message has been ACKed by all members in a cluster. If we find that
+     * a particular message is not ACKed, we will retransmit the message to the member who did not ACK
+     * and then return false.
+     *
+     * @param messageUniqueId ID of the message being ACKed
+     * @param sender
+     * @return true - if all members have ACKed the message, false - otherwise
+     * @throws ClusteringFault
+     */
     public static boolean isMessageAcknowledged(String messageUniqueId,
                                                 ChannelSender sender) throws ClusteringFault {
 
         boolean isAcknowledged = false;
-        if(messageUniqueId == null){
+        boolean isReturnValueSet = false;
+        if (messageUniqueId == null) {
             return true;
         }
         MessageACK ack = (MessageACK) messageAckTable.get(messageUniqueId);
-        if(ack == null){  // If the message is not found, treat it as ACKed
+        if (ack == null) {  // If the message is not found, treat it as ACKed
             return true;
         }
 
@@ -90,21 +107,29 @@
                                   " to member " + memberHost);
                     }
 
-                    isAcknowledged = false;
-                    break;
+                    if (!isReturnValueSet) {
+                        isAcknowledged = false;
+                        isReturnValueSet = true;
+                    }
                 } else {
-                    isAcknowledged = true;
+                    if (!isReturnValueSet) {
+                        isAcknowledged = true;
+                    }
                 }
             }
         }
 
-        // If a message is ACKed, we don't have to keep track of it in our ackTbl anymore
+        // If a message is ACKed by all members, we don't have to keep track of
+        // it in our ackTbl anymore
         if (isAcknowledged) {
             messageAckTable.remove(messageUniqueId);
         }
         return isAcknowledged;
     }
 
+    /**
+     * Data structure for holding the ACKs for each message
+     */
     private static class MessageACK {
         private ContextClusteringCommand command;
         private List memberList = new Vector();

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java Mon Jan  7 05:22:14 2008
@@ -148,8 +148,7 @@
                    configurationManager != null) {
             configurationManager.process((ConfigurationClusteringCommand) msg);
         } else if (msg instanceof ControlCommand && controlCommandProcessor != null) {
-            controlCommandProcessor.process((ControlCommand) msg,
-                                            sender);
+            controlCommandProcessor.process((ControlCommand) msg, sender);
         }
     }
 }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelSender.java Mon Jan  7 05:22:14 2008
@@ -24,6 +24,7 @@
 import org.apache.axis2.clustering.MessageSender;
 import org.apache.catalina.tribes.ByteMessage;
 import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.ChannelException;
 import org.apache.catalina.tribes.Member;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -72,6 +73,42 @@
         return timeToSend;
     }
 
+    public long sendToGroup(ClusteringCommand msg, Member[] members) throws ClusteringFault {
+        if (channel == null) {
+            return 0;
+        }
+        long timeToSend = 0;
+
+        // Keep retrying, since at the point of trying to send the msg, a member may leave the group
+        // causing a view change. All nodes in a view should get the msg
+        //TODO: Sometimes Tribes incorrectly detects that a member has left a group
+        while (true) {
+            if (channel.getMembers().length > 0) {
+                try {
+                    long start = System.currentTimeMillis();
+                    channel.send(channel.getMembers(), toByteMessage(msg), Channel.SEND_OPTIONS_USE_ACK);
+                    timeToSend = System.currentTimeMillis() - start;
+                    log.debug("Sent " + msg + " to group");
+                    break;
+                } catch (NotSerializableException e) {
+                    String message = "Could not send command message " + msg +
+                                     " to group since it is not serializable.";
+                    log.error(message, e);
+                    throw new ClusteringFault(message, e);
+                } catch (ChannelException e) {
+                    
+                } catch (Exception e) {
+                    String message = "Error sending command message : " + msg +
+                                     ". Reason " + e.getMessage();
+                    log.warn(message, e);
+                }
+            } else {
+                break;
+            }
+        }
+        return timeToSend;
+    }
+
     private ByteMessage toByteMessage(ClusteringCommand msg) throws IOException {
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectOutputStream out = new ObjectOutputStream(bos);
@@ -105,7 +142,7 @@
                 log.debug("Sent " + cmd + " to " + TribesUtil.getHost(member));
             }
         } catch (NotSerializableException e) {
-            String message = "Could not send command message to " + TribesUtil.getHost(member)  +
+            String message = "Could not send command message to " + TribesUtil.getHost(member) +
                              " since it is not serializable.";
             log.error(message, e);
             throw new ClusteringFault(message, e);

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=609597&r1=609596&r2=609597&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 Jan  7 05:22:14 2008
@@ -46,6 +46,7 @@
 import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.group.GroupChannel;
 import org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor;
+import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
 import org.apache.catalina.tribes.transport.ReceiverBase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -83,8 +84,6 @@
 
     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();) {
@@ -134,7 +133,8 @@
         controlCmdProcessor.setChannelSender(sender);
         channel = new GroupChannel();
 
-        String localIP = System.getProperty(ClusteringConstants.LOCAL_IP_ADDRESS); 
+        // Set the IP address that will be advertised by this node
+        String localIP = System.getProperty(ClusteringConstants.LOCAL_IP_ADDRESS);
         if (localIP != null) {
             ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
             receiver.setAddress(localIP);
@@ -174,10 +174,10 @@
        mcastProps.setProperty("tcpListenPort", "4000");
        mcastProps.setProperty("tcpListenHost", "127.0.0.1");*/
 
-        /*TcpFailureDetector tcpFailureDetector = new TcpFailureDetector();
-        tcpFailureDetector.setPrevious(nbc);
+        TcpFailureDetector tcpFailureDetector = new TcpFailureDetector();
+        tcpFailureDetector.setPrevious(dfi);
         channel.addInterceptor(tcpFailureDetector);
-        tcpFailureDetector.*/
+//        tcpFailureDetector.
 
         channel.addChannelListener(channelListener);
         TribesMembershipListener membershipListener = new TribesMembershipListener();
@@ -189,7 +189,9 @@
                 channel.stop(Channel.DEFAULT);
                 throw new ClusteringFault("Cannot join cluster using IP " + localHost +
                                           ". Please set an IP address other than " +
-                                          localHost + " in your /etc/hosts file and retry.");
+                                          localHost + " in your /etc/hosts file or set the " +
+                                          ClusteringConstants.LOCAL_IP_ADDRESS +
+                                          " System property and retry.");
             }
         } catch (ChannelException e) {
             throw new ClusteringFault("Error starting Tribes channel", e);
@@ -200,12 +202,14 @@
         log.info("Local Tribes Member " + TribesUtil.getLocalHost(channel));
         TribesUtil.printMembers(members);
 
-        if (configurationManager != null) { // If configuration management is enabled, get the latest config from a neighbour
+        // If configuration management is enabled, get the latest config from a neighbour
+        if (configurationManager != null) {
             configurationManager.setSender(sender);
             getInitializationMessage(members, sender, new GetConfigurationCommand());
         }
 
-        if (contextManager != null) { // If context replication is enabled, get the latest state from a neighbour
+        // If context replication is enabled, get the latest state from a neighbour
+        if (contextManager != null) {
             contextManager.setSender(sender);
             channelListener.setContextManager(contextManager);
             getInitializationMessage(members, sender, new GetStateCommand());
@@ -214,7 +218,6 @@
         }
         configurationContext.
                 setNonReplicableProperty(ClusteringConstants.CLUSTER_INITIALIZED, "true");
-        configurationContext.removeProperty(ClusteringConstants.BLOCK_ALL_REQUESTS);
     }
 
     /**
@@ -322,5 +325,13 @@
         if (channelListener != null) {
             channelListener.setConfigurationContext(configurationContext);
         }
+    }
+
+    public boolean synchronizeAllMembers() {
+        Parameter syncAllParam = getParameter(ClusteringConstants.SYNCHRONIZE_ALL_MEMBERS);
+        if (syncAllParam == null) {
+            return true;
+        }
+        return Boolean.parseBoolean((String) syncAllParam.getValue());
     }
 }

Modified: webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml (original)
+++ webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml Mon Jan  7 05:22:14 2008
@@ -350,6 +350,7 @@
     <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
         <parameter name="param1">value1</parameter>
         <parameter name="domain">apache.axis2.domain</parameter>
+        <parameter name="synchronizeAll">true</parameter>
     	<configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
     	    <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
     	</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?rev=609597&r1=609596&r2=609597&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 Jan  7 05:22:14 2008
@@ -21,9 +21,8 @@
 
 import org.apache.axis2.clustering.configuration.ConfigurationManager;
 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;
+import org.apache.axis2.description.ParameterInclude;
 
 /**
  * This is the main interface in the Axis2 clustering implementation.
@@ -70,5 +69,15 @@
      * @param configurationContext
      */
     void setConfigurationContext(ConfigurationContext configurationContext);
+
+    /**
+     * Method to check whether all members in the cluster have to be kep in sync at all times.
+     * Typically, this will require each member in the cluster to ACKnowledge receipt of a
+     * particular message, which may have a significant performance hit.
+     *
+     * @return true - if all members in the cluster should be kept in sync at all times,
+     *         false otherwise
+     */
+    boolean synchronizeAllMembers();
 
 }

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?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- 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 Mon Jan  7 05:22:14 2008
@@ -20,17 +20,31 @@
 
 package org.apache.axis2.clustering;
 
+/**
+ * All constants used by the Axis2 clustering implementation
+ */
 public final class ClusteringConstants {
 
     private ClusteringConstants() {
     }
 
     public static final String AVOID_INITIATION_KEY = "AvoidInitiation";
+
+    /**
+     * The clustering domain/group. Nodes in the same group will belong to the same multicast domain.
+     * There will not be interference between nodes in different group.
+     */
     public static final String DOMAIN = "domain";
+
     public static final String NODE_MANAGER_SERVICE = "Axis2NodeManager";
     public static final String REQUEST_BLOCKING_HANDLER = "RequestBlockingHandler";
     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";
     public static final String LOCAL_IP_ADDRESS = "axis2.local.ip.address";
+
+    /**
+     * Synchronize the states of all members in the cluster
+     */
+    public static final String SYNCHRONIZE_ALL_MEMBERS = "synchronizeAll";
 }

Modified: 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?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java Mon Jan  7 05:22:14 2008
@@ -33,6 +33,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * Replicates serializable properties
+ */
 public final class Replicator {
 
     private static final Log log = LogFactory.getLog(Replicator.class);
@@ -77,7 +80,9 @@
             AbstractContext[] contextArray =
                     (AbstractContext[]) contexts.toArray(new AbstractContext[contexts.size()]);
             String msgUUID = contextManager.updateContexts(contextArray);
-            waitForACKs(contextManager, msgUUID, msgContext.getRootContext());
+            if (getClusterManager(msgContext).synchronizeAllMembers()) {
+                waitForACKs(contextManager, msgUUID, msgContext.getRootContext());
+            }
         }
     }
 
@@ -95,7 +100,9 @@
         ContextManager contextManager = getContextManager(abstractContext);
         if (!abstractContext.getPropertyDifferences().isEmpty()) {
             String msgUUID = contextManager.updateContext(abstractContext);
-            waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
+            if (getClusterManager(abstractContext).synchronizeAllMembers()) {
+                waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
+            }
         }
     }
 
@@ -116,14 +123,18 @@
         ContextManager contextManager = getContextManager(abstractContext);
         String msgUUID = contextManager.updateContext(abstractContext, propertyNames);
         if (msgUUID != null) {
-            waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
+            if (getClusterManager(abstractContext).synchronizeAllMembers()) {
+                waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
+            }
         }
     }
 
+    private static ClusterManager getClusterManager(AbstractContext abstractContext) {
+        return abstractContext.getRootContext().getAxisConfiguration().getClusterManager();
+    }
+
     private static ContextManager getContextManager(AbstractContext abstractContext) {
-        ClusterManager clusterManager =
-                abstractContext.getRootContext().getAxisConfiguration().getClusterManager();
-        return clusterManager.getContextManager();
+        return getClusterManager(abstractContext).getContextManager();
     }
 
     /**
@@ -162,6 +173,7 @@
     private static void waitForACKs(ContextManager contextManager,
                                     String msgUUID,
                                     ConfigurationContext configCtx) throws ClusteringFault {
+
         long start = System.currentTimeMillis();
 
         // Wait till all members have ACKed receipt & successful processing of

Modified: webservices/axis2/trunk/java/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/pom.xml?rev=609597&r1=609596&r2=609597&view=diff
==============================================================================
--- webservices/axis2/trunk/java/pom.xml (original)
+++ webservices/axis2/trunk/java/pom.xml Mon Jan  7 05:22:14 2008
@@ -17,255 +17,258 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<parent>
-		<groupId>org.apache</groupId>
-		<artifactId>apache</artifactId>
-		<version>3</version>
-	</parent>
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>org.apache.axis2</groupId>
-	<artifactId>axis2</artifactId>
-	<version>SNAPSHOT</version>
-	<packaging>pom</packaging>
-	<name>Apache Axis 2.0 - Root</name>
-	<modules>
-		<module>modules/adb</module>
-		<module>modules/adb-codegen</module>
-		<module>modules/addressing</module>
-		<module>modules/codegen</module>
-		<module>modules/fastinfoset</module>
-		<module>modules/integration</module>
-		<module>modules/java2wsdl</module>
-		<module>modules/jibx</module>
-		<module>modules/json</module>
-		<module>modules/kernel</module>
-		<module>modules/mex</module>
-		<module>modules/mex-mar</module>
-		<module>modules/mtompolicy</module>
-		<module>modules/parent</module>
-		<module>modules/ping</module>
-		<module>modules/samples/version</module>
-		<module>modules/soapmonitor</module>
-		<module>modules/spring</module>
-		<module>modules/tool/axis2-aar-maven-plugin</module>
-		<module>modules/tool/axis2-ant-plugin</module>
-		<module>modules/tool/axis2-eclipse-codegen-plugin</module>
-		<module>modules/tool/axis2-eclipse-service-plugin</module>
-		<module>modules/tool/axis2-idea-plugin</module>
-		<module>modules/tool/axis2-java2wsdl-maven-plugin</module>
-		<module>modules/tool/axis2-mar-maven-plugin</module>
-		<module>modules/tool/axis2-wsdl2code-maven-plugin</module>
-		<module>modules/webapp</module>
-		<module>modules/xmlbeans</module>
-		<module>modules/samples</module>
-	        <module>modules/scripting</module>
-	        <module>modules/rmi</module>
-	</modules>
- 	<profiles>
-	   <profile>
-		<activation>
-		  <property>
-			<name>release</name>
-		  </property>
-		</activation>
-			<modules>
-				<module>modules/documentation</module>
-				<module>modules/distribution</module>
-			</modules>
-	    </profile>	
-		<profile>
-			<id>java14</id>
-			<activation>
-				<jdk>1.4</jdk>
-			</activation>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-antrun-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>axis2-jar</id>
-								<phase>package</phase>
-								<configuration>
-									<tasks>
-										<mkdir dir="target/lib"/>
-										<jar destfile="target/lib/axis2-${pom.version}.jar">
-											<fileset dir="modules/java2wsdl/target/classes"/>
-											<fileset dir="modules/kernel/target/classes"/>
-											<fileset dir="modules/addressing/target/classes"/>
-											<fileset dir="modules/codegen/target/classes"/>
-											<fileset dir="modules/adb/target/classes"/>
-											<fileset dir="modules/adb-codegen/target/classes"/>
-											<fileset dir="modules/xmlbeans/target/classes"/>
-										</jar>
-									</tasks>
-								</configuration>
-								<goals>
-									<goal>run</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		<profile>
-			<id>java15</id>
-			<activation>
-				<jdk>1.5</jdk>
-			</activation>
-			<modules>
-				<module>modules/jaxbri</module>
-				<module>modules/metadata</module>
-				<module>modules/saaj-api</module>
-				<module>modules/saaj</module>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>3</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.axis2</groupId>
+    <artifactId>axis2</artifactId>
+    <version>SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>Apache Axis 2.0 - Root</name>
+    <modules>
+        <module>modules/adb</module>
+        <module>modules/adb-codegen</module>
+        <module>modules/addressing</module>
+        <module>modules/codegen</module>
+        <module>modules/fastinfoset</module>
+        <module>modules/integration</module>
+        <module>modules/java2wsdl</module>
+        <module>modules/jibx</module>
+        <module>modules/json</module>
+        <module>modules/kernel</module>
+        <module>modules/mex</module>
+        <module>modules/mex-mar</module>
+        <module>modules/mtompolicy</module>
+        <module>modules/parent</module>
+        <module>modules/ping</module>
+        <module>modules/samples/version</module>
+        <module>modules/soapmonitor</module>
+        <module>modules/spring</module>
+        <module>modules/tool/axis2-aar-maven-plugin</module>
+        <module>modules/tool/axis2-ant-plugin</module>
+        <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+        <module>modules/tool/axis2-eclipse-service-plugin</module>
+        <module>modules/tool/axis2-idea-plugin</module>
+        <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+        <module>modules/tool/axis2-mar-maven-plugin</module>
+        <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+        <module>modules/webapp</module>
+        <module>modules/xmlbeans</module>
+        <module>modules/samples</module>
+        <module>modules/scripting</module>
+        <module>modules/rmi</module>
+    </modules>
+    <profiles>
+        <profile>
+            <activation>
+                <property>
+                    <name>release</name>
+                </property>
+            </activation>
+            <modules>
+                <module>modules/documentation</module>
+                <module>modules/distribution</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>java14</id>
+            <activation>
+                <jdk>1.4</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>axis2-jar</id>
+                                <phase>package</phase>
+                                <configuration>
+                                    <tasks>
+                                        <mkdir dir="target/lib"/>
+                                        <jar destfile="target/lib/axis2-${pom.version}.jar">
+                                            <fileset dir="modules/java2wsdl/target/classes"/>
+                                            <fileset dir="modules/kernel/target/classes"/>
+                                            <fileset dir="modules/addressing/target/classes"/>
+                                            <fileset dir="modules/codegen/target/classes"/>
+                                            <fileset dir="modules/adb/target/classes"/>
+                                            <fileset dir="modules/adb-codegen/target/classes"/>
+                                            <fileset dir="modules/xmlbeans/target/classes"/>
+                                        </jar>
+                                    </tasks>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>java15</id>
+            <activation>
+                <jdk>1.5</jdk>
+            </activation>
+            <modules>
+                <module>modules/jaxbri</module>
+                <module>modules/metadata</module>
+                <module>modules/saaj-api</module>
+                <module>modules/saaj</module>
                 <module>modules/jws-api</module>
-				<module>modules/jaxws-api</module>
-				<module>modules/jaxws</module>
-				<module>modules/clustering</module>
-				<module>modules/corba</module>
-			</modules>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-antrun-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>axis2-jar</id>
-								<phase>package</phase>
-								<configuration>
-									<tasks>
-										<mkdir dir="target/lib"/>
-										<jar destfile="target/lib/axis2-${pom.version}.jar">
-											<fileset dir="modules/java2wsdl/target/classes"/>
-											<fileset dir="modules/kernel/target/classes"/>
-											<fileset dir="modules/addressing/target/classes"/>
-											<fileset dir="modules/codegen/target/classes"/>
-											<fileset dir="modules/adb/target/classes"/>
-											<fileset dir="modules/adb-codegen/target/classes"/>
-											<fileset dir="modules/xmlbeans/target/classes"/>
-											<fileset dir="modules/clustering/target/classes"/>
-										</jar>
-									</tasks>
-								</configuration>
-								<goals>
-									<goal>run</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		<profile>
-			<id>java16</id>
-			<activation>
-				<jdk>1.6</jdk>
-			</activation>
-			<modules>
-				<module>modules/jaxbri</module>
-				<module>modules/metadata</module>
-				<module>modules/saaj-api</module>
-				<module>modules/saaj</module>
+                <module>modules/jaxws-api</module>
+                <module>modules/jaxws</module>
+                <module>modules/clustering</module>
+                <module>modules/corba</module>
+            </modules>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>axis2-jar</id>
+                                <phase>package</phase>
+                                <configuration>
+                                    <tasks>
+                                        <mkdir dir="target/lib"/>
+                                        <jar destfile="target/lib/axis2-${pom.version}.jar">
+                                            <fileset dir="modules/java2wsdl/target/classes"/>
+                                            <fileset dir="modules/kernel/target/classes"/>
+                                            <fileset dir="modules/addressing/target/classes"/>
+                                            <fileset dir="modules/codegen/target/classes"/>
+                                            <fileset dir="modules/adb/target/classes"/>
+                                            <fileset dir="modules/adb-codegen/target/classes"/>
+                                            <fileset dir="modules/xmlbeans/target/classes"/>
+                                            <fileset dir="modules/clustering/target/classes"/>
+                                        </jar>
+                                    </tasks>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>java16</id>
+            <activation>
+                <jdk>1.6</jdk>
+            </activation>
+            <modules>
+                <module>modules/jaxbri</module>
+                <module>modules/metadata</module>
+                <module>modules/saaj-api</module>
+                <module>modules/saaj</module>
                 <module>modules/jws-api</module>
-				<module>modules/jaxws-api</module>
-				<module>modules/jaxws</module>
-				<module>modules/clustering</module>
-				<module>modules/corba</module>
-			</modules>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-antrun-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>axis2-jar</id>
-								<phase>package</phase>
-								<configuration>
-									<tasks>
-										<mkdir dir="target/lib"/>
-										<jar destfile="target/lib/axis2-${pom.version}.jar">
-											<fileset dir="modules/java2wsdl/target/classes"/>
-											<fileset dir="modules/kernel/target/classes"/>
-											<fileset dir="modules/addressing/target/classes"/>
-											<fileset dir="modules/codegen/target/classes"/>
-											<fileset dir="modules/adb/target/classes"/>
-											<fileset dir="modules/adb-codegen/target/classes"/>
-											<fileset dir="modules/xmlbeans/target/classes"/>
-											<fileset dir="modules/clustering/target/classes"/>
-										</jar>
-									</tasks>
-								</configuration>
-								<goals>
-									<goal>run</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-	<ciManagement>
-		<system>continuum</system>
-		<url>http://vmbuild.apache.org/continuum</url>
-		<notifiers>
-			<notifier>
-				<configuration>
-					<ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
-				</configuration>
-			</notifier>
-		</notifiers>
-	</ciManagement>
-	<scm>
-		<connection>
-         scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
-      </connection>
-		<developerConnection>
-         scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
-      </developerConnection>
-		<url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
-	</scm>
-	<distributionManagement>
-		<repository>
-			<id>apache-repo</id>
-			<name>Maven Central Repository</name>
-			<url>
-            scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
-		</repository>
-		<snapshotRepository>
-			<id>apache-snapshots</id>
-			<name>Apache Development Repository</name>
-			<url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
-		</snapshotRepository>
-	</distributionManagement>
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>axis2-jar-package</id>
-						<phase>package</phase>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>target/lib/axis2-${pom.version}.jar</file>
-									<type>jar</type>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+                <module>modules/jaxws-api</module>
+                <module>modules/jaxws</module>
+                <module>modules/clustering</module>
+                <module>modules/corba</module>
+            </modules>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>axis2-jar</id>
+                                <phase>package</phase>
+                                <configuration>
+                                    <tasks>
+                                        <mkdir dir="target/lib"/>
+                                        <jar destfile="target/lib/axis2-${pom.version}.jar">
+                                            <fileset dir="modules/java2wsdl/target/classes"/>
+                                            <fileset dir="modules/kernel/target/classes"/>
+                                            <fileset dir="modules/addressing/target/classes"/>
+                                            <fileset dir="modules/codegen/target/classes"/>
+                                            <fileset dir="modules/adb/target/classes"/>
+                                            <fileset dir="modules/adb-codegen/target/classes"/>
+                                            <fileset dir="modules/xmlbeans/target/classes"/>
+                                            <fileset dir="modules/clustering/target/classes"/>
+                                        </jar>
+                                    </tasks>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+    <ciManagement>
+        <system>continuum</system>
+        <url>http://vmbuild.apache.org/continuum</url>
+        <notifiers>
+            <notifier>
+                <configuration>
+                    <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+                </configuration>
+            </notifier>
+        </notifiers>
+    </ciManagement>
+    <scm>
+        <connection>
+            scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+        </connection>
+        <developerConnection>
+            scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+        </developerConnection>
+        <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+    </scm>
+    <distributionManagement>
+        <repository>
+            <id>apache-repo</id>
+            <name>Maven Central Repository</name>
+            <url>
+                scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository
+            </url>
+        </repository>
+        <snapshotRepository>
+            <id>apache-snapshots</id>
+            <name>Apache Development Repository</name>
+            <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+        </snapshotRepository>
+    </distributionManagement>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>axis2-jar-package</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>target/lib/axis2-${pom.version}.jar</file>
+                                    <type>jar</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org