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/05/21 06:53:35 UTC

svn commit: r658552 - /webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java

Author: azeez
Date: Tue May 20 21:53:35 2008
New Revision: 658552

URL: http://svn.apache.org/viewvc?rev=658552&view=rev
Log:
Code improvements


Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java?rev=658552&r1=658551&r2=658552&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/AtMostOnceInterceptor.java Tue May 20 21:53:35 2008
@@ -36,7 +36,8 @@
 public class AtMostOnceInterceptor extends ChannelInterceptorBase {          
 
     private static Log log = LogFactory.getLog(AtMostOnceInterceptor.class);
-    private static final Map receivedMessages = new HashMap();
+    private static final Map<ChannelMessage, Long> receivedMessages =
+            new HashMap<ChannelMessage, Long>();
 
     /**
      * The time a message lives in the receivedMessages Map
@@ -52,7 +53,7 @@
     public void messageReceived(ChannelMessage msg) {
         synchronized (receivedMessages) {
             if (receivedMessages.get(msg) == null) {  // If it is a new message, keep track of it
-                receivedMessages.put(msg, new Long(System.currentTimeMillis()));
+                receivedMessages.put(msg, System.currentTimeMillis());
                 super.messageReceived(msg);
             } else {  // If it is a duplicate message, discard it. i.e. dont call super.messageReceived
                 log.info("Duplicate message received from " + TribesUtil.getHost(msg.getAddress()));
@@ -63,36 +64,33 @@
     private class MessageCleanupTask implements Runnable {
 
         public void run() {
-            while (true) {
+            while (true) { // This task should never terminate
                 try {
                     Thread.sleep(TIMEOUT);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
                 try {
-                    List toBeRemoved = new ArrayList();
+                    List<ChannelMessage> toBeRemoved = new ArrayList<ChannelMessage>();
                     Thread.yield();
                     synchronized (receivedMessages) {
-                        for (Iterator iterator = receivedMessages.keySet().iterator();
-                             iterator.hasNext();) {
-                            ChannelMessage msg = (ChannelMessage) iterator.next();
-                            long arrivalTime = ((Long) receivedMessages.get(msg)).longValue();
+                        for (ChannelMessage msg : receivedMessages.keySet()) {
+                            long arrivalTime = receivedMessages.get(msg);
                             if (System.currentTimeMillis() - arrivalTime >= TIMEOUT) {
                                 toBeRemoved.add(msg);
-                                if(toBeRemoved.size() > 10000){ // Do not allow this thread to run for too long
+                                if (toBeRemoved.size() > 10000) { // Do not allow this thread to run for too long
                                     break;
                                 }
                             }
                         }
-                        for (Iterator iterator = toBeRemoved.iterator(); iterator.hasNext();) {
-                            ChannelMessage msg = (ChannelMessage) iterator.next();
+                        for (ChannelMessage msg : toBeRemoved) {
                             receivedMessages.remove(msg);
                             if (log.isDebugEnabled()) {
                                 log.debug("Cleaned up message ");
                             }
                         }
                     }
-                } catch (Exception e) {
+                } catch (Throwable e) {
                     log.error("Exception occurred while trying to cleanup messages", e);
                 }
             }