diff options
| author | Alex Rudyy <orudyy@apache.org> | 2014-08-28 15:00:06 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2014-08-28 15:00:06 +0000 |
| commit | e6a075f7373351710e320ae385beaf68ae404300 (patch) | |
| tree | 0e0b8866df642b942328a04c7e5317f3d69878ea /qpid/java | |
| parent | 64f8ac4fd226e9201fad685efea5a3332a30e262 (diff) | |
| download | qpid-python-e6a075f7373351710e320ae385beaf68ae404300.tar.gz | |
QPID-6051: Allow exceptions from post commit actions to be handled in the callers
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1621146 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
2 files changed, 14 insertions, 57 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java index f5d32d2e20..349ec793fe 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java @@ -24,8 +24,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.apache.qpid.server.util.ConnectionScopedRuntimeException; -import org.apache.qpid.transport.TransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -259,11 +257,6 @@ public class LocalTransaction implements ServerTransaction doPostTransactionActions(); } - catch(RuntimeException e) - { - doRollbackActions(); - throw e; - } finally { resetDetails(); @@ -282,11 +275,9 @@ public class LocalTransaction implements ServerTransaction { sync(); StoreFuture future = StoreFuture.IMMEDIATE_FUTURE; - try + if(_transaction != null) { - if(_transaction != null) - { - future = new StoreFuture() + future = new StoreFuture() { private volatile boolean _completed = false; private StoreFuture _underlying = _transaction.commitTranAsync(); @@ -325,21 +316,16 @@ public class LocalTransaction implements ServerTransaction doPostTransactionActions(); deferred.run(); } - catch (RuntimeException e) - { - handleUnexpectedException(e); - } finally { resetDetails(); } } - - }; - _asyncTran = future; - } - else - { + }; + _asyncTran = future; + } + else + { try { doPostTransactionActions(); @@ -349,44 +335,10 @@ public class LocalTransaction implements ServerTransaction { resetDetails(); } - } - - } - catch (RuntimeException e) - { - try - { - handleUnexpectedException(e); - } - finally - { - resetDetails(); - } } return future; } - private void handleUnexpectedException(RuntimeException e) - { - if(e instanceof ConnectionScopedRuntimeException || e instanceof TransportException) - { - throw e; - } - else - { - _logger.error("Unexpected exception on execution of post commit deferred actions", e); - boolean continueOnError = Boolean.getBoolean("qpid.broker.exceptionHandler.continue"); - if (continueOnError) - { - throw e; - } - else - { - Runtime.getRuntime().halt(1); - } - } - } - private void doPostTransactionActions() { if(_logger.isDebugEnabled()) diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index c193491e1e..3089895c06 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java @@ -318,7 +318,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi } break; } - catch (Exception e) + catch (AMQException e) { _logger.error("Unexpected exception when processing datablock", e); closeProtocolSession(); @@ -337,6 +337,11 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi _logger.error("Unexpected protocol version", e); closeProtocolSession(); } + catch (TransportException e) + { + _logger.error("Unexpected transport exception", e); + closeProtocolSession(); + } catch (AMQFrameDecodingException e) { _logger.error("Frame decoding", e); @@ -394,7 +399,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi * the connection is already closed by the time the exception is thrown. If any other * type of exception is thrown, the connection is not already closed. */ - private void dataBlockReceived(AMQDataBlock message) throws Exception + private void dataBlockReceived(AMQDataBlock message) throws AMQException { if (message instanceof ProtocolInitiation) { |
