[jbossws-commits] JBossWS SVN: r12933 - in stack/native/branches/jbossws-native-2.0.1.SP2_CP/src: main/java/org/jboss/ws/core/jaxws/spi and 1 other directories.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Wed Sep 8 07:31:57 EDT 2010


Author: darran.lofthouse at jboss.com
Date: 2010-09-08 07:31:56 -0400 (Wed, 08 Sep 2010)
New Revision: 12933

Modified:
   stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
   stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
   stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
Log:
[JBPAPP-4515] JAX-WS Asynchronous Client Exception issues.

Modified: stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java	2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java	2010-09-08 11:31:56 UTC (rev 12933)
@@ -47,7 +47,6 @@
    private Exception exception;
    private Map<String, Object> context = new HashMap<String, Object>();
 
-
    public void setException(Exception ex)
    {
       this.exception = ex;
@@ -69,16 +68,16 @@
             throw new WebServiceException(exception);
          }
       }
-      
+
       return delegate;
    }
-   
+
    private Future getFutureInternal()
    {
       if (delegate == null)
-         throw new IllegalStateException("Future not available");      
-      
-      return delegate;      
+         throw new IllegalStateException("Future not available");
+
+      return delegate;
    }
 
    public void setFuture(Future delegate)
@@ -95,7 +94,7 @@
    {
       this.result = result;
    }
-   
+
    public boolean cancel(boolean mayInterruptIfRunning)
    {
       return getFutureInternal().cancel(mayInterruptIfRunning);
@@ -103,24 +102,34 @@
 
    public Object get() throws InterruptedException, ExecutionException
    {
-      if (result == null)
+      Object response = getResult();
+      if (response != null)
       {
-         getFutureInternal().get();
+         return response;
       }
-      
-      if (exception != null)
-         throw new ExecutionException(exception);
 
-      return result;
+      getFutureInternal().get();
+      response = getResult();
+
+      return response;
    }
 
    public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
    {
-      if (result == null)
+      Object response = getResult();
+      if (response != null)
       {
-         getFutureInternal().get(timeout, unit);
+         return response;
       }
 
+      getFutureInternal().get(timeout, unit);
+      response = getResult();
+
+      return response;
+   }
+
+   private Object getResult() throws ExecutionException
+   {
       if (exception != null)
          throw new ExecutionException(exception);
 

Modified: stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java	2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java	2010-09-08 11:31:56 UTC (rev 12933)
@@ -89,8 +89,11 @@
    // provide logging
    private final Logger log = Logger.getLogger(ServiceDelegateImpl.class);
 
+   // Lock to ensure only one thread can initialise the defaultExecutor.
+   private static final Object DEFAULT_EXECUTOR_LOCK = new Object();
    // The executor service
-   private static ExecutorService defaultExecutor = Executors.newCachedThreadPool();
+   private static ExecutorService defaultExecutor = null;
+         
    // The service meta data that is associated with this JAXWS Service
    private ServiceMetaData serviceMetaData;
    // The ServiceRefMetaData supplied by the ServiceObjectFactory 
@@ -363,12 +366,32 @@
       this.handlerResolver = handlerResolver;
    }
 
+   private ExecutorService getDefaultExecutor()
+   {
+      if (defaultExecutor == null)
+      {
+         synchronized (DEFAULT_EXECUTOR_LOCK)
+         {
+            if (defaultExecutor == null)
+            {
+               defaultExecutor = Executors.newCachedThreadPool();
+               if (log.isTraceEnabled())
+               {
+                  log.trace("Created new defaultExecutor", new Throwable("Call Trace"));
+               }
+            }
+         }
+      }
+
+      return defaultExecutor;
+   }
+   
    @Override
    public Executor getExecutor()
    {
       if (executor == null)
       {
-         executor = defaultExecutor;
+         executor = getDefaultExecutor();
       }
       return executor;
    }

Modified: stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java	2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java	2010-09-08 11:31:56 UTC (rev 12933)
@@ -21,6 +21,10 @@
 */
 package org.jboss.test.ws.jaxws.jbws3071;
 
+import java.util.concurrent.ExecutionException;
+
+import org.jboss.logging.Logger;
+
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Response;
 
@@ -30,11 +34,26 @@
  */
 public class StringHandler implements AsyncHandler<String>
 {
+   private static final Logger log = Logger.getLogger(StringHandler.class);
 
    private Response<String> response;
 
    public void handleResponse(Response<String> res)
    {
+      try
+      {
+         Object response = res.get();
+         log.debug("Obtained Response - " + response.toString());
+      }
+      catch (InterruptedException e)
+      {
+         log.debug("Caught InterruptedException", e);
+      }
+      catch (ExecutionException e)
+      {
+         log.debug("Caught ExecutionException", e);
+
+      }
       this.response = res;
    }
 



More information about the jbossws-commits mailing list