diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/ConnectionI.java | 15 | ||||
-rw-r--r-- | java/src/IceInternal/ConnectRequestHandler.java | 1 | ||||
-rw-r--r-- | java/src/IceInternal/ConnectionRequestHandler.java | 1 | ||||
-rw-r--r-- | java/src/IceInternal/RequestHandler.java | 3 |
4 files changed, 18 insertions, 2 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java index 7b83d46bf1e..fea7381371e 100644 --- a/java/src/Ice/ConnectionI.java +++ b/java/src/Ice/ConnectionI.java @@ -459,6 +459,7 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne public synchronized void prepareBatchRequest(IceInternal.BasicStream os) + throws IceInternal.LocalExceptionWrapper { // // Wait if flushing is currently in progress. @@ -476,7 +477,19 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne if(_exception != null) { - throw _exception; + // + // If there were no batch requests queued when the connection failed, we can safely + // retry with a new connection. Otherwise, we must throw to notify the caller that + // some previous batch requests were not sent. + // + if(_batchStream.isEmpty()) + { + throw new IceInternal.LocalExceptionWrapper(_exception, true); + } + else + { + throw _exception; + } } assert(_state > StateNotValidated); diff --git a/java/src/IceInternal/ConnectRequestHandler.java b/java/src/IceInternal/ConnectRequestHandler.java index 603eb9527fe..e5eb47d7957 100644 --- a/java/src/IceInternal/ConnectRequestHandler.java +++ b/java/src/IceInternal/ConnectRequestHandler.java @@ -57,6 +57,7 @@ public class ConnectRequestHandler public void prepareBatchRequest(BasicStream os) + throws LocalExceptionWrapper { synchronized(this) { diff --git a/java/src/IceInternal/ConnectionRequestHandler.java b/java/src/IceInternal/ConnectionRequestHandler.java index f40ebd28ed9..1f085f49dfb 100644 --- a/java/src/IceInternal/ConnectionRequestHandler.java +++ b/java/src/IceInternal/ConnectionRequestHandler.java @@ -13,6 +13,7 @@ public class ConnectionRequestHandler implements RequestHandler { public void prepareBatchRequest(BasicStream out) + throws LocalExceptionWrapper { _connection.prepareBatchRequest(out); } diff --git a/java/src/IceInternal/RequestHandler.java b/java/src/IceInternal/RequestHandler.java index a69f9790b81..b5bf28c4d99 100644 --- a/java/src/IceInternal/RequestHandler.java +++ b/java/src/IceInternal/RequestHandler.java @@ -11,7 +11,8 @@ package IceInternal; public interface RequestHandler { - void prepareBatchRequest(BasicStream out); + void prepareBatchRequest(BasicStream out) + throws LocalExceptionWrapper; void finishBatchRequest(BasicStream out); void abortBatchRequest(); |