[jboss-remoting-commits] JBoss Remoting SVN: r6484 - remoting2/branches/2.5.4.SP4_JBREM-1316/src/main/org/jboss/remoting/transport/socket.

jboss-remoting-commits at lists.jboss.org jboss-remoting-commits at lists.jboss.org
Tue Mar 26 11:55:37 EDT 2013


Author: ShaunA
Date: 2013-03-26 11:55:37 -0400 (Tue, 26 Mar 2013)
New Revision: 6484

Modified:
   remoting2/branches/2.5.4.SP4_JBREM-1316/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java
Log:
bz927097: JBREM-1316 applies to remoting used in EAP 5.2.0

Modified: remoting2/branches/2.5.4.SP4_JBREM-1316/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java
===================================================================
--- remoting2/branches/2.5.4.SP4_JBREM-1316/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java	2013-03-26 13:47:11 UTC (rev 6483)
+++ remoting2/branches/2.5.4.SP4_JBREM-1316/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java	2013-03-26 15:55:37 UTC (rev 6484)
@@ -264,6 +264,11 @@
    protected boolean generalizeSocketException;
    
    protected int writeTimeout = -1;
+   
+   /**
+    * Determines if transport() should attempt retries after versionedWrite() has succeeded.
+    */
+   protected boolean idempotent;
 
    // Constructors ---------------------------------------------------------------------------------
 
@@ -286,7 +291,8 @@
       pool = null;
       maxPoolSize = MAX_POOL_SIZE;
       onewayConnectionTimeout = ONEWAY_CONNECTION_TIMEOUT_DEFAULT;
-
+      idempotent = true;
+      
       try
       {
          setup();
@@ -421,6 +427,16 @@
       this.generalizeSocketException = generalizeSocketException;
    }
 
+   public boolean isIdempotent()
+   {
+      return idempotent;
+   }
+
+   public void setIdempotent(boolean idempotent)
+   {
+      this.idempotent = idempotent;
+   }
+   
    public synchronized void disconnect()
    {
       log.debug(this + " disconnecting ...");
@@ -795,8 +811,9 @@
       
       int retryCount = 0;
       Exception sockEx = null;
+      boolean versionedWriteComplete = false;
 
-      for (; retryCount < numberOfCallRetries; retryCount++)
+      for (; retryCount < numberOfCallRetries && (idempotent || !versionedWriteComplete); retryCount++)
       {
          if (trace) log.trace(this + " retryCount: " + retryCount);
          if (0 < tempTimeout)
@@ -866,7 +883,8 @@
 
             //TODO: -TME so this is messed up as now ties remoting versioning to using a marshaller type
             versionedWrite(outputStream, marshaller, invocation, version);
-
+            versionedWriteComplete = true;
+            
             if (serverSideOneway)
             {
                if(trace) { log.trace(this + " sent oneway invocation, so not waiting for response, returning null"); }
@@ -958,7 +976,7 @@
       }
 
       // need to check if ran out of retries
-      if (retryCount >= numberOfCallRetries)
+      if (retryCount >= numberOfCallRetries || (response == null && !idempotent && versionedWriteComplete))
       {
          handleException(sockEx, socketWrapper);
       }



More information about the jboss-remoting-commits mailing list