summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/ConnectionI.java15
-rw-r--r--java/src/IceInternal/ConnectRequestHandler.java1
-rw-r--r--java/src/IceInternal/ConnectionRequestHandler.java1
-rw-r--r--java/src/IceInternal/RequestHandler.java3
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();