Author: azeez
Date: Tue Dec 21 10:01:54 2010
New Revision: 1051441

URL: http://svn.apache.org/viewvc?rev=1051441&view=rev
Log:
Code improvements based on FindBugs feedback


Added:
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java
Removed:
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/ChannelListener.java
Modified:
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/ClusteringUtils.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberJoinedCommand.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberListCommand.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/management/commands/ShutdownMemberCommand.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusteringAgent.java
    
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/ClusteringUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/ClusteringUtils.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/ClusteringUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/ClusteringUtils.java
 Tue Dec 21 10:01:54 2010
@@ -37,6 +37,8 @@ import java.util.Random;
  */
 public class ClusteringUtils {
 
+    private static final Random RANDOM = new Random();
+
     /**
      * Load a ServiceGroup having name <code>serviceGroupName</code>
      *
@@ -55,14 +57,23 @@ public class ClusteringUtils {
         String axis2Repo = System.getProperty(Constants.AXIS2_REPO);
         if (isURL(axis2Repo)) {
             DataHandler dh = new DataHandler(new URL(axis2Repo + "services/" + 
serviceGroupName));
-            String tempDir =
+            String tempDirName =
                     tempDirectory + File.separator +
-                    (System.currentTimeMillis() + new Random().nextDouble());
-            new File(tempDir).mkdirs();
-            serviceArchive = new File(tempDir + File.separator + 
serviceGroupName);
-            FileOutputStream out = new FileOutputStream(serviceArchive);
-            dh.writeTo(out);
-            out.close();
+                    (System.currentTimeMillis() + RANDOM.nextDouble());
+            if(!new File(tempDirName).mkdirs()) {
+                 throw new Exception("Could not create temp dir " + 
tempDirName);
+            }
+            serviceArchive = new File(tempDirName + File.separator + 
serviceGroupName);
+            FileOutputStream out = null;
+            try {
+                out = new FileOutputStream(serviceArchive);
+                dh.writeTo(out);
+                out.close();
+            } finally {
+                if (out != null) {
+                    out.close();
+                }
+            }
         } else {
             serviceArchive = new File(axis2Repo + File.separator + "services" +
                                       File.separator + serviceGroupName);

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberJoinedCommand.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberJoinedCommand.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberJoinedCommand.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberJoinedCommand.java
 Tue Dec 21 10:01:54 2010
@@ -30,8 +30,9 @@ import java.util.Arrays;
  */
 public class MemberJoinedCommand extends ControlCommand {
 
+    private static final long serialVersionUID = -6596472883950279349L;
     private Member member;
-    private MembershipManager membershipManager;
+    private transient MembershipManager membershipManager;
 
     public void setMembershipManager(MembershipManager membershipManager) {
         this.membershipManager = membershipManager;

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberListCommand.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberListCommand.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberListCommand.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/control/wka/MemberListCommand.java
 Tue Dec 21 10:01:54 2010
@@ -34,9 +34,10 @@ import java.util.Arrays;
 public class MemberListCommand extends ControlCommand {
 
     private static final Log log = LogFactory.getLog(MemberListCommand.class);
+    private static final long serialVersionUID = 5687720124889269491L;
 
     private Member[] members;
-    private MembershipManager membershipManager;
+    private transient MembershipManager membershipManager;
 
     public void setMembershipManager(MembershipManager membershipManager) {
         this.membershipManager = membershipManager;

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/management/commands/ShutdownMemberCommand.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/management/commands/ShutdownMemberCommand.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/management/commands/ShutdownMemberCommand.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/management/commands/ShutdownMemberCommand.java
 Tue Dec 21 10:01:54 2010
@@ -20,7 +20,7 @@ import org.apache.axis2.clustering.manag
 import org.apache.axis2.context.ConfigurationContext;
 
 /**
- *
+ * This command is sent when a node in the cluster needs to be shutdown
  */
 public class ShutdownMemberCommand extends GroupManagementCommand {
     public void execute(ConfigurationContext configContext) throws 
ClusteringFault{

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
 Tue Dec 21 10:01:54 2010
@@ -35,10 +35,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * This class is the defaut StateManager of the Apache Tribes based clustering 
implementation
+ */
 public class DefaultStateManager implements StateManager {
 
-    private ConfigurationContext configContext;
-
     private final Map<String, Parameter> parameters = new HashMap<String, 
Parameter>();
 
     private ChannelSender sender;
@@ -91,7 +92,7 @@ public class DefaultStateManager impleme
     }
 
     public void setConfigurationContext(ConfigurationContext 
configurationContext) {
-        this.configContext = configurationContext;
+        // Nothing to do here
     }
 
     public void setReplicationExcludePatterns(String contextType, List 
patterns) {

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java
 Tue Dec 21 10:01:54 2010
@@ -33,7 +33,7 @@ import java.util.Map;
 /**
  * Message intereceptor for handling at-most-once message processing semantics
  */
-public class AtMostOnceInterceptor extends ChannelInterceptorBase {          
+public final class AtMostOnceInterceptor extends ChannelInterceptorBase {
 
     private static Log log = LogFactory.getLog(AtMostOnceInterceptor.class);
     private static final Map<MessageId, Long> receivedMessages =

Added: 
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=1051441&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/Axis2ChannelListener.java
 Tue Dec 21 10:01:54 2010
@@ -0,0 +1,151 @@
+/*
+ * 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.tribes;
+
+import org.apache.axis2.clustering.ClusteringConstants;
+import org.apache.axis2.clustering.ClusteringFault;
+import org.apache.axis2.clustering.management.DefaultNodeManager;
+import org.apache.axis2.clustering.management.GroupManagementCommand;
+import org.apache.axis2.clustering.management.NodeManagementCommand;
+import org.apache.axis2.clustering.state.DefaultStateManager;
+import org.apache.axis2.clustering.state.StateClusteringCommand;
+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 org.apache.catalina.tribes.ByteMessage;
+import org.apache.catalina.tribes.ChannelListener;
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.RemoteProcessException;
+import org.apache.catalina.tribes.group.RpcMessage;
+import org.apache.catalina.tribes.io.XByteBuffer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * This is the Tribes channel listener which is used for listening on the 
channels, receiving
+ * messages & accepting messages.
+ */
+public class Axis2ChannelListener implements ChannelListener {
+    private static final Log log = 
LogFactory.getLog(Axis2ChannelListener.class);
+
+    private DefaultStateManager stateManager;
+    private DefaultNodeManager nodeManager;
+
+    private ConfigurationContext configurationContext;
+
+    public Axis2ChannelListener(ConfigurationContext configurationContext,
+                                DefaultNodeManager nodeManager,
+                                DefaultStateManager stateManager) {
+        this.nodeManager = nodeManager;
+        this.stateManager = stateManager;
+        this.configurationContext = configurationContext;
+    }
+
+    public void setStateManager(DefaultStateManager stateManager) {
+        this.stateManager = stateManager;
+    }
+
+    public void setNodeManager(DefaultNodeManager nodeManager) {
+        this.nodeManager = nodeManager;
+    }
+
+    public void setConfigurationContext(ConfigurationContext 
configurationContext) {
+        this.configurationContext = configurationContext;
+    }
+
+    /**
+     * Invoked by the channel to determine if the listener will process this 
message or not.
+     * @param msg Serializable
+     * @param sender Member
+     * @return boolean
+     */
+    public boolean accept(Serializable msg, Member sender) {
+        return !(msg instanceof RpcMessage);  // RpcMessages  will not be 
handled by this listener
+    }
+
+    /**
+     * Receive a message from the channel
+     * @param msg Serializable
+     * @param sender - the source of the message
+     */
+    public void messageReceived(Serializable msg, Member sender) {
+        try {
+            AxisConfiguration configuration = 
configurationContext.getAxisConfiguration();
+            List<ClassLoader> classLoaders = new ArrayList<ClassLoader>();
+            classLoaders.add(configuration.getSystemClassLoader());
+            classLoaders.add(getClass().getClassLoader());
+            for (Iterator iter = configuration.getServiceGroups(); 
iter.hasNext();) {
+                AxisServiceGroup group = (AxisServiceGroup) iter.next();
+                classLoaders.add(group.getServiceGroupClassLoader());
+            }
+            for(Object obj: configuration.getModules().values()){    
+                AxisModule module = (AxisModule) obj;
+                classLoaders.add(module.getModuleClassLoader());
+            }
+            byte[] message = ((ByteMessage) msg).getMessage();
+            msg = XByteBuffer.deserialize(message,
+                                          0,
+                                          message.length,
+                                          classLoaders.toArray(new 
ClassLoader[classLoaders.size()]));
+        } catch (Exception e) {
+            String errMsg = "Cannot deserialize received message";
+            log.error(errMsg, e);
+            throw new RemoteProcessException(errMsg, e);
+        }
+
+        // If the system has not still been intialized, reject all incoming 
messages, except the
+        // GetStateResponseCommand message
+        if (configurationContext.
+                
getPropertyNonReplicable(ClusteringConstants.CLUSTER_INITIALIZED) == null) {
+            log.warn("Received message " + msg +
+                     " before cluster initialization has been completed from " 
+
+                     TribesUtil.getName(sender));
+            return;
+        }
+        if (log.isDebugEnabled()) {
+            log.debug("Received message " + msg + " from " + 
TribesUtil.getName(sender));
+        }
+
+        try {
+            processMessage(msg);
+        } catch (Exception e) {
+            String errMsg = "Cannot process received message";
+            log.error(errMsg, e);
+            throw new RemoteProcessException(errMsg, e);
+        }
+    }
+
+    private void processMessage(Serializable msg) throws ClusteringFault {
+        if (msg instanceof StateClusteringCommand && stateManager != null) {
+            StateClusteringCommand ctxCmd = (StateClusteringCommand) msg;
+            ctxCmd.execute(configurationContext);
+        } else if (msg instanceof NodeManagementCommand && nodeManager != 
null) {
+            ((NodeManagementCommand) msg).execute(configurationContext);
+        } else if (msg instanceof GroupManagementCommand){
+            ((GroupManagementCommand) msg).execute(configurationContext);
+        }
+    }
+}

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=1051441&r1=1051440&r2=1051441&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 Dec 21 10:01:54 2010
@@ -61,6 +61,7 @@ import org.apache.commons.logging.LogFac
 import javax.xml.namespace.QName;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -84,7 +85,7 @@ public class TribesClusteringAgent imple
     private ManagedChannel channel;
     private RpcChannel rpcInitChannel;
     private ConfigurationContext configurationContext;
-    private ChannelListener channelListener;
+    private Axis2ChannelListener axis2ChannelListener;
     private ChannelSender channelSender;
     private MembershipManager primaryMembershipManager;
     private RpcInitializationRequestHandler rpcInitRequestHandler;
@@ -152,9 +153,9 @@ public class TribesClusteringAgent imple
 
         channel = new GroupChannel();
         channelSender = new ChannelSender(channel, primaryMembershipManager, 
synchronizeAllMembers());
-        channelListener =
-                new ChannelListener(configurationContext, 
configurationManager, contextManager);
-        channel.addChannelListener(channelListener);
+        axis2ChannelListener =
+                new Axis2ChannelListener(configurationContext, 
configurationManager, contextManager);
+        channel.addChannelListener(axis2ChannelListener);
 
         byte[] domain = getClusterDomain();
         log.info("Cluster domain: " + new String(domain));
@@ -206,7 +207,7 @@ public class TribesClusteringAgent imple
         // If context replication is enabled, get the latest state from a 
neighbour
         if (contextManager != null) {
             contextManager.setSender(channelSender);
-            channelListener.setStateManager(contextManager);
+            axis2ChannelListener.setStateManager(contextManager);
             initializeSystem(new GetStateCommand());
             ClusteringContextListener contextListener = new 
ClusteringContextListener(channelSender);
             configurationContext.addContextListener(contextListener);
@@ -565,7 +566,15 @@ public class TribesClusteringAgent imple
                                 "or boolean parameter");
             }
 
-        } catch (Exception e) {
+        } catch (InvocationTargetException e) {
+            handleException("Error invoking setter method named : " + mName +
+                            "() that takes a single String, int, long, float, 
double " +
+                            "or boolean parameter", e);
+        } catch (NoSuchMethodException e) {
+            handleException("Error invoking setter method named : " + mName +
+                            "() that takes a single String, int, long, float, 
double " +
+                            "or boolean parameter", e);
+        } catch (IllegalAccessException e) {
             handleException("Error invoking setter method named : " + mName +
                             "() that takes a single String, int, long, float, 
double " +
                             "or boolean parameter", e);
@@ -701,7 +710,7 @@ public class TribesClusteringAgent imple
         if (channel != null) {
             try {
                 channel.removeChannelListener(rpcInitChannel);
-                channel.removeChannelListener(channelListener);
+                channel.removeChannelListener(axis2ChannelListener);
                 channel.stop(Channel.DEFAULT);
             } catch (ChannelException e) {
 
@@ -720,8 +729,8 @@ public class TribesClusteringAgent imple
         if (rpcInitRequestHandler != null) {
             
rpcInitRequestHandler.setConfigurationContext(configurationContext);
         }
-        if (channelListener != null) {
-            channelListener.setConfigurationContext(configurationContext);
+        if (axis2ChannelListener != null) {
+            axis2ChannelListener.setConfigurationContext(configurationContext);
         }
         if (configurationManager != null) {
             configurationManager.setConfigurationContext(configurationContext);

Modified: 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java?rev=1051441&r1=1051440&r2=1051441&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaMembershipService.java
 Tue Dec 21 10:01:54 2010
@@ -38,10 +38,16 @@ public class WkaMembershipService implem
      */
     protected Properties properties = new Properties();
 
+    /**
+     * This payload contains some membership information, such as some member 
specific properties
+     * e.g. HTTP/S ports
+     */
     protected byte[] payload;
 
+    /**
+     * The domain name of this cluster
+     */
     protected byte[] domain;
-    private MembershipListener membershipListener;
 
     public WkaMembershipService(MembershipManager membershipManager) {
         this.membershipManager = membershipManager;
@@ -129,11 +135,11 @@ public class WkaMembershipService implem
     }
 
     public void setMembershipListener(MembershipListener membershipListener) {
-        this.membershipListener = membershipListener;
+        // Nothing to do
     }
 
     public void removeMembershipListener() {
-        this.membershipListener = null;
+        // Nothing to do
     }
 
     public void setPayload(byte[] payload) {


Reply via email to