diff options
Diffstat (limited to 'qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/AbstractSenderDecorator.java')
-rw-r--r-- | qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/AbstractSenderDecorator.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/AbstractSenderDecorator.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/AbstractSenderDecorator.java new file mode 100644 index 0000000000..776575ebd1 --- /dev/null +++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/AbstractSenderDecorator.java @@ -0,0 +1,89 @@ +package org.apache.qpid.messaging.util; + +import org.apache.qpid.messaging.ConnectionException; +import org.apache.qpid.messaging.Message; +import org.apache.qpid.messaging.MessagingException; +import org.apache.qpid.messaging.SenderException; +import org.apache.qpid.messaging.Session; +import org.apache.qpid.messaging.SessionException; +import org.apache.qpid.messaging.internal.SenderInternal; +import org.apache.qpid.messaging.internal.SessionInternal; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class AbstractSenderDecorator implements SenderInternal +{ + private Logger _logger = LoggerFactory.getLogger(getClass()); + + protected SenderInternal _delegate; + protected SessionInternal _ssn; + protected final Object _connectionLock; // global per connection lock + + public AbstractSenderDecorator(SessionInternal ssn, SenderInternal delegate) + { + _ssn = ssn; + _delegate = delegate; + _connectionLock = ssn.getConnectionInternal().getConnectionLock(); + } + + @Override + public void send(Message message, boolean sync) throws MessagingException + { + checkPreConditions(); + _delegate.send(message, sync); + } + + @Override + public void close() throws MessagingException + { + synchronized (_connectionLock) + { + _delegate.close(); + _ssn.unregisterSender(this); + } + } + + @Override + public void setCapacity(int capacity) throws MessagingException + { + checkPreConditions(); + _delegate.setCapacity(capacity); + } + + @Override + public int getCapacity() throws MessagingException + { + checkPreConditions(); + return _delegate.getCapacity(); + } + + @Override + public int getAvailable() throws MessagingException + { + checkPreConditions(); + return _delegate.getAvailable(); + } + + @Override + public int getUnsettled() throws MessagingException + { + checkPreConditions(); + return _delegate.getUnsettled(); + } + + @Override + public String getName() throws MessagingException + { + checkPreConditions(); + return _delegate.getName(); + } + + @Override + public Session getSession() throws MessagingException + { + checkPreConditions(); + _ssn.checkError(); + return _ssn; + } + + protected abstract void checkPreConditions() throws SenderException;} |