Repository: qpid-jms Updated Branches: refs/heads/master badfb1b4d -> 375b05503
Extract some common bits into a utility base class. Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/375b0550 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/375b0550 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/375b0550 Branch: refs/heads/master Commit: 375b05503411a84030a142e0c42b98830cf6629b Parents: badfb1b Author: Timothy Bish <[email protected]> Authored: Fri Oct 17 16:12:35 2014 -0400 Committer: Timothy Bish <[email protected]> Committed: Fri Oct 17 16:12:35 2014 -0400 ---------------------------------------------------------------------- .../qpid/jms/provider/ProviderFuture.java | 15 ++--- .../qpid/jms/provider/WrappedAsyncResult.java | 59 ++++++++++++++++++++ .../provider/amqp/AmqpAnonymousProducer.java | 23 +++----- .../jms/provider/failover/FailoverProvider.java | 6 +- 4 files changed, 76 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/375b0550/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java index 7a52ad3..417d185 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java @@ -25,18 +25,17 @@ import org.apache.qpid.jms.util.IOExceptionSupport; /** * Asynchronous Provider Future class. */ -public class ProviderFuture implements AsyncResult { +public class ProviderFuture extends WrappedAsyncResult { protected final CountDownLatch latch = new CountDownLatch(1); protected Throwable error; - protected final AsyncResult watcher; public ProviderFuture() { - this.watcher = null; + super(null); } public ProviderFuture(AsyncResult watcher) { - this.watcher = watcher; + super(watcher); } @Override @@ -48,17 +47,13 @@ public class ProviderFuture implements AsyncResult { public void onFailure(Throwable result) { error = result; latch.countDown(); - if (watcher != null) { - watcher.onFailure(error); - } + super.onFailure(result); } @Override public void onSuccess() { latch.countDown(); - if (watcher != null) { - watcher.onSuccess(); - } + super.onSuccess(); } /** http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/375b0550/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/WrappedAsyncResult.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/WrappedAsyncResult.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/WrappedAsyncResult.java new file mode 100644 index 0000000..f54c81a --- /dev/null +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/WrappedAsyncResult.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.qpid.jms.provider; + +/** + * Base class used to wrap one AsyncResult with another. + */ +public abstract class WrappedAsyncResult implements AsyncResult { + + protected final AsyncResult wrapped; + + /** + * Create a new WrappedAsyncResult for the target AsyncResult + */ + public WrappedAsyncResult(AsyncResult wrapped) { + this.wrapped = wrapped; + } + + @Override + public void onFailure(Throwable result) { + if (wrapped != null) { + wrapped.onFailure(result); + } + } + + @Override + public void onSuccess() { + if (wrapped != null) { + wrapped.onSuccess(); + } + } + + @Override + public boolean isComplete() { + if (wrapped != null) { + return wrapped.isComplete(); + } + + return false; + } + + public AsyncResult getWrappedRequest() { + return wrapped; + } +} http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/375b0550/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousProducer.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousProducer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousProducer.java index 3547b15..e7dceb0 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousProducer.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousProducer.java @@ -26,6 +26,7 @@ import org.apache.qpid.jms.message.JmsOutboundMessageDispatch; import org.apache.qpid.jms.meta.JmsProducerId; import org.apache.qpid.jms.meta.JmsProducerInfo; import org.apache.qpid.jms.provider.AsyncResult; +import org.apache.qpid.jms.provider.WrappedAsyncResult; import org.apache.qpid.jms.util.IdGenerator; import org.apache.qpid.jms.util.LRUCache; import org.apache.qpid.proton.engine.EndpointState; @@ -140,23 +141,17 @@ public class AmqpAnonymousProducer extends AmqpProducer { return new JmsProducerId(producerIdKey, -1, producerIdCount++); } - private abstract class AnonymousRequest implements AsyncResult { + private abstract class AnonymousRequest extends WrappedAsyncResult { - protected final AsyncResult sendResult; protected final AmqpProducer producer; protected final JmsOutboundMessageDispatch envelope; public AnonymousRequest(AsyncResult sendResult, AmqpProducer producer, JmsOutboundMessageDispatch envelope) { - this.sendResult = sendResult; + super(sendResult); this.producer = producer; this.envelope = envelope; } - @Override - public boolean isComplete() { - return sendResult.isComplete(); - } - /** * In all cases of the chain of events that make up the send for an anonymous * producer a failure will trigger the original send request to fail. @@ -164,7 +159,7 @@ public class AmqpAnonymousProducer extends AmqpProducer { @Override public void onFailure(Throwable result) { LOG.debug("Send failed during {} step in chain: {}", this.getClass().getName(), getProducerId()); - sendResult.onFailure(result); + super.onFailure(result); } } @@ -181,7 +176,7 @@ public class AmqpAnonymousProducer extends AmqpProducer { try { producer.send(envelope, send); } catch (Exception e) { - sendResult.onFailure(e); + super.onFailure(e); } } } @@ -189,7 +184,7 @@ public class AmqpAnonymousProducer extends AmqpProducer { private final class AnonymousSendRequest extends AnonymousRequest { public AnonymousSendRequest(AnonymousOpenRequest open) { - super(open.sendResult, open.producer, open.envelope); + super(open.getWrappedRequest(), open.producer, open.envelope); } @Override @@ -206,7 +201,7 @@ public class AmqpAnonymousProducer extends AmqpProducer { AnonymousCloseRequest close = new AnonymousCloseRequest(this); producer.close(close); } else { - sendResult.onSuccess(); + super.onSuccess(); } } } @@ -214,13 +209,13 @@ public class AmqpAnonymousProducer extends AmqpProducer { private final class AnonymousCloseRequest extends AnonymousRequest { public AnonymousCloseRequest(AnonymousSendRequest send) { - super(send.sendResult, send.producer, send.envelope); + super(send.getWrappedRequest(), send.producer, send.envelope); } @Override public void onSuccess() { LOG.trace("Close phase of anonymous send complete: {} ", getProducerId()); - sendResult.onSuccess(); + super.onSuccess(); } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/375b0550/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java index 77820a6..4539687 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java @@ -788,7 +788,7 @@ public class FailoverProvider extends DefaultProviderListener implements Provide if (provider == null) { if (failureWhenOffline()) { requests.remove(id); - watcher.onFailure(new IOException("Provider disconnected")); + getWrappedRequest().onFailure(new IOException("Provider disconnected")); } else if (succeedsWhenOffline()) { onSuccess(); } @@ -798,7 +798,7 @@ public class FailoverProvider extends DefaultProviderListener implements Provide doTask(); } catch (UnsupportedOperationException e) { requests.remove(id); - watcher.onFailure(e); + getWrappedRequest().onFailure(e); } catch (Exception e) { // TODO Should we let JMSException through? LOG.debug("Caught exception while executing task: {}", e.getMessage()); @@ -859,7 +859,7 @@ public class FailoverProvider extends DefaultProviderListener implements Provide * Captures the initial request to create a JmsConnectionInfo based resources and ensures * that if the connection is successfully established that the connection established event * is triggered once before moving on to sending only connection interrupted and restored - * events. + * events. */ protected abstract class CreateConnectionRequest extends FailoverRequest { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
