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);
}
}