You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2011/06/02 12:04:12 UTC

svn commit: r1130459 - /cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java

Author: ningjiang
Date: Thu Jun  2 10:04:11 2011
New Revision: 1130459

URL: http://svn.apache.org/viewvc?rev=1130459&view=rev
Log:
CXF-3567
Do not use timer for JMSContinuation timeout task

Modified:
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java?rev=1130459&r1=1130458&r2=1130459&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java Thu Jun  2 10:04:11 2011
@@ -20,20 +20,22 @@
 package org.apache.cxf.transport.jms.continuations;
 
 import java.util.Collection;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.logging.Logger;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.continuations.Continuation;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.transport.MessageObserver;
 import org.apache.cxf.transport.jms.JMSConfiguration;
+import org.apache.cxf.workqueue.WorkQueue;
+import org.apache.cxf.workqueue.WorkQueueManager;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
 
 public class JMSContinuation implements Continuation {
-    
+    private static final Logger LOG = LogUtils.getL7dLogger(JMSContinuation.class);
     private Bus bus;
     private Message inMessage;
     private MessageObserver incomingObserver;
@@ -46,7 +48,8 @@ public class JMSContinuation implements 
     private volatile boolean isNew = true;
     private volatile boolean isPending;
     private volatile boolean isResumed;
-    private Timer timer;
+    private volatile boolean isCanceled;
+    private WorkQueue workQueue;
     
     public JMSContinuation(Bus b, Message m, MessageObserver observer,
                            Collection<JMSContinuation> cList, 
@@ -58,7 +61,16 @@ public class JMSContinuation implements 
         continuations = cList;
         this.jmsListener = jmsListener;
         this.jmsConfig = jmsConfig;
-    }    
+        WorkQueueManager manager = bus.getExtension(WorkQueueManager.class);
+        if (manager != null) {
+            workQueue =  manager.getNamedWorkQueue("jms-continuation");
+            if (workQueue == null) {
+                workQueue = manager.getAutomaticWorkQueue();
+            }
+        } else {
+            LOG.warning("ERROR_GETTING_WORK_QUEUE");
+        }
+    }
     
     public Object getObject() {
         return userObject;
@@ -134,12 +146,10 @@ public class JMSContinuation implements 
     }
 
     protected void createTimerTask(long timeout) {
-        timer = new Timer();
-        timer.schedule(new TimerTask() {
+        workQueue.schedule(new Runnable() {
             public void run() {
                 synchronized (JMSContinuation.this) { 
-                    if (isPending) {
-                        cancelTimerTask();
+                    if (isPending && !isCanceled) {
                         doResume();
                     }
                 }
@@ -147,11 +157,8 @@ public class JMSContinuation implements 
         }, timeout);
     }
     
-    protected void cancelTimerTask() {
-        if (timer != null) {
-            timer.cancel();
-            timer = null;
-        }
+    protected synchronized void cancelTimerTask() {
+        isCanceled = true;
     }
     
     protected void updateContinuations(boolean remove) {