You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/01/18 14:45:16 UTC

svn commit: r1232880 - in /cxf/branches/2.5.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/

Author: sergeyb
Date: Wed Jan 18 13:45:15 2012
New Revision: 1232880

URL: http://svn.apache.org/viewvc?rev=1232880&view=rev
Log:
Merged revisions 1232877 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1232877 | sergeyb | 2012-01-18 13:41:04 +0000 (Wed, 18 Jan 2012) | 1 line
  
  [CXF-4006] Cleaning the thread-local state for clients
........

Modified:
    cxf/branches/2.5.x-fixes/   (props changed)
    cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
    cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java
    cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
    svn:mergeinfo = /cxf/trunk:1232877

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1232880&r1=1232879&r2=1232880&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Wed Jan 18 13:45:15 2012
@@ -512,20 +512,24 @@ public class ClientProxyImpl extends Abs
     
     protected Object handleResponse(Message outMessage) 
         throws Throwable {
-        Response r = setResponseBuilder(outMessage, outMessage.getExchange()).build();
-        Method method = outMessage.getExchange().get(Method.class);
-        checkResponse(method, r, outMessage);
-        if (method.getReturnType() == Void.class) { 
-            return null;
-        }
-        if (method.getReturnType() == Response.class
-            && (r.getEntity() == null || InputStream.class.isAssignableFrom(r.getEntity().getClass())
-                && ((InputStream)r.getEntity()).available() == 0)) {
-            return r;
+        try {
+            Response r = setResponseBuilder(outMessage, outMessage.getExchange()).build();
+            Method method = outMessage.getExchange().get(Method.class);
+            checkResponse(method, r, outMessage);
+            if (method.getReturnType() == Void.class) { 
+                return null;
+            }
+            if (method.getReturnType() == Response.class
+                && (r.getEntity() == null || InputStream.class.isAssignableFrom(r.getEntity().getClass())
+                    && ((InputStream)r.getEntity()).available() == 0)) {
+                return r;
+            }
+            
+            return readBody(r, outMessage, method.getReturnType(), 
+                            method.getGenericReturnType(), method.getDeclaredAnnotations());
+        } finally {
+            ProviderFactory.getInstance(outMessage).clearThreadLocalProxies();
         }
-        
-        return readBody(r, outMessage, method.getReturnType(), 
-                        method.getGenericReturnType(), method.getDeclaredAnnotations());
     }
 
     public Object getInvocationHandler() {

Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java?rev=1232880&r1=1232879&r2=1232880&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java Wed Jan 18 13:45:15 2012
@@ -48,7 +48,8 @@ public class JAXRSClientFactoryBean exte
     private boolean inheritHeaders; 
     private MultivaluedMap<String, String> headers;
     private ClientState initialState;
-    private boolean threadSafe; 
+    private boolean threadSafe;
+    private long timeToKeepState;
     private Class serviceClass;
     
     public JAXRSClientFactoryBean() {
@@ -71,7 +72,16 @@ public class JAXRSClientFactoryBean exte
     public void setThreadSafe(boolean threadSafe) {
         this.threadSafe = threadSafe;
     }
-    
+
+    /**
+     * Sets the time a thread-local client state will be kept.
+     * This property is ignored for thread-unsafe clients
+     * @param secondsToKeepState
+     */
+    public void setSecondsToKeepState(long time) {
+        this.timeToKeepState = time;
+    }
+
     /**
      * Gets the user name
      * @return the name
@@ -196,10 +206,12 @@ public class JAXRSClientFactoryBean exte
             throw new RuntimeException(ex);
         }
     }
+
+    
     
     private ClientState getActualState() {
         if (threadSafe) {
-            initialState = new ThreadLocalClientState(getAddress());
+            initialState = new ThreadLocalClientState(getAddress(), timeToKeepState);
         }
         if (initialState != null) {
             return headers != null

Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java?rev=1232880&r1=1232879&r2=1232880&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java Wed Jan 18 13:45:15 2012
@@ -41,14 +41,20 @@ public class ThreadLocalClientState impl
     private LocalClientState initialState;
     
     private Map<Thread, Long> checkpointMap;
-    private long secondsToKeepState;
+    private long timeToKeepState;
     
     public ThreadLocalClientState(String baseURI) {
         this.initialState = new LocalClientState(URI.create(baseURI));
     }
     
-    public ThreadLocalClientState(LocalClientState initialState) {
+    public ThreadLocalClientState(String baseURI, long timeToKeepState) {
+        this.initialState = new LocalClientState(URI.create(baseURI));
+        this.timeToKeepState = timeToKeepState;
+    }
+    
+    public ThreadLocalClientState(LocalClientState initialState, long timeToKeepState) {
         this.initialState = initialState;
+        this.timeToKeepState = timeToKeepState;
     }
     
     public void setCurrentBuilder(UriBuilder currentBuilder) {
@@ -101,7 +107,7 @@ public class ThreadLocalClientState impl
         LocalClientState ls = new LocalClientState(baseURI);
         ls.setRequestHeaders(headers);
         ls.setTemplates(templates);
-        return new ThreadLocalClientState(ls);
+        return new ThreadLocalClientState(ls, timeToKeepState);
     }
     
     private void removeThreadLocalState(Thread t) {
@@ -116,7 +122,7 @@ public class ThreadLocalClientState impl
         if (cs == null) {
             cs = new LocalClientState(initialState);
             state.put(Thread.currentThread(), cs);
-            if (secondsToKeepState > 0) {
+            if (timeToKeepState > 0) {
                 long currentTime = System.currentTimeMillis();
                 checkpointMap.put(Thread.currentThread(), currentTime);
                 new CleanupThread(Thread.currentThread(), currentTime).start();
@@ -125,9 +131,9 @@ public class ThreadLocalClientState impl
         return cs;
     }
 
-    public void setSecondsToKeepState(long secondsToKeepState) {
-        this.secondsToKeepState = secondsToKeepState;
-        if (secondsToKeepState > 0) {
+    public void setTimeToKeepState(long timeToKeepState) {
+        this.timeToKeepState = timeToKeepState;
+        if (timeToKeepState > 0) {
             checkpointMap = new ConcurrentHashMap<Thread, Long>();
         }
     }
@@ -144,7 +150,7 @@ public class ThreadLocalClientState impl
         @Override
         public void run() {
             try {
-                Thread.sleep(secondsToKeepState);
+                Thread.sleep(timeToKeepState);
                 long actualTime = checkpointMap.get(thread);
                 // if times do not match then the original worker thread
                 // has called reset() but came back again to create new local state

Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1232880&r1=1232879&r2=1232880&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Wed Jan 18 13:45:15 2012
@@ -49,6 +49,7 @@ import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxrs.ext.form.Form;
 import org.apache.cxf.jaxrs.model.ParameterType;
 import org.apache.cxf.jaxrs.model.URITemplate;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.jaxrs.utils.ParameterizedCollectionType;
@@ -769,6 +770,8 @@ public class WebClient extends AbstractC
         } catch (Throwable ex) {
             throw (ex instanceof ClientWebApplicationException) ? (ClientWebApplicationException)ex
                                                               : new ClientWebApplicationException(ex);
+        } finally {
+            ProviderFactory.getInstance(outMessage).clearThreadLocalProxies();
         }
     }