You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/07/11 16:25:36 UTC
svn commit: r1360188 - in /cxf/trunk/api/src:
main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
Author: dkulp
Date: Wed Jul 11 14:25:36 2012
New Revision: 1360188
URL: http://svn.apache.org/viewvc?rev=1360188&view=rev
Log:
[CXF-4417] Fix problem of not throwing rejectedexecutionexception if
runnable was not enqueued.
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
cxf/trunk/api/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java?rev=1360188&r1=1360187&r2=1360188&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java Wed Jul 11 14:25:36 2012
@@ -435,9 +435,11 @@ public class AutomaticWorkQueueImpl impl
execute(work);
} catch (RejectedExecutionException ree) {
try {
- getExecutor().getQueue().offer(work, timeout, TimeUnit.MILLISECONDS);
+ if (!getExecutor().getQueue().offer(work, timeout, TimeUnit.MILLISECONDS)) {
+ throw ree;
+ }
} catch (InterruptedException ie) {
- throw new RejectedExecutionException(ie);
+ throw ree;
}
}
}
Modified: cxf/trunk/api/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java?rev=1360188&r1=1360187&r2=1360188&view=diff
==============================================================================
--- cxf/trunk/api/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java (original)
+++ cxf/trunk/api/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java Wed Jul 11 14:25:36 2012
@@ -77,6 +77,35 @@ public class AutomaticWorkQueueTest exte
assertEquals(DEFAULT_LOW_WATER_MARK, workqueue.getLowWaterMark());
}
+
+ @Test
+ public void testEnqueueWithTimeout() throws Exception {
+ workqueue = new AutomaticWorkQueueImpl(2, 2,
+ 2,
+ 2,
+ DEFAULT_DEQUEUE_TIMEOUT);
+
+ final Object lock = new Object();
+ int x = 0;
+ try {
+ synchronized (lock) {
+ for (x = 0; x < 6; x++) {
+ workqueue.execute(new Runnable() {
+ public void run() {
+ synchronized (lock) {
+ //just need to wait until all the runnables are created and enqueued and such.
+ }
+ }
+ }, 50);
+ }
+ }
+ fail("Should have failed with a RejectedExecutionException as 5th should not be queuable");
+ } catch (RejectedExecutionException rex) {
+ assertEquals(x, 4);
+ }
+ }
+
+
@Test
public void testEnqueue() {
workqueue = new AutomaticWorkQueueImpl(DEFAULT_MAX_QUEUE_SIZE, INITIAL_SIZE,