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/12 21:24:27 UTC
svn commit: r1360870 - in /cxf/branches/2.5.x-fixes:
api/src/main/java/org/apache/cxf/
rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/
rt/core/src/main/java/org/apache/cxf/endpoint/
rt/core/src/main/java/org/apache/cxf/interceptor/ rt/cor...
Author: dkulp
Date: Thu Jul 12 19:24:27 2012
New Revision: 1360870
URL: http://svn.apache.org/viewvc?rev=1360870&view=rev
Log:
Merged revisions 1360865 via git cherry-pick from
https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes
........
r1360865 | dkulp | 2012-07-12 15:21:11 -0400 (Thu, 12 Jul 2012) | 12 lines
Merged revisions 1360864 via git cherry-pick from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1360864 | dkulp | 2012-07-12 15:16:34 -0400 (Thu, 12 Jul 2012) | 4 lines
Update how the thread default bus is handled to reduce calls into the
synchronized block. (in some cases drops from 3 or more calls per
request to one).
........
........
Modified:
cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java
cxf/branches/2.5.x-fixes/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java
cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainInitiatorObserver.java
cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java
cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java
cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/transport/http_jaxws_spi/JAXWSHttpSpiDestination.java
cxf/branches/2.5.x-fixes/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
cxf/branches/2.5.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java
Modified: cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java (original)
+++ cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java Thu Jul 12 19:24:27 2012
@@ -127,8 +127,33 @@ public abstract class BusFactory {
*/
public static void setThreadDefaultBus(Bus bus) {
Thread cur = Thread.currentThread();
- synchronized (threadBusses) {
- threadBusses.put(cur, bus);
+ if (bus == null) {
+ synchronized (threadBusses) {
+ threadBusses.remove(cur);
+ }
+ } else {
+ synchronized (threadBusses) {
+ threadBusses.put(cur, bus);
+ }
+ }
+ }
+
+ /**
+ * Sets the default bus for the thread.
+ *
+ * @param bus the new thread default bus.
+ * @return the old thread default bus or null
+ */
+ public static Bus getAndSetThreadDefaultBus(Bus bus) {
+ Thread cur = Thread.currentThread();
+ if (bus == null) {
+ synchronized (threadBusses) {
+ return threadBusses.remove(cur);
+ }
+ } else {
+ synchronized (threadBusses) {
+ return threadBusses.put(cur, bus);
+ }
}
}
Modified: cxf/branches/2.5.x-fixes/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java Thu Jul 12 19:24:27 2012
@@ -60,13 +60,12 @@ public class ColocMessageObserver extend
}
public void onMessage(Message m) {
- Bus origBus = BusFactory.getThreadDefaultBus(false);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
}
- BusFactory.setThreadDefaultBus(bus);
if (LOG.isLoggable(Level.FINER)) {
LOG.finer("Processing Message at collocated endpoint. Request message: " + m);
}
@@ -131,7 +130,9 @@ public class ColocMessageObserver extend
//Set Server OutBound Message onto InBound Exchange.
setOutBoundMessage(ex, m.getExchange());
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Thu Jul 12 19:24:27 2012
@@ -468,10 +468,9 @@ public class ClientImpl
Object[] params,
Map<String, Object> context,
Exchange exchange) throws Exception {
- Bus origBus = BusFactory.getThreadDefaultBus(false);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
- BusFactory.setThreadDefaultBus(bus);
ClassLoader loader = bus.getExtension(ClassLoader.class);
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
@@ -545,7 +544,9 @@ public class ClientImpl
if (origLoader != null) {
origLoader.reset();
}
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
}
}
@@ -750,8 +751,7 @@ public class ClientImpl
modifyChain(chain, message, true);
modifyChain(chain, message.getExchange().getOutMessage(), true);
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(bus);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
// execute chain
ClientCallback callback = message.getExchange().get(ClientCallback.class);
try {
@@ -823,7 +823,9 @@ public class ClientImpl
}
}
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
synchronized (message.getExchange()) {
if (!isPartialResponse(message)
|| message.getContent(Exception.class) != null) {
Modified: cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainInitiatorObserver.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainInitiatorObserver.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainInitiatorObserver.java (original)
+++ cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainInitiatorObserver.java Thu Jul 12 19:24:27 2012
@@ -54,8 +54,7 @@ public abstract class AbstractFaultChain
assert null != message;
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(bus);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
if (loader != null) {
@@ -116,7 +115,9 @@ public abstract class AbstractFaultChain
throw new RuntimeException(exc);
}
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java (original)
+++ cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java Thu Jul 12 19:24:27 2012
@@ -62,8 +62,7 @@ public class ChainInitiationObserver imp
}
public void onMessage(Message m) {
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(bus);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
if (loader != null) {
@@ -123,7 +122,9 @@ public class ChainInitiationObserver imp
phaseChain.doIntercept(message);
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java (original)
+++ cxf/branches/2.5.x-fixes/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java Thu Jul 12 19:24:27 2012
@@ -61,8 +61,7 @@ public class MultipleEndpointObserver im
}
public void onMessage(Message message) {
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(bus);
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
if (loader != null) {
@@ -98,7 +97,9 @@ public class MultipleEndpointObserver im
chain.doIntercept(message);
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java Thu Jul 12 19:24:27 2012
@@ -45,8 +45,8 @@ class ClientMessageObserver implements M
PhaseInterceptorChain chain = AbstractClient.setupInInterceptorChain(cfg);
message.setInterceptorChain(chain);
message.getExchange().setInMessage(message);
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(cfg.getBus());
+ Bus bus = cfg.getBus();
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
ClassLoaderHolder origLoader = null;
try {
if (loader != null) {
@@ -55,7 +55,9 @@ class ClientMessageObserver implements M
// execute chain
chain.doIntercept(message);
} finally {
- BusFactory.setThreadDefaultBus(origBus);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/transport/http_jaxws_spi/JAXWSHttpSpiDestination.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/transport/http_jaxws_spi/JAXWSHttpSpiDestination.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/transport/http_jaxws_spi/JAXWSHttpSpiDestination.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/transport/http_jaxws_spi/JAXWSHttpSpiDestination.java Thu Jul 12 19:24:27 2012
@@ -116,13 +116,15 @@ public class JAXWSHttpSpiDestination ext
}
}
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
try {
- BusFactory.setThreadDefaultBus(bus);
serviceRequest(req, resp);
} catch (Exception e) {
e.printStackTrace();
} finally {
- BusFactory.setThreadDefaultBus(null);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
}
}
Modified: cxf/branches/2.5.x-fixes/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java (original)
+++ cxf/branches/2.5.x-fixes/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java Thu Jul 12 19:24:27 2012
@@ -304,14 +304,16 @@ public class JettyHTTPDestination extend
// REVISIT: service on executor if associated with endpoint
ClassLoaderHolder origLoader = null;
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
try {
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
}
- BusFactory.setThreadDefaultBus(bus);
serviceRequest(context, req, resp);
} finally {
- BusFactory.setThreadDefaultBus(null);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java (original)
+++ cxf/branches/2.5.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java Thu Jul 12 19:24:27 2012
@@ -118,16 +118,19 @@ public class CXFNonSpringServlet extends
@Override
protected void invoke(HttpServletRequest request, HttpServletResponse response) throws ServletException {
ClassLoaderHolder origLoader = null;
+ Bus origBus = null;
try {
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
}
if (bus != null) {
- BusFactory.setThreadDefaultBus(bus);
+ origBus = BusFactory.getAndSetThreadDefaultBus(bus);
}
controller.invoke(request, response);
} finally {
- BusFactory.setThreadDefaultBus(null);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(null);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java (original)
+++ cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java Thu Jul 12 19:24:27 2012
@@ -191,6 +191,7 @@ public class JMSDestination extends Abst
}
public void onMessage(javax.jms.Message message, Session session) {
ClassLoaderHolder origLoader = null;
+ Bus origBus = null;
try {
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
@@ -215,7 +216,7 @@ public class JMSDestination extends Abst
jmsConfig));
}
- BusFactory.setThreadDefaultBus(bus);
+ origBus = BusFactory.getAndSetThreadDefaultBus(bus);
Map<Class<?>, ?> mp = JCATransactionalMessageListenerContainer.ENDPOINT_LOCAL.get();
@@ -260,7 +261,9 @@ public class JMSDestination extends Abst
} catch (UnsupportedEncodingException ex) {
getLogger().log(Level.WARNING, "can't get the right encoding information. " + ex);
} finally {
- BusFactory.setThreadDefaultBus(null);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}
Modified: cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java?rev=1360870&r1=1360869&r2=1360870&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java (original)
+++ cxf/branches/2.5.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/continuations/JMSContinuation.java Thu Jul 12 19:24:27 2012
@@ -112,15 +112,17 @@ public class JMSContinuation implements
protected void doResume() {
updateContinuations(true);
ClassLoaderHolder origLoader = null;
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(bus);
try {
- BusFactory.setThreadDefaultBus(bus);
if (loader != null) {
origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
}
incomingObserver.onMessage(inMessage);
} finally {
isPending = false;
- BusFactory.setThreadDefaultBus(null);
+ if (origBus != bus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
if (origLoader != null) {
origLoader.reset();
}