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/05/04 08:45:05 UTC

svn commit: r1099336 - in /cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local: LocalConduit.java LocalDestination.java LocalTransportFactory.java

Author: ningjiang
Date: Wed May  4 06:45:05 2011
New Revision: 1099336

URL: http://svn.apache.org/viewvc?rev=1099336&view=rev
Log:
CXF-3473 enhance the LocalTransport to get the executor from different way

Modified:
    cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java
    cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalDestination.java
    cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java

Modified: cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java?rev=1099336&r1=1099335&r2=1099336&view=diff
==============================================================================
--- cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java (original)
+++ cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java Wed May  4 06:45:05 2011
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import org.apache.cxf.common.logging.LogUtils;
@@ -34,6 +35,7 @@ import org.apache.cxf.message.ExchangeIm
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.transport.AbstractConduit;
+import org.apache.cxf.workqueue.SynchronousExecutor;
 
 public class LocalConduit extends AbstractConduit {
 
@@ -137,10 +139,17 @@ public class LocalConduit extends Abstra
                             destination.getMessageObserver().onMessage(inMsg);
                         }
                     };
-                    if (transportFactory.getExecutor() != null) {
-                        transportFactory.getExecutor().execute(receiver);
+                    Executor ex = message.getExchange() != null
+                        ? message.getExchange().get(Executor.class) : null;
+                    if (ex == null || SynchronousExecutor.isA(ex)) {
+                        ex = transportFactory.getExecutor();
+                        if (ex != null) {
+                            ex.execute(receiver);
+                        } else {
+                            new Thread(receiver).start();
+                        }
                     } else {
-                        new Thread(receiver).start();
+                        ex.execute(receiver);
                     }
                 }
             };

Modified: cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalDestination.java?rev=1099336&r1=1099335&r2=1099336&view=diff
==============================================================================
--- cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalDestination.java (original)
+++ cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalDestination.java Wed May  4 06:45:05 2011
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import org.apache.cxf.common.logging.LogUtils;
@@ -36,6 +37,7 @@ import org.apache.cxf.service.model.Endp
 import org.apache.cxf.transport.AbstractConduit;
 import org.apache.cxf.transport.AbstractDestination;
 import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.workqueue.SynchronousExecutor;
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 
 public class LocalDestination extends AbstractDestination {
@@ -97,10 +99,18 @@ public class LocalDestination extends Ab
                                     conduit.getMessageObserver().onMessage(m);
                                 }
                             };
-                            if (localDestinationFactory.getExecutor() != null) {
-                                localDestinationFactory.getExecutor().execute(receiver);
+                            Executor ex = message.getExchange() != null
+                                ? message.getExchange().get(Executor.class) : null;
+                            // Need to avoid to get the SynchronousExecutor
+                            if (ex == null || SynchronousExecutor.isA(ex)) {
+                                ex = localDestinationFactory.getExecutor();
+                                if (ex != null) {
+                                    ex.execute(receiver);
+                                } else {
+                                    new Thread(receiver).start();
+                                }
                             } else {
-                                new Thread(receiver).start();
+                                ex.execute(receiver);
                             }
                         }
                     };

Modified: cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java?rev=1099336&r1=1099335&r2=1099336&view=diff
==============================================================================
--- cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java (original)
+++ cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java Wed May  4 06:45:05 2011
@@ -126,7 +126,10 @@ public class LocalTransportFactory exten
                 if (executor == null) {
                     WorkQueueManager manager = bus.getExtension(WorkQueueManager.class);
                     if (manager != null) {
-                        executor =  manager.getAutomaticWorkQueue();
+                        executor =  manager.getNamedWorkQueue("local-transport");
+                        if (executor == null) {
+                            executor = manager.getAutomaticWorkQueue();
+                        }
                     }
                 }
             }