diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-02-26 23:27:39 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-02-26 23:27:39 +0000 |
| commit | 4ae118bb7a81155a9f3d22af3a4a3f2191799c83 (patch) | |
| tree | 8bebb59700d6825f997cb501c9043513e0f785c8 /qpid/java | |
| parent | 6339e3b1ad22e74508510e08384c4d484bd9666c (diff) | |
| download | qpid-python-4ae118bb7a81155a9f3d22af3a4a3f2191799c83.tar.gz | |
QPID-5577 : [Java Broker] Change Exchange,Queue,Binding,Consumer to implement ConfiguredObject and remove adapter classes
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1572343 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
172 files changed, 2542 insertions, 3817 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/Binding.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java index 13cbd0d544..18e78eff88 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/Binding.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java @@ -20,11 +20,14 @@ */ package org.apache.qpid.server.binding; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.BindingMessages; import org.apache.qpid.server.logging.subjects.BindingLogSubject; +import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.State; @@ -42,26 +45,28 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -public class Binding +public class BindingImpl + extends AbstractConfiguredObject<BindingImpl> + implements org.apache.qpid.server.model.Binding<BindingImpl> { private final String _bindingKey; private final AMQQueue _queue; - private final Exchange _exchange; + private final NonDefaultExchange _exchange; private final Map<String, Object> _arguments; private final UUID _id; private final AtomicLong _matches = new AtomicLong(); private final BindingLogSubject _logSubject; final AtomicBoolean _deleted = new AtomicBoolean(); - final CopyOnWriteArrayList<StateChangeListener<Binding,State>> _stateChangeListeners = - new CopyOnWriteArrayList<StateChangeListener<Binding, State>>(); + final CopyOnWriteArrayList<StateChangeListener<BindingImpl,State>> _stateChangeListeners = + new CopyOnWriteArrayList<StateChangeListener<BindingImpl, State>>(); - public Binding(UUID id, - final String bindingKey, - final AMQQueue queue, - final Exchange exchange, - final Map<String, Object> arguments) + public BindingImpl(UUID id, + final String bindingKey, + final AMQQueue queue, + final NonDefaultExchange exchange, + final Map<String, Object> arguments) { this(id, convertToAttributes(bindingKey, arguments), queue, exchange); } @@ -77,8 +82,9 @@ public class Binding return attributes; } - public Binding(UUID id, Map<String,Object> attributes, AMQQueue queue, Exchange exchange) + public BindingImpl(UUID id, Map<String, Object> attributes, AMQQueue queue, NonDefaultExchange exchange) { + super(id,Collections.EMPTY_MAP,attributes,queue.getVirtualHost().getTaskExecutor()); _id = id; _bindingKey = (String)attributes.get(org.apache.qpid.server.model.Binding.NAME); _queue = queue; @@ -96,10 +102,6 @@ public class Binding } - public UUID getId() - { - return _id; - } public String getBindingKey() { @@ -111,11 +113,17 @@ public class Binding return _queue; } - public Exchange getExchangeImpl() + @Override + public Queue getQueue() { - return _exchange; + return _queue; } + @Override + public NonDefaultExchange getExchange() + { + return _exchange; + } public Map<String, Object> getArguments() { @@ -137,10 +145,34 @@ public class Binding return _queue.isDurable() && _exchange.isDurable(); } + @Override + public void setDurable(final boolean durable) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + if(durable != isDurable()) + { + throw new IllegalArgumentException("Cannot change the durability of a binding"); + } + } + public LifetimePolicy getLifetimePolicy() { - return LifetimePolicy.IN_USE; + return LifetimePolicy.PERMANENT; + } + + @Override + public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + // TODO + return null; + } + + @Override + public <C extends ConfiguredObject> Collection<C> getChildren(final Class<C> clazz) + { + return Collections.emptySet(); } @Override @@ -151,15 +183,15 @@ public class Binding return true; } - if (!(o instanceof Binding)) + if (!(o instanceof BindingImpl)) { return false; } - final Binding binding = (Binding) o; + final BindingImpl binding = (BindingImpl) o; return (_bindingKey == null ? binding.getBindingKey() == null : _bindingKey.equals(binding.getBindingKey())) - && (_exchange == null ? binding.getExchangeImpl() == null : _exchange.equals(binding.getExchangeImpl())) + && (_exchange == null ? binding.getExchange() == null : _exchange.equals(binding.getExchange())) && (_queue == null ? binding.getAMQQueue() == null : _queue.equals(binding.getAMQQueue())); } @@ -194,7 +226,7 @@ public class Binding { if(_deleted.compareAndSet(false,true)) { - for(StateChangeListener<Binding,State> listener : _stateChangeListeners) + for(StateChangeListener<BindingImpl,State> listener : _stateChangeListeners) { listener.stateChanged(this, State.ACTIVE, State.DELETED); } @@ -207,18 +239,90 @@ public class Binding return _bindingKey; } + @Override + public String setName(final String currentName, final String desiredName) + throws IllegalStateException, AccessControlException + { + // TODO + return null; + } + public State getState() { return _deleted.get() ? State.DELETED : State.ACTIVE; } - public void addStateChangeListener(StateChangeListener<Binding,State> listener) + public void addStateChangeListener(StateChangeListener<BindingImpl,State> listener) { _stateChangeListeners.add(listener); } - public void removeStateChangeListener(StateChangeListener<Binding,State> listener) + public void removeStateChangeListener(StateChangeListener<BindingImpl,State> listener) { _stateChangeListeners.remove(listener); } + + @Override + public Object getAttribute(final String name) + { + if(ID.equals(name)) + { + return getId(); + } + else if(NAME.equals(name)) + { + return _bindingKey; + } + else if(DURABLE.equals(name)) + { + return isDurable(); + } + else if(LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + else if(QUEUE.equals(name)) + { + return _queue; + } + else if(EXCHANGE.equals(name)) + { + return _exchange; + } + return super.getAttribute(name); + } + + @Override + public Collection<String> getAttributeNames() + { + return getAttributeNames(Binding.class); + } + + @Override + public <T extends ConfiguredObject> T getParent(final Class<T> clazz) + { + if(clazz == Exchange.class) + { + return (T) getExchange(); + } + else if(clazz == Queue.class) + { + return (T) getQueue(); + } + return super.getParent(clazz); + } + + @Override + public Object setAttribute(final String name, final Object expected, final Object desired) throws IllegalStateException, + AccessControlException, IllegalArgumentException + { + throw new UnsupportedOperationException("Changing attributes on binding is not supported."); + } + + @Override + public void setAttributes(final Map<String, Object> attributes) throws IllegalStateException, AccessControlException, + IllegalArgumentException + { + throw new UnsupportedOperationException("Changing attributes on binding is not supported."); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/consumer/Consumer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/consumer/Consumer.java index 410a0ba2af..4cfcb01cf0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/consumer/Consumer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/consumer/Consumer.java @@ -27,7 +27,7 @@ import org.apache.qpid.server.protocol.AMQSessionModel; public interface Consumer { - AtomicLong SUB_ID_GENERATOR = new AtomicLong(0); + AtomicLong CONSUMER_NUMBER_GENERATOR = new AtomicLong(0); void externalStateChange(); @@ -52,7 +52,7 @@ public interface Consumer MessageSource getMessageSource(); - long getId(); + long getConsumerNumber(); boolean isSuspended(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java index 91bbdb1649..f7f0d8d26c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java @@ -20,9 +20,10 @@ */ package org.apache.qpid.server.exchange; +import java.security.AccessControlException; import java.util.ArrayList; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -32,9 +33,14 @@ import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.Binding; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.Publisher; +import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -44,6 +50,8 @@ import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.MapValueConverter; import org.apache.qpid.server.util.StateChangeListener; +import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException; +import org.apache.qpid.server.virtualhost.RequiredExchangeException; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -58,19 +66,22 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -public abstract class AbstractExchange<T extends Exchange> implements Exchange<T> +public abstract class AbstractExchange<T extends AbstractExchange<T>> + extends AbstractConfiguredObject<T> + implements NonDefaultExchange<T> { private static final Logger _logger = Logger.getLogger(AbstractExchange.class); + private final LifetimePolicy _lifetimePolicy; private String _name; private final AtomicBoolean _closed = new AtomicBoolean(); - private Exchange _alternateExchange; + private NonDefaultExchange _alternateExchange; private boolean _durable; private VirtualHost _virtualHost; - private final List<Action<Exchange>> _closeTaskList = new CopyOnWriteArrayList<Action<Exchange>>(); + private final List<Action<ExchangeImpl>> _closeTaskList = new CopyOnWriteArrayList<Action<ExchangeImpl>>(); /** * Whether the exchange is automatically deleted once all queues have detached from it @@ -81,8 +92,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T private LogSubject _logSubject; private Map<ExchangeReferrer,Object> _referrers = new ConcurrentHashMap<ExchangeReferrer,Object>(); - private final CopyOnWriteArrayList<Binding> _bindings = new CopyOnWriteArrayList<Binding>(); - private final UUID _id; + private final CopyOnWriteArrayList<BindingImpl> _bindings = new CopyOnWriteArrayList<BindingImpl>(); private final AtomicInteger _bindingCountHigh = new AtomicInteger(); private final AtomicLong _receivedMessageCount = new AtomicLong(); private final AtomicLong _receivedMessageSize = new AtomicLong(); @@ -91,23 +101,25 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T private final AtomicLong _droppedMessageCount = new AtomicLong(); private final AtomicLong _droppedMessageSize = new AtomicLong(); - private final CopyOnWriteArrayList<Exchange.BindingListener> _listeners = new CopyOnWriteArrayList<Exchange.BindingListener>(); + private final CopyOnWriteArrayList<ExchangeImpl.BindingListener> _listeners = new CopyOnWriteArrayList<ExchangeImpl.BindingListener>(); - private final ConcurrentHashMap<BindingIdentifier, Binding> _bindingsMap = new ConcurrentHashMap<BindingIdentifier, Binding>(); + private final ConcurrentHashMap<BindingIdentifier, BindingImpl> _bindingsMap = new ConcurrentHashMap<BindingIdentifier, BindingImpl>(); - - //TODO : persist creation time - private long _createTime = System.currentTimeMillis(); - private StateChangeListener<Binding, State> _bindingListener; + private StateChangeListener<BindingImpl, State> _bindingListener; public AbstractExchange(VirtualHost vhost, Map<String, Object> attributes) throws UnknownExchangeException { + super(MapValueConverter.getUUIDAttribute(org.apache.qpid.server.model.Exchange.ID, attributes), + Collections.<String,Object>emptyMap(), attributes, vhost.getTaskExecutor()); _virtualHost = vhost; - _id = MapValueConverter.getUUIDAttribute(org.apache.qpid.server.model.Exchange.ID, attributes); _name = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Exchange.NAME, attributes); _durable = MapValueConverter.getBooleanAttribute(org.apache.qpid.server.model.Exchange.DURABLE, attributes); - _autoDelete = MapValueConverter.getEnumAttribute(LifetimePolicy.class, org.apache.qpid.server.model.Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT) != LifetimePolicy.PERMANENT; + _lifetimePolicy = MapValueConverter.getEnumAttribute(LifetimePolicy.class, + org.apache.qpid.server.model.Exchange.LIFETIME_POLICY, + attributes, + LifetimePolicy.PERMANENT); + _autoDelete = _lifetimePolicy != LifetimePolicy.PERMANENT; _logSubject = new ExchangeLogSubject(this, this.getVirtualHost()); // check ACL @@ -116,9 +128,9 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T Object alternateExchangeAttr = attributes.get(org.apache.qpid.server.model.Exchange.ALTERNATE_EXCHANGE); if(alternateExchangeAttr != null) { - if(alternateExchangeAttr instanceof Exchange) + if(alternateExchangeAttr instanceof ExchangeImpl) { - setAlternateExchange((Exchange) alternateExchangeAttr); + setAlternateExchange((ExchangeImpl) alternateExchangeAttr); } else if(alternateExchangeAttr instanceof UUID) { @@ -146,10 +158,10 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } } - _bindingListener = new StateChangeListener<Binding, State>() + _bindingListener = new StateChangeListener<BindingImpl, State>() { @Override - public void stateChanged(final Binding binding, final State oldState, final State newState) + public void stateChanged(final BindingImpl binding, final State oldState, final State newState) { if(newState == State.DELETED) { @@ -184,8 +196,8 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T if(_closed.compareAndSet(false,true)) { - List<Binding> bindings = new ArrayList<Binding>(_bindings); - for(Binding binding : bindings) + List<BindingImpl> bindings = new ArrayList<BindingImpl>(_bindings); + for(BindingImpl binding : bindings) { binding.removeStateChangeListener(_bindingListener); binding.delete(); @@ -198,7 +210,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T CurrentActor.get().message(_logSubject, ExchangeMessages.DELETED()); - for(Action<Exchange> task : _closeTaskList) + for(Action<ExchangeImpl> task : _closeTaskList) { task.performAction(this); } @@ -218,7 +230,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final boolean isBound(String bindingKey, Map<String,Object> arguments, AMQQueue queue) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(bindingKey.equals(b.getBindingKey()) && queue == b.getAMQQueue()) { @@ -232,7 +244,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final boolean isBound(String bindingKey, AMQQueue queue) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(bindingKey.equals(b.getBindingKey()) && queue == b.getAMQQueue()) { @@ -244,7 +256,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final boolean isBound(String bindingKey) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(bindingKey.equals(b.getBindingKey())) { @@ -256,7 +268,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final boolean isBound(AMQQueue queue) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(queue == b.getAMQQueue()) { @@ -269,7 +281,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T @Override public final boolean isBound(Map<String, Object> arguments, AMQQueue queue) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(queue == b.getAMQQueue() && ((b.getArguments() == null || b.getArguments().isEmpty()) @@ -285,7 +297,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final boolean isBound(Map<String, Object> arguments) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(((b.getArguments() == null || b.getArguments().isEmpty()) ? (arguments == null || arguments.isEmpty()) @@ -301,7 +313,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T @Override public final boolean isBound(String bindingKey, Map<String, Object> arguments) { - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(b.getBindingKey().equals(bindingKey) && ((b.getArguments() == null || b.getArguments().isEmpty()) @@ -319,12 +331,12 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return !_bindings.isEmpty(); } - public Exchange getAlternateExchange() + public NonDefaultExchange getAlternateExchange() { return _alternateExchange; } - public void setAlternateExchange(Exchange exchange) + public void setAlternateExchange(NonDefaultExchange exchange) { if(_alternateExchange != null) { @@ -353,17 +365,17 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return !_referrers.isEmpty(); } - public void addCloseTask(final Action<Exchange> task) + public void addCloseTask(final Action<ExchangeImpl> task) { _closeTaskList.add(task); } - public void removeCloseTask(final Action<Exchange> task) + public void removeCloseTask(final Action<ExchangeImpl> task) { _closeTaskList.remove(task); } - public final void doAddBinding(final Binding binding) + public final void doAddBinding(final BindingImpl binding) { _bindings.add(binding); int bindingCountSize = _bindings.size(); @@ -384,7 +396,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return _bindingCountHigh.get(); } - public final void doRemoveBinding(final Binding binding) + public final void doRemoveBinding(final BindingImpl binding) { onUnbind(binding); for(BindingListener listener : _listeners) @@ -394,14 +406,14 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T _bindings.remove(binding); } - public final Collection<Binding> getBindings() + public final Collection<BindingImpl> getBindings() { return Collections.unmodifiableList(_bindings); } - protected abstract void onBind(final Binding binding); + protected abstract void onBind(final BindingImpl binding); - protected abstract void onUnbind(final Binding binding); + protected abstract void onUnbind(final BindingImpl binding); public String getName() @@ -414,11 +426,6 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return Collections.emptyMap(); } - public UUID getId() - { - return _id; - } - public long getBindingCount() { return getBindings().size(); @@ -469,13 +476,13 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T public final <M extends ServerMessage<? extends StorableMessageMetaData>> int send(final M message, final InstanceProperties instanceProperties, final ServerTransaction txn, - final Action<? super MessageInstance<?, ? extends Consumer>> postEnqueueAction) + final Action<? super MessageInstance> postEnqueueAction) { List<? extends BaseQueue> queues = route(message, instanceProperties); if(queues == null || queues.isEmpty()) { - Exchange altExchange = getAlternateExchange(); + ExchangeImpl altExchange = getAlternateExchange(); if(altExchange != null) { return altExchange.send(message, instanceProperties, txn, postEnqueueAction); @@ -520,7 +527,8 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T protected abstract List<? extends BaseQueue> doRoute(final ServerMessage message, final InstanceProperties instanceProperties); - public long getMsgReceives() + @Override + public long getMessagesIn() { return _receivedMessageCount.get(); } @@ -530,12 +538,14 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return _routedMessageCount.get(); } - public long getMsgDrops() + @Override + public long getMessagesDropped() { return _droppedMessageCount.get(); } - public long getByteReceives() + @Override + public long getBytesIn() { return _receivedMessageSize.get(); } @@ -545,16 +555,12 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T return _routedMessageSize.get(); } - public long getByteDrops() + @Override + public long getBytesDropped() { return _droppedMessageSize.get(); } - public long getCreateTime() - { - return _createTime; - } - public void addBindingListener(final BindingListener listener) { _listeners.add(listener); @@ -572,11 +578,11 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } @Override - public boolean replaceBinding(final UUID id, final String bindingKey, + public boolean replaceBinding(final String bindingKey, final AMQQueue queue, final Map<String, Object> arguments) { - return makeBinding(id, bindingKey, queue, arguments, false, true); + return makeBinding(getBinding(bindingKey,queue).getId(), bindingKey, queue, arguments, false, true); } @Override @@ -586,7 +592,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T makeBinding(id, bindingKey,queue, argumentMap,true, false); } - private void removeBinding(final Binding binding) + private void removeBinding(final BindingImpl binding) { String bindingKey = binding.getBindingKey(); AMQQueue queue = binding.getAMQQueue(); @@ -601,7 +607,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T // Check access _virtualHost.getSecurityManager().authoriseUnbind(this, bindingKey, queue); - Binding b = _bindingsMap.remove(new BindingIdentifier(bindingKey,queue)); + BindingImpl b = _bindingsMap.remove(new BindingIdentifier(bindingKey,queue)); if (b != null) { @@ -617,9 +623,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } - - @Override - public Binding getBinding(String bindingKey, AMQQueue queue) + public BindingImpl getBinding(String bindingKey, AMQQueue queue) { assert queue != null; @@ -656,8 +660,8 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T bindingKey, _virtualHost.getName()); } - Binding b = new Binding(id, bindingKey, queue, this, arguments); - Binding existingMapping = _bindingsMap.putIfAbsent(new BindingIdentifier(bindingKey,queue), b); + BindingImpl b = new BindingImpl(id, bindingKey, queue, this, arguments); + BindingImpl existingMapping = _bindingsMap.putIfAbsent(new BindingIdentifier(bindingKey,queue), b); if (existingMapping == null || force) { b.addStateChangeListener(_bindingListener); @@ -682,6 +686,79 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } } + @Override + protected boolean setState(final State currentState, final State desiredState) + { + if(desiredState == State.DELETED) + { + try + { + _virtualHost.removeExchange(this,true); + } + catch (ExchangeIsAlternateException e) + { + return false; + } + catch (RequiredExchangeException e) + { + return false; + } + return true; + } + return false; + } + + @Override + public String setName(final String currentName, final String desiredName) + throws IllegalStateException, AccessControlException + { + return null; + } + + @Override + public State getState() + { + return _closed.get() ? State.DELETED : State.ACTIVE; + } + + @Override + public void setDurable(final boolean durable) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + if(durable == isDurable()) + { + return; + } + throw new IllegalArgumentException(); + } + + @Override + public LifetimePolicy getLifetimePolicy() + { + return _lifetimePolicy; + } + + @Override + public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + // TODO + return _lifetimePolicy; + } + + @Override + public <C extends ConfiguredObject> Collection<C> getChildren(final Class<C> clazz) + { + if(org.apache.qpid.server.model.Binding.class.isAssignableFrom(clazz)) + { + + return (Collection<C>) getBindings(); + } + else + { + return Collections.EMPTY_SET; + } + } private static final class BindingIdentifier { @@ -739,4 +816,120 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } } + @Override + public Collection<Publisher> getPublishers() + { + return Collections.emptySet(); + } + + @Override + public boolean deleteBinding(final String bindingKey, final AMQQueue queue) + { + final BindingImpl binding = getBinding(bindingKey, queue); + if(binding == null) + { + return false; + } + else + { + binding.delete(); + return true; + } + } + + @Override + public boolean hasBinding(final String bindingKey, final AMQQueue queue) + { + return getBinding(bindingKey,queue) != null; + } + + @Override + public void setAlternateExchange(final ExchangeImpl exchange) + { + // todo + _alternateExchange = (NonDefaultExchange) exchange; + } + + @Override + public org.apache.qpid.server.model.Binding createBinding(final String bindingKey, + final Queue queue, + final Map<String, Object> bindingArguments, + final Map<String, Object> attributes) + { + addBinding(bindingKey, (AMQQueue) queue, bindingArguments); + final BindingImpl binding = getBinding(bindingKey, (AMQQueue) queue); + childAdded(binding); + return binding; + } + + @Override + public void delete() + { + try + { + _virtualHost.removeExchange(this,true); + } + catch (ExchangeIsAlternateException e) + { + throw new UnsupportedOperationException(e.getMessage(),e); + } + catch (RequiredExchangeException e) + { + throw new UnsupportedOperationException("'"+e.getMessage()+"' is a reserved exchange and can't be deleted",e); + } + } + + + @Override + public <T extends ConfiguredObject> T getParent(final Class<T> clazz) + { + if(clazz == org.apache.qpid.server.model.VirtualHost.class) + { + return (T) _virtualHost.getModel(); + } + return super.getParent(clazz); + } + + @Override + public Collection<String> getAttributeNames() + { + return getAttributeNames(getClass()); + } + + @Override + public Object getAttribute(final String name) + { + if(ConfiguredObject.STATE.equals(name)) + { + return getState(); + } + else if(LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + else if(DURABLE.equals(name)) + { + return isDurable(); + } + return super.getAttribute(name); + } + + + @Override + protected void changeAttributes(Map<String, Object> attributes) + { + throw new UnsupportedOperationException("Changing attributes on exchange is not supported."); + } + + @Override + protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException + { + _virtualHost.getSecurityManager().authoriseUpdate(this); + } + + @Override + protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException + { + _virtualHost.getSecurityManager().authoriseUpdate(this); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java index 440f0f225f..0d435f43bd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java @@ -19,17 +19,14 @@ package org.apache.qpid.server.exchange; import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; + import org.apache.log4j.Logger; import org.apache.qpid.exchange.ExchangeDefaults; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageInstance; @@ -46,14 +43,13 @@ import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.StateChangeListener; import org.apache.qpid.server.virtualhost.VirtualHost; -public class DefaultExchange implements Exchange<DirectExchange> +public class DefaultExchange implements ExchangeImpl<DirectExchange> { private final QueueRegistry _queueRegistry; private UUID _id; private VirtualHost _virtualHost; private static final Logger _logger = Logger.getLogger(DefaultExchange.class); - private final AtomicBoolean _closed = new AtomicBoolean(); private Map<ExchangeReferrer,Object> _referrers = new ConcurrentHashMap<ExchangeReferrer,Object>(); @@ -76,44 +72,27 @@ public class DefaultExchange implements Exchange<DirectExchange> return DirectExchange.TYPE; } - @Override - public long getBindingCount() - { - return _virtualHost.getQueues().size(); - } - - @Override - public long getByteDrops() - { - return 0; - } - - @Override - public long getByteReceives() - { - return 0; - } @Override - public long getMsgDrops() + public boolean addBinding(String bindingKey, AMQQueue queue, Map<String, Object> arguments) { - return 0; + throw new AccessControlException("Cannot add bindings to the default exchange"); } @Override - public long getMsgReceives() + public boolean deleteBinding(final String bindingKey, final AMQQueue queue) { - return 0; + throw new AccessControlException("Cannot delete bindings from the default exchange"); } @Override - public boolean addBinding(String bindingKey, AMQQueue queue, Map<String, Object> arguments) + public boolean hasBinding(final String bindingKey, final AMQQueue queue) { - throw new AccessControlException("Cannot add bindings to the default exchange"); + return false; } @Override - public boolean replaceBinding(UUID id, String bindingKey, AMQQueue queue, Map<String, Object> arguments) + public boolean replaceBinding(String bindingKey, AMQQueue queue, Map<String, Object> arguments) { throw new AccessControlException("Cannot replace bindings on the default exchange"); } @@ -125,34 +104,6 @@ public class DefaultExchange implements Exchange<DirectExchange> } @Override - public Binding getBinding(String bindingKey, AMQQueue queue) - { - if(_virtualHost.getQueue(bindingKey) == queue) - { - return convertToBinding(queue); - } - else - { - return null; - } - - } - - private Binding convertToBinding(AMQQueue queue) - { - String queueName = queue.getName(); - - UUID exchangeId = UUIDGenerator.generateBindingUUID(ExchangeDefaults.DEFAULT_EXCHANGE_NAME, - queueName, - queueName, - _virtualHost.getName()); - - final Binding binding = new Binding(exchangeId, queueName, queue, this, Collections.EMPTY_MAP); - binding.addStateChangeListener(STATE_CHANGE_LISTENER); - return binding; - } - - @Override public String getTypeName() { return getExchangeType().getType(); @@ -185,7 +136,7 @@ public class DefaultExchange implements Exchange<DirectExchange> @Override public boolean hasBindings() { - return getBindingCount() != 0; + return !_virtualHost.getQueues().isEmpty(); } @Override @@ -225,13 +176,13 @@ public class DefaultExchange implements Exchange<DirectExchange> } @Override - public Exchange getAlternateExchange() + public ExchangeImpl getAlternateExchange() { return null; } @Override - public void setAlternateExchange(Exchange exchange) + public void setAlternateExchange(ExchangeImpl exchange) { _logger.warn("Cannot set the alternate exchange for the default exchange"); } @@ -255,38 +206,9 @@ public class DefaultExchange implements Exchange<DirectExchange> } @Override - public Collection<Binding> getBindings() - { - List<Binding> bindings = new ArrayList<Binding>(); - for(AMQQueue q : _virtualHost.getQueues()) - { - bindings.add(convertToBinding(q)); - } - return bindings; - } - - @Override public void addBindingListener(BindingListener listener) { - _queueRegistry.addRegistryChangeListener(convertListener(listener)); - } - private QueueRegistry.RegistryChangeListener convertListener(final BindingListener listener) - { - return new QueueRegistry.RegistryChangeListener() - { - @Override - public void queueRegistered(AMQQueue queue) - { - listener.bindingAdded(DefaultExchange.this, convertToBinding(queue)); - } - - @Override - public void queueUnregistered(AMQQueue queue) - { - listener.bindingRemoved(DefaultExchange.this, convertToBinding(queue)); - } - }; } @Override @@ -304,7 +226,7 @@ public class DefaultExchange implements Exchange<DirectExchange> public final <M extends ServerMessage<? extends StorableMessageMetaData>> int send(final M message, final InstanceProperties instanceProperties, final ServerTransaction txn, - final Action<? super MessageInstance<?, ? extends Consumer>> postEnqueueAction) + final Action<? super MessageInstance> postEnqueueAction) { final AMQQueue q = _virtualHost.getQueue(message.getRoutingKey()); if(q == null) @@ -338,11 +260,11 @@ public class DefaultExchange implements Exchange<DirectExchange> } } - private static final StateChangeListener<Binding, State> STATE_CHANGE_LISTENER = - new StateChangeListener<Binding, State>() + private static final StateChangeListener<BindingImpl, State> STATE_CHANGE_LISTENER = + new StateChangeListener<BindingImpl, State>() { @Override - public void stateChanged(final Binding object, final State oldState, final State newState) + public void stateChanged(final BindingImpl object, final State oldState, final State newState) { if(newState == State.DELETED) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java index daf85e6d55..e9d0740539 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; import org.apache.qpid.exchange.ExchangeDefaults; -import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.plugin.QpidServiceLoader; import org.apache.qpid.server.util.MapValueConverter; @@ -33,7 +32,6 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.UUID; public class DefaultExchangeFactory implements ExchangeFactory { @@ -48,7 +46,7 @@ public class DefaultExchangeFactory implements ExchangeFactory ExchangeDefaults.TOPIC_EXCHANGE_CLASS}; private final VirtualHost _host; - private Map<String, ExchangeType<? extends Exchange>> _exchangeClassMap = new HashMap<String, ExchangeType<? extends Exchange>>(); + private Map<String, ExchangeType<? extends ExchangeImpl>> _exchangeClassMap = new HashMap<String, ExchangeType<? extends ExchangeImpl>>(); public DefaultExchangeFactory(VirtualHost host) { @@ -92,17 +90,17 @@ public class DefaultExchangeFactory implements ExchangeFactory return new QpidServiceLoader<ExchangeType>().atLeastOneInstanceOf(ExchangeType.class); } - public Collection<ExchangeType<? extends Exchange>> getRegisteredTypes() + public Collection<ExchangeType<? extends ExchangeImpl>> getRegisteredTypes() { return _exchangeClassMap.values(); } @Override - public Exchange createExchange(final Map<String, Object> attributes) + public NonDefaultExchange createExchange(final Map<String, Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException { String type = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Exchange.TYPE, attributes); - ExchangeType<? extends Exchange> exchType = _exchangeClassMap.get(type); + ExchangeType<? extends ExchangeImpl> exchType = _exchangeClassMap.get(type); if (exchType == null) { throw new AMQUnknownExchangeType("Unknown exchange type: " + type,null); @@ -111,7 +109,7 @@ public class DefaultExchangeFactory implements ExchangeFactory } @Override - public Exchange restoreExchange(Map<String,Object> attributes) + public NonDefaultExchange restoreExchange(Map<String,Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException { return createExchange(attributes); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java index 1dfa23f657..e48a640fcb 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java @@ -46,9 +46,9 @@ public class DefaultExchangeRegistry implements ExchangeRegistry /** * Maps from exchange name to exchange instance */ - private ConcurrentMap<String, Exchange> _exchangeMap = new ConcurrentHashMap<String, Exchange>(); + private ConcurrentMap<String, ExchangeImpl> _exchangeMap = new ConcurrentHashMap<String, ExchangeImpl>(); - private Exchange _defaultExchange; + private ExchangeImpl _defaultExchange; private final VirtualHost _host; private final QueueRegistry _queueRegistry; @@ -77,7 +77,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry private void initialiseExchanges(ExchangeFactory factory, DurableConfigurationStore store) { - for (ExchangeType<? extends Exchange> type : factory.getRegisteredTypes()) + for (ExchangeType<? extends ExchangeImpl> type : factory.getRegisteredTypes()) { defineExchange(factory, type.getDefaultExchangeName(), type.getType(), store); } @@ -96,7 +96,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry attributes.put(org.apache.qpid.server.model.Exchange.NAME, name); attributes.put(org.apache.qpid.server.model.Exchange.TYPE, type); attributes.put(org.apache.qpid.server.model.Exchange.DURABLE, true); - Exchange exchange = f.createExchange(attributes); + ExchangeImpl exchange = f.createExchange(attributes); registerExchange(exchange); if(exchange.isDurable()) { @@ -122,7 +122,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry return _host.getDurableConfigurationStore(); } - public void registerExchange(Exchange exchange) + public void registerExchange(ExchangeImpl exchange) { _exchangeMap.put(exchange.getName(), exchange); synchronized (_listeners) @@ -135,14 +135,14 @@ public class DefaultExchangeRegistry implements ExchangeRegistry } } - public Exchange getDefaultExchange() + public ExchangeImpl getDefaultExchange() { return _defaultExchange; } public boolean unregisterExchange(String name, boolean inUse) { - final Exchange exchange = _exchangeMap.get(name); + final ExchangeImpl exchange = _exchangeMap.get(name); if (exchange != null) { @@ -150,7 +150,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry // TODO: check inUse argument - Exchange e = _exchangeMap.remove(name); + ExchangeImpl e = _exchangeMap.remove(name); // if it is null then it was removed by another thread at the same time, we can ignore if (e != null) { @@ -170,9 +170,17 @@ public class DefaultExchangeRegistry implements ExchangeRegistry } - public Collection<Exchange> getExchanges() + public Collection<ExchangeImpl> getExchanges() { - return new ArrayList<Exchange>(_exchangeMap.values()); + return new ArrayList<ExchangeImpl>(_exchangeMap.values()); + } + + @Override + public Collection<NonDefaultExchange> getExchangesExceptDefault() + { + Collection allExchanges = getExchanges(); + allExchanges.remove(_defaultExchange); + return allExchanges; } public void addRegistryChangeListener(RegistryChangeListener listener) @@ -180,7 +188,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry _listeners.add(listener); } - public Exchange getExchange(String name) + public ExchangeImpl getExchange(String name) { if ((name == null) || name.length() == 0) { @@ -195,7 +203,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry @Override public void clearAndUnregisterMbeans() { - for (final Exchange exchange : getExchanges()) + for (final ExchangeImpl exchange : getExchanges()) { //TODO: this is a bit of a hack, what if the listeners aren't aware //that we are just unregistering the MBean because of HA, and aren't @@ -212,7 +220,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry } @Override - public synchronized Exchange getExchange(UUID exchangeId) + public synchronized ExchangeImpl getExchange(UUID exchangeId) { if (exchangeId == null) { @@ -220,8 +228,8 @@ public class DefaultExchangeRegistry implements ExchangeRegistry } else { - Collection<Exchange> exchanges = _exchangeMap.values(); - for (Exchange exchange : exchanges) + Collection<ExchangeImpl> exchanges = _exchangeMap.values(); + for (ExchangeImpl exchange : exchanges) { if (exchange.getId().equals(exchangeId)) { @@ -239,8 +247,8 @@ public class DefaultExchangeRegistry implements ExchangeRegistry { return true; } - Collection<ExchangeType<? extends Exchange>> registeredTypes = _host.getExchangeTypes(); - for (ExchangeType<? extends Exchange> type : registeredTypes) + Collection<ExchangeType<? extends ExchangeImpl>> registeredTypes = _host.getExchangeTypes(); + for (ExchangeType<? extends ExchangeImpl> type : registeredTypes) { if (type.getDefaultExchangeName().equals(name)) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java index 222f838df5..0e8cfb72a1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java @@ -25,7 +25,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.filter.Filterable; @@ -51,17 +51,17 @@ public class DirectExchange extends AbstractExchange<DirectExchange> private static final class BindingSet { - private CopyOnWriteArraySet<Binding> _bindings = new CopyOnWriteArraySet<Binding>(); + private CopyOnWriteArraySet<BindingImpl> _bindings = new CopyOnWriteArraySet<BindingImpl>(); private List<BaseQueue> _unfilteredQueues = new ArrayList<BaseQueue>(); private Map<BaseQueue, MessageFilter> _filteredQueues = new HashMap<BaseQueue, MessageFilter>(); - public synchronized void addBinding(Binding binding) + public synchronized void addBinding(BindingImpl binding) { _bindings.add(binding); recalculateQueues(); } - public synchronized void removeBinding(Binding binding) + public synchronized void removeBinding(BindingImpl binding) { _bindings.remove(binding); recalculateQueues(); @@ -72,7 +72,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> List<BaseQueue> queues = new ArrayList<BaseQueue>(_bindings.size()); Map<BaseQueue, MessageFilter> filteredQueues = new HashMap<BaseQueue,MessageFilter>(); - for(Binding b : _bindings) + for(BindingImpl b : _bindings) { if(FilterSupport.argumentsContainFilter(b.getArguments())) @@ -85,7 +85,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> catch (AMQInvalidArgumentException e) { _logger.warn("Binding ignored: cannot parse filter on binding of queue '"+b.getAMQQueue().getName() - + "' to exchange '" + b.getExchangeImpl().getName() + + "' to exchange '" + b.getExchange().getName() + "' with arguments: " + b.getArguments(), e); } @@ -109,7 +109,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> return _unfilteredQueues; } - public CopyOnWriteArraySet<Binding> getBindings() + public CopyOnWriteArraySet<BindingImpl> getBindings() { return _bindings; } @@ -185,7 +185,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> } - protected void onBind(final Binding binding) + protected void onBind(final BindingImpl binding) { String bindingKey = binding.getBindingKey(); AMQQueue queue = binding.getAMQQueue(); @@ -209,7 +209,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> } - protected void onUnbind(final Binding binding) + protected void onUnbind(final BindingImpl binding) { assert binding != null; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java index de30b7a244..0c7cece752 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java @@ -25,16 +25,15 @@ import org.apache.qpid.server.virtualhost.UnknownExchangeException; import java.util.Collection; import java.util.Map; -import java.util.UUID; public interface ExchangeFactory { - Collection<ExchangeType<? extends Exchange>> getRegisteredTypes(); + Collection<ExchangeType<? extends ExchangeImpl>> getRegisteredTypes(); - Exchange createExchange(Map<String,Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException; + NonDefaultExchange createExchange(Map<String,Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException; - Exchange restoreExchange(Map<String,Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException; + NonDefaultExchange restoreExchange(Map<String,Object> attributes) throws AMQUnknownExchangeType, UnknownExchangeException; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeImpl.java index 613a827462..975cac5e54 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeImpl.java @@ -20,17 +20,15 @@ */ package org.apache.qpid.server.exchange; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.virtualhost.VirtualHost; -import java.util.Collection; import java.util.Map; import java.util.UUID; -public interface Exchange<T extends Exchange> extends ExchangeReferrer, MessageDestination +public interface ExchangeImpl<T extends NonDefaultExchange> extends ExchangeReferrer, MessageDestination { UUID getId(); @@ -48,32 +46,22 @@ public interface Exchange<T extends Exchange> extends ExchangeReferrer, MessageD */ boolean isAutoDelete(); - Exchange getAlternateExchange(); - - void setAlternateExchange(Exchange exchange); - - long getBindingCount(); - - long getByteDrops(); - - long getByteReceives(); - - long getMsgDrops(); - - long getMsgReceives(); + ExchangeImpl getAlternateExchange(); + void setAlternateExchange(ExchangeImpl exchange); boolean addBinding(String bindingKey, AMQQueue queue, Map<String, Object> arguments); + boolean deleteBinding(String bindingKey, AMQQueue queue); + boolean hasBinding(String bindingKey, AMQQueue queue); + - boolean replaceBinding(UUID id, String bindingKey, + boolean replaceBinding(String bindingKey, AMQQueue queue, Map<String, Object> arguments); void restoreBinding(UUID id, String bindingKey, AMQQueue queue, Map<String, Object> argumentMap); - Binding getBinding(String bindingKey, AMQQueue queue); - void close(); /** @@ -108,8 +96,6 @@ public interface Exchange<T extends Exchange> extends ExchangeReferrer, MessageD */ boolean hasBindings(); - Collection<Binding> getBindings(); - boolean isBound(AMQQueue queue); boolean isBound(Map<String, Object> arguments); @@ -128,8 +114,8 @@ public interface Exchange<T extends Exchange> extends ExchangeReferrer, MessageD public interface BindingListener { - void bindingAdded(Exchange exchange, Binding binding); - void bindingRemoved(Exchange exchange, Binding binding); + void bindingAdded(ExchangeImpl exchange, BindingImpl binding); + void bindingRemoved(ExchangeImpl exchange, BindingImpl binding); } public void addBindingListener(BindingListener listener); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java index de05bfb4d9..b4f14b00c8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java @@ -26,13 +26,13 @@ import java.util.UUID; public interface ExchangeRegistry { - void registerExchange(Exchange exchange); + void registerExchange(ExchangeImpl exchange); - Exchange getDefaultExchange(); + ExchangeImpl getDefaultExchange(); void initialise(ExchangeFactory exchangeFactory); - Exchange getExchange(String exchangeName); + ExchangeImpl getExchange(String exchangeName); /** * Unregister an exchange @@ -43,9 +43,11 @@ public interface ExchangeRegistry void clearAndUnregisterMbeans(); - Exchange getExchange(UUID exchangeId); + ExchangeImpl getExchange(UUID exchangeId); - Collection<Exchange> getExchanges(); + Collection<ExchangeImpl> getExchanges(); + + Collection<NonDefaultExchange> getExchangesExceptDefault(); void addRegistryChangeListener(RegistryChangeListener listener); @@ -58,7 +60,7 @@ public interface ExchangeRegistry interface RegistryChangeListener { - void exchangeRegistered(Exchange exchange); - void exchangeUnregistered(Exchange exchange); + void exchangeRegistered(ExchangeImpl exchange); + void exchangeUnregistered(ExchangeImpl exchange); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java index 46f4e3256b..c7f81f1d15 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java @@ -27,7 +27,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.filter.Filterable; @@ -55,10 +55,10 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> private final CopyOnWriteArrayList<AMQQueue> _unfilteredQueues = new CopyOnWriteArrayList<AMQQueue>(); private final CopyOnWriteArrayList<AMQQueue> _filteredQueues = new CopyOnWriteArrayList<AMQQueue>(); - private final AtomicReference<Map<AMQQueue,Map<Binding, MessageFilter>>> _filteredBindings = - new AtomicReference<Map<AMQQueue,Map<Binding, MessageFilter>>>(); + private final AtomicReference<Map<AMQQueue,Map<BindingImpl, MessageFilter>>> _filteredBindings = + new AtomicReference<Map<AMQQueue,Map<BindingImpl, MessageFilter>>>(); { - Map<AMQQueue,Map<Binding, MessageFilter>> emptyMap = Collections.emptyMap(); + Map<AMQQueue,Map<BindingImpl, MessageFilter>> emptyMap = Collections.emptyMap(); _filteredBindings.set(emptyMap); } @@ -82,7 +82,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> public ArrayList<BaseQueue> doRoute(ServerMessage payload, final InstanceProperties instanceProperties) { - for(Binding b : getBindings()) + for(BindingImpl b : getBindings()) { b.incrementMatches(); } @@ -90,12 +90,12 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> final ArrayList<BaseQueue> result = new ArrayList<BaseQueue>(_unfilteredQueues); - final Map<AMQQueue, Map<Binding, MessageFilter>> filteredBindings = _filteredBindings.get(); + final Map<AMQQueue, Map<BindingImpl, MessageFilter>> filteredBindings = _filteredBindings.get(); if(!_filteredQueues.isEmpty()) { for(AMQQueue q : _filteredQueues) { - final Map<Binding, MessageFilter> bindingMessageFilterMap = filteredBindings.get(q); + final Map<BindingImpl, MessageFilter> bindingMessageFilterMap = filteredBindings.get(q); if(!(bindingMessageFilterMap == null || result.contains(q))) { for(MessageFilter filter : bindingMessageFilterMap.values()) @@ -122,7 +122,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> } - protected synchronized void onBind(final Binding binding) + protected synchronized void onBind(final BindingImpl binding) { AMQQueue queue = binding.getAMQQueue(); assert queue != null; @@ -148,17 +148,17 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> try { - HashMap<AMQQueue,Map<Binding, MessageFilter>> filteredBindings = - new HashMap<AMQQueue,Map<Binding, MessageFilter>>(_filteredBindings.get()); + HashMap<AMQQueue,Map<BindingImpl, MessageFilter>> filteredBindings = + new HashMap<AMQQueue,Map<BindingImpl, MessageFilter>>(_filteredBindings.get()); - Map<Binding, MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); + Map<BindingImpl, MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); final MessageFilter messageFilter = FilterSupport.createMessageFilter(binding.getArguments(), binding.getAMQQueue()); if(bindingsForQueue != null) { - bindingsForQueue = new HashMap<Binding,MessageFilter>(bindingsForQueue); + bindingsForQueue = new HashMap<BindingImpl,MessageFilter>(bindingsForQueue); bindingsForQueue.put(binding, messageFilter); } else @@ -188,7 +188,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> } } - protected synchronized void onUnbind(final Binding binding) + protected synchronized void onUnbind(final BindingImpl binding) { AMQQueue queue = binding.getAMQQueue(); if(binding.getArguments() == null || binding.getArguments().isEmpty() || !FilterSupport.argumentsContainFilter(binding.getArguments())) @@ -210,13 +210,13 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> } else // we are removing a binding with filters { - HashMap<AMQQueue,Map<Binding, MessageFilter>> filteredBindings = - new HashMap<AMQQueue,Map<Binding, MessageFilter>>(_filteredBindings.get()); + HashMap<AMQQueue,Map<BindingImpl, MessageFilter>> filteredBindings = + new HashMap<AMQQueue,Map<BindingImpl, MessageFilter>>(_filteredBindings.get()); - Map<Binding,MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); + Map<BindingImpl,MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); if(bindingsForQueue.size()>1) { - bindingsForQueue = new HashMap<Binding,MessageFilter>(bindingsForQueue); + bindingsForQueue = new HashMap<BindingImpl,MessageFilter>(bindingsForQueue); bindingsForQueue.remove(binding); filteredBindings.put(binding.getAMQQueue(),bindingsForQueue); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java index 23bd311d04..5de3fa4d4e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java @@ -22,7 +22,7 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.filter.MessageFilter; @@ -42,7 +42,7 @@ class HeadersBinding private static final Logger _logger = Logger.getLogger(HeadersBinding.class); private final Map<String,Object> _mappings; - private final Binding _binding; + private final BindingImpl _binding; private final Set<String> required = new HashSet<String>(); private final Map<String,Object> matches = new HashMap<String,Object>(); private boolean matchAny; @@ -56,7 +56,7 @@ class HeadersBinding * * @param binding the binding to create a header binding using */ - public HeadersBinding(Binding binding) + public HeadersBinding(BindingImpl binding) { _binding = binding; if(_binding !=null) @@ -81,7 +81,7 @@ class HeadersBinding catch (AMQInvalidArgumentException e) { _logger.warn("Invalid filter in binding queue '"+_binding.getAMQQueue().getName() - +"' to exchange '"+_binding.getExchangeImpl().getName() + +"' to exchange '"+_binding.getExchange().getName() +"' with arguments: " + _binding.getArguments()); _filter = new MessageFilter() { @@ -112,7 +112,7 @@ class HeadersBinding } } - public Binding getBinding() + public BindingImpl getBinding() { return _binding; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java index e1a314b394..60df38af55 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java @@ -22,7 +22,7 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.ServerMessage; @@ -71,8 +71,8 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> private static final Logger _logger = Logger.getLogger(HeadersExchange.class); - private final ConcurrentHashMap<String, CopyOnWriteArraySet<Binding>> _bindingsByKey = - new ConcurrentHashMap<String, CopyOnWriteArraySet<Binding>>(); + private final ConcurrentHashMap<String, CopyOnWriteArraySet<BindingImpl>> _bindingsByKey = + new ConcurrentHashMap<String, CopyOnWriteArraySet<BindingImpl>>(); private final CopyOnWriteArrayList<HeadersBinding> _bindingHeaderMatchers = new CopyOnWriteArrayList<HeadersBinding>(); @@ -106,7 +106,7 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> { if (hb.matches(Filterable.Factory.newInstance(payload,instanceProperties))) { - Binding b = hb.getBinding(); + BindingImpl b = hb.getBinding(); b.incrementMatches(); @@ -122,7 +122,7 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> return new ArrayList<BaseQueue>(queues); } - protected void onBind(final Binding binding) + protected void onBind(final BindingImpl binding) { String bindingKey = binding.getBindingKey(); AMQQueue queue = binding.getAMQQueue(); @@ -131,12 +131,12 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> assert queue != null; assert bindingKey != null; - CopyOnWriteArraySet<Binding> bindings = _bindingsByKey.get(bindingKey); + CopyOnWriteArraySet<BindingImpl> bindings = _bindingsByKey.get(bindingKey); if(bindings == null) { - bindings = new CopyOnWriteArraySet<Binding>(); - CopyOnWriteArraySet<Binding> newBindings; + bindings = new CopyOnWriteArraySet<BindingImpl>(); + CopyOnWriteArraySet<BindingImpl> newBindings; if((newBindings = _bindingsByKey.putIfAbsent(bindingKey, bindings)) != null) { bindings = newBindings; @@ -154,11 +154,11 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> } - protected void onUnbind(final Binding binding) + protected void onUnbind(final BindingImpl binding) { assert binding != null; - CopyOnWriteArraySet<Binding> bindings = _bindingsByKey.get(binding.getBindingKey()); + CopyOnWriteArraySet<BindingImpl> bindings = _bindingsByKey.get(binding.getBindingKey()); if(bindings != null) { bindings.remove(binding); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/NonDefaultExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/NonDefaultExchange.java new file mode 100644 index 0000000000..6e5eb98078 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/NonDefaultExchange.java @@ -0,0 +1,32 @@ +/* + * + * 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.server.exchange; + +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.model.Exchange; +import org.apache.qpid.server.queue.AMQQueue; + +public interface NonDefaultExchange<T extends NonDefaultExchange<T>> extends Exchange<T>, ExchangeImpl<T> +{ + NonDefaultExchange getAlternateExchange(); + + BindingImpl getBinding(String bindingName, AMQQueue queue); +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java index e9bcfe91cc..e7236bdf3e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java @@ -28,7 +28,7 @@ import java.util.HashSet; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.exchange.topic.TopicExchangeResult; import org.apache.qpid.server.exchange.topic.TopicMatcherResult; import org.apache.qpid.server.exchange.topic.TopicNormalizer; @@ -57,7 +57,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> private final Map<String, TopicExchangeResult> _topicExchangeResults = new ConcurrentHashMap<String, TopicExchangeResult>(); - private final Map<Binding, Map<String,Object>> _bindings = new HashMap<Binding, Map<String,Object>>(); + private final Map<BindingImpl, Map<String,Object>> _bindings = new HashMap<BindingImpl, Map<String,Object>>(); public TopicExchange(final VirtualHost vhost, final Map attributes) throws UnknownExchangeException { @@ -70,7 +70,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> return TYPE; } - protected synchronized void registerQueue(final Binding binding) throws AMQInvalidArgumentException + protected synchronized void registerQueue(final BindingImpl binding) throws AMQInvalidArgumentException { final String bindingKey = binding.getBindingKey(); AMQQueue queue = binding.getAMQQueue(); @@ -188,7 +188,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> } - private boolean deregisterQueue(final Binding binding) + private boolean deregisterQueue(final BindingImpl binding) { if(_bindings.containsKey(binding)) { @@ -240,7 +240,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> { TopicExchangeResult res = (TopicExchangeResult)result; - for(Binding b : res.getBindings()) + for(BindingImpl b : res.getBindings()) { b.incrementMatches(); } @@ -253,7 +253,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> } - protected void onBind(final Binding binding) + protected void onBind(final BindingImpl binding) { try { @@ -266,7 +266,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> } } - protected void onUnbind(final Binding binding) + protected void onUnbind(final BindingImpl binding) { deregisterQueue(binding); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java index 77060cb146..d3a6bd9260 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.exchange.topic; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; import org.apache.qpid.server.queue.AMQQueue; @@ -36,7 +36,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public final class TopicExchangeResult implements TopicMatcherResult { - private final List<Binding> _bindings = new CopyOnWriteArrayList<Binding>(); + private final List<BindingImpl> _bindings = new CopyOnWriteArrayList<BindingImpl>(); private final Map<AMQQueue, Integer> _unfilteredQueues = new ConcurrentHashMap<AMQQueue, Integer>(); private final ConcurrentHashMap<AMQQueue, Map<MessageFilter,Integer>> _filteredQueues = new ConcurrentHashMap<AMQQueue, Map<MessageFilter, Integer>>(); private volatile ArrayList<AMQQueue> _unfilteredQueueList = new ArrayList<AMQQueue>(0); @@ -80,19 +80,19 @@ public final class TopicExchangeResult implements TopicMatcherResult return _unfilteredQueues.keySet(); } - public void addBinding(Binding binding) + public void addBinding(BindingImpl binding) { _bindings.add(binding); } - public void removeBinding(Binding binding) + public void removeBinding(BindingImpl binding) { _bindings.remove(binding); } - public List<Binding> getBindings() + public List<BindingImpl> getBindings() { - return new ArrayList<Binding>(_bindings); + return new ArrayList<BindingImpl>(_bindings); } public void addFilteredQueue(AMQQueue queue, MessageFilter filter) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java index ea0faf132e..043fa4a664 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java @@ -122,7 +122,7 @@ public class FilterSupport public static final class NoLocalFilter implements MessageFilter { - private final MessageSource<?,?> _queue; + private final MessageSource _queue; private NoLocalFilter(MessageSource queue) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java index 476dff249a..2a014887d7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.logging.subjects; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.queue.AMQQueue; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.BINDING_FORMAT; @@ -37,7 +37,7 @@ public class BindingLogSubject extends AbstractLogSubject * @param exchange * @param queue */ - public BindingLogSubject(String routingKey, Exchange exchange, + public BindingLogSubject(String routingKey, ExchangeImpl exchange, AMQQueue queue) { setLogStringWithFormat(BINDING_FORMAT, diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubject.java index 6a03ce3693..2ad1b63dea 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubject.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.logging.subjects; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.virtualhost.VirtualHost; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.EXCHANGE_FORMAT; @@ -29,7 +29,7 @@ public class ExchangeLogSubject extends AbstractLogSubject { /** Create an ExchangeLogSubject that Logs in the following format. */ - public ExchangeLogSubject(Exchange exchange, VirtualHost vhost) + public ExchangeLogSubject(ExchangeImpl exchange, VirtualHost vhost) { setLogStringWithFormat(EXCHANGE_FORMAT, vhost.getName(), exchange.getExchangeType().getType(), exchange.getName()); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageDestination.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageDestination.java index 62f5b3634b..155f209ffb 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageDestination.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageDestination.java @@ -41,5 +41,5 @@ public interface MessageDestination extends MessageNode <M extends ServerMessage<? extends StorableMessageMetaData>> int send(M message, InstanceProperties instanceProperties, ServerTransaction txn, - Action<? super MessageInstance<?,? extends Consumer>> postEnqueueAction); + Action<? super MessageInstance> postEnqueueAction); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java index 0bdf83d981..8c69f47367 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java @@ -22,13 +22,14 @@ package org.apache.qpid.server.message; import org.apache.qpid.server.filter.Filterable; +import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.store.TransactionLogResource; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.StateChangeListener; -public interface MessageInstance<M extends MessageInstance<M,C>, C extends Consumer> +public interface MessageInstance { @@ -43,33 +44,33 @@ public interface MessageInstance<M extends MessageInstance<M,C>, C extends Consu void decrementDeliveryCount(); - void addStateChangeListener(StateChangeListener<? super M,State> listener); + void addStateChangeListener(StateChangeListener<? super MessageInstance,State> listener); - boolean removeStateChangeListener(StateChangeListener<? super M, State> listener); + boolean removeStateChangeListener(StateChangeListener<? super MessageInstance, State> listener); boolean acquiredByConsumer(); - boolean isAcquiredBy(C consumer); + boolean isAcquiredBy(Consumer consumer); void setRedelivered(); boolean isRedelivered(); - C getDeliveredConsumer(); + Consumer getDeliveredConsumer(); void reject(); - boolean isRejectedBy(C consumer); + boolean isRejectedBy(Consumer consumer); boolean getDeliveredToConsumer(); boolean expired(); - boolean acquire(C sub); + boolean acquire(Consumer sub); int getMaximumDeliveryCount(); - int routeToAlternate(Action<? super MessageInstance<?, ? extends Consumer>> action, ServerTransaction txn); + int routeToAlternate(Action<? super MessageInstance> action, ServerTransaction txn); Filterable asFilterable(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java index cb1c8a5384..382a9df7e9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java @@ -29,23 +29,23 @@ import org.apache.qpid.server.store.TransactionLogResource; import java.util.Collection; import java.util.EnumSet; -public interface MessageSource<C extends Consumer, S extends MessageSource<C,S>> extends TransactionLogResource, MessageNode +public interface MessageSource extends TransactionLogResource, MessageNode { - <T extends ConsumerTarget> C addConsumer(T target, FilterManager filters, + Consumer addConsumer(ConsumerTarget target, FilterManager filters, Class<? extends ServerMessage> messageClass, String consumerName, EnumSet<Consumer.Option> options) throws ExistingExclusiveConsumer, ExistingConsumerPreventsExclusive, ConsumerAccessRefused; - Collection<C> getConsumers(); + Collection<? extends Consumer> getConsumers(); - void addConsumerRegistrationListener(ConsumerRegistrationListener<S> listener); + void addConsumerRegistrationListener(ConsumerRegistrationListener<? super MessageSource> listener); - void removeConsumerRegistrationListener(ConsumerRegistrationListener<S> listener); + void removeConsumerRegistrationListener(ConsumerRegistrationListener<? super MessageSource> listener); boolean verifySessionAccess(AMQSessionModel<?,?> session); - interface ConsumerRegistrationListener<Q extends MessageSource<? extends Consumer,?>> + interface ConsumerRegistrationListener<Q extends MessageSource> { void consumerAdded(Q source, Consumer consumer); void consumerRemoved(Q queue, Consumer consumer); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java index 8d225ad64c..aa797154e4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java @@ -28,10 +28,8 @@ import org.apache.qpid.server.security.AccessControl; public interface AccessControlProvider<X extends AccessControlProvider<X>> extends ConfiguredObject<X> { - public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; public static final String TYPE = "type"; //retrieve the underlying AccessControl object diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java index d75ad83025..b806ce4328 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java @@ -30,10 +30,8 @@ public interface AuthenticationProvider<X extends AuthenticationProvider<X>> ext { public static final String DESCRIPTION = "description"; - public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; //children Collection<VirtualHostAlias> getVirtualHostPortBindings(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java index e9244cc0b7..5bc7ea2871 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java @@ -28,18 +28,6 @@ import java.util.Map; public interface Binding<X extends Binding<X>> extends ConfiguredObject<X> { - public String MATCHED_BYTES = "matchedBytes"; - public String MATCHED_MESSAGES = "matchedMessages"; - public String STATE_CHANGED = "stateChanged"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableCollection( - Arrays.asList( - MATCHED_BYTES, - MATCHED_MESSAGES, - STATE_CHANGED)); - - public String ARGUMENTS = "arguments"; public String DURABLE = "durable"; public String LIFETIME_POLICY = "lifetimePolicy"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java index 78b1204fe6..e7f7814c56 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java @@ -47,8 +47,6 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X> String SUPPORTED_PREFERENCES_PROVIDER_TYPES = "supportedPreferencesProviderTypes"; String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String DEFAULT_VIRTUAL_HOST = "defaultVirtualHost"; String STATISTICS_REPORTING_PERIOD = "statisticsReportingPeriod"; String STATISTICS_REPORTING_RESET_ENABLED = "statisticsReportingResetEnabled"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java index 5535e22e83..44df5f70ee 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java @@ -39,6 +39,7 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>> public static final String DESCRIPTION = "description"; public static final String LAST_UPDATED_BY = "lastUpdatedBy"; public static final String LAST_UPDATED_TIME = "lastUpdatedTime"; + public static final String STATE = "state"; public static final String CREATED_BY = "createdBy"; public static final String CREATED_TIME = "createdTime"; @@ -204,28 +205,6 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>> IllegalArgumentException; /** - * Get the time the object will live once the lifetime policy conditions are no longer fulfilled - * - * @return the time to live - */ - @ManagedAttribute - long getTimeToLive(); - - /** - * Set the ttl value - * - * @param expected the ttl the caller believes the object currently has - * @param desired the ttl value the caller - * @return the new ttl value - * @throws IllegalStateException if the ttl cannot be set in the current state - * @throws AccessControlException if the caller does not have permission to change the ttl - * @throws IllegalArgumentException if the object does not support the requested ttl value - */ - long setTimeToLive(long expected, long desired) throws IllegalStateException, - AccessControlException, - IllegalArgumentException; - - /** * Get the names of attributes that are set on this object * * Note that the returned collection is correct at the time the method is called, but will not reflect future diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java index 335f4cf600..f2c0fdb5c0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java @@ -31,7 +31,6 @@ public interface Connection<X extends Connection<X>> extends ConfiguredObject<X> public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; public static final String CLIENT_ID = "clientId"; public static final String CLIENT_VERSION = "clientVersion"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java index 24711e6030..1911eff78b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java @@ -34,7 +34,6 @@ public interface Consumer<X extends Consumer<X>> extends ConfiguredObject<X> public String DURABLE = "durable"; public String LIFETIME_POLICY = "lifetimePolicy"; public String STATE = "state"; - public String TIME_TO_LIVE = "timeToLive"; @ManagedAttribute String getDistributionMode(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java index 61519ca3f9..cd2f281bef 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java @@ -32,7 +32,6 @@ public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String ALTERNATE_EXCHANGE = "alternateExchange"; // Attributes @@ -41,7 +40,7 @@ public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X> Exchange<?> getAlternateExchange(); //children - Collection<Binding> getBindings(); + Collection<? extends Binding> getBindings(); Collection<Publisher> getPublishers(); @ManagedStatistic diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java index df5d108914..d4a6b3f2d6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java @@ -24,6 +24,4 @@ public interface Group<X extends Group<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; - } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java index 154be964b9..f7ab5ff223 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java @@ -28,6 +28,5 @@ public interface GroupMember<X extends GroupMember<X>> extends ConfiguredObject< String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java index e47d6828d9..c182834788 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java @@ -28,10 +28,8 @@ import java.util.Set; public interface GroupProvider<X extends GroupProvider<X>> extends ConfiguredObject<X> { public static final String DESCRIPTION = "description"; - public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; Set<Principal> getGroupPrincipalsForUser(String username); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java index cb985f113f..9fee4f4df7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java @@ -31,7 +31,6 @@ public interface KeyStore<X extends KeyStore<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String DESCRIPTION = "description"; String PATH = "path"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java index ae68aeb670..792601d946 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java @@ -29,8 +29,6 @@ public interface Plugin<X extends Plugin<X>> extends ConfiguredObject<X> //Hack, using it for the class name only for consistency with the other things. String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; // Attributes diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java index 2b4bea82ad..72bf6bc523 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java @@ -27,8 +27,6 @@ public interface Port<X extends Port<X>> extends ConfiguredObject<X> { String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String BINDING_ADDRESS = "bindingAddress"; String PORT = "port"; String PROTOCOLS = "protocols"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java index 5855408ffb..9310491076 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java @@ -28,8 +28,6 @@ public interface PreferencesProvider<X extends PreferencesProvider<X>> extends C { String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; /** * Returns preferences {@link Map} for a given user ID diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java index dc7f48aa9d..f6625ed2b9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java @@ -21,6 +21,9 @@ package org.apache.qpid.server.model; import java.util.Collection; + +import org.apache.qpid.server.message.MessageInstance; +import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.queue.QueueEntryVisitor; @ManagedObject @@ -28,10 +31,8 @@ import org.apache.qpid.server.queue.QueueEntryVisitor; public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> { - public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; public static final String ALERT_REPEAT_GAP = "alertRepeatGap"; public static final String ALERT_THRESHOLD_MESSAGE_AGE = "alertThresholdMessageAge"; @@ -122,15 +123,15 @@ public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> //children - Collection<Binding> getBindings(); - Collection<Consumer> getConsumers(); + Collection<? extends Binding> getBindings(); + Collection<? extends Consumer> getConsumers(); //operations void visit(QueueEntryVisitor visitor); - void delete(); + int delete(); void setNotificationListener(QueueNotificationListener listener); @@ -147,13 +148,13 @@ public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> long getMessagesOut(); @ManagedStatistic - long getBindingCount(); + int getBindingCount(); @ManagedStatistic - long getConsumerCount(); + int getConsumerCount(); @ManagedStatistic - long getConsumerCountWithCredit(); + int getConsumerCountWithCredit(); @ManagedStatistic long getPersistentDequeuedBytes(); @@ -171,7 +172,7 @@ public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> long getQueueDepthBytes(); @ManagedStatistic - long getQueueDepthMessages(); + int getQueueDepthMessages(); @ManagedStatistic long getTotalDequeuedBytes(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java index 5dbec8cdd9..8e462883eb 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java @@ -29,7 +29,6 @@ public interface Session<X extends Session<X>> extends ConfiguredObject<X> public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; - public static final String TIME_TO_LIVE = "timeToLive"; public static final String CHANNEL_ID = "channelId"; // PRODUCER_FLOW_BLOCKED is exposed as an interim step. We will expose attribute(s) that exposing diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Statistics.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Statistics.java deleted file mode 100644 index 92d6f47741..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Statistics.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - * <p/> - * http://www.apache.org/licenses/LICENSE-2.0 - * <p/> - * 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.server.model; - -import java.util.Collection; - -public interface Statistics -{ - Collection<String> getStatisticNames(); - public Object getStatistic(String name); -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java index bba7b8c11e..a5abd7b34e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java @@ -31,7 +31,6 @@ public interface TrustStore<X extends TrustStore<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String DESCRIPTION = "description"; String PATH = "path"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java index cef011a6f7..1c9c5d844b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java @@ -31,7 +31,6 @@ public interface User<X extends User<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String PASSWORD = "password"; // Attributes diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java index bd3183a77a..20e3a7f932 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.model; +import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.store.MessageStore; @@ -56,8 +57,6 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< String SUPPORTED_QUEUE_TYPES = "supportedQueueTypes"; String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; - String TIME_TO_LIVE = "timeToLive"; String CONFIG_PATH = "configPath"; // Attributes @@ -156,7 +155,7 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< Collection<Exchange> getExchanges(); Exchange createExchange(String name, State initialState, boolean durable, - LifetimePolicy lifetime, long ttl, String type, Map<String, Object> attributes) + LifetimePolicy lifetime, String type, Map<String, Object> attributes) throws AccessControlException, IllegalArgumentException; Queue createQueue(Map<String, Object> attributes) @@ -187,6 +186,9 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< */ SecurityManager getSecurityManager(); + // TODO - remove this + TaskExecutor getTaskExecutor(); + MessageStore getMessageStore(); String getType(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java index 92e0d7fff9..51ca7d8418 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.model; -import java.security.AccessControlException; import java.util.Collection; public interface VirtualHostAlias<X extends VirtualHostAlias<X>> extends ConfiguredObject<X> diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java index 0b8d3e8e1d..1cf5ddf02a 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java @@ -101,18 +101,6 @@ public abstract class AbstractKeyStoreAdapter<X extends ConfiguredObject<X>> ext } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, IllegalArgumentException - { - throw new IllegalStateException(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return Collections.emptySet(); @@ -147,10 +135,6 @@ public abstract class AbstractKeyStoreAdapter<X extends ConfiguredObject<X>> ext { return getLifetimePolicy(); } - else if(KeyStore.TIME_TO_LIVE.equals(name)) - { - return getTimeToLive(); - } else if(KeyStore.PASSWORD.equals(name)) { return getPassword(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java index b70f93c1e3..f42e5e2078 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java @@ -82,20 +82,6 @@ public abstract class AbstractPluginAdapter<X extends Plugin<X>> extends Abstrac } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new UnsupportedOperationException(); - } - - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return Collections.emptyList(); @@ -126,10 +112,6 @@ public abstract class AbstractPluginAdapter<X extends Plugin<X>> extends Abstrac { return getLifetimePolicy(); } - else if (TIME_TO_LIVE.equals(name)) - { - return getTimeToLive(); - } return super.getAttribute(name); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AccessControlProviderAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AccessControlProviderAdapter.java index 11128b45d3..f3c8d52286 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AccessControlProviderAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AccessControlProviderAdapter.java @@ -132,19 +132,6 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject<Acces } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; @@ -169,10 +156,6 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject<Acces { return getState(); } - else if(TIME_TO_LIVE.equals(name)) - { - // TODO - } return super.getAttribute(name); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java index fe11b88ef5..c8e056855b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java @@ -144,19 +144,6 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; @@ -181,10 +168,6 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv { return getState(); } - else if(TIME_TO_LIVE.equals(name)) - { - // TODO - } return super.getAttribute(name); } @@ -644,19 +627,6 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - throw new IllegalStateException("ttl cannot be updated"); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return null; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java deleted file mode 100644 index df9f4330cd..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * - * 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.server.model.adapter; - -import java.security.AccessControlException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.qpid.server.model.*; - -final class BindingAdapter extends AbstractConfiguredObject<BindingAdapter> implements Binding<BindingAdapter> -{ - private final org.apache.qpid.server.binding.Binding _binding; - private final ExchangeAdapter _exchange; - private QueueAdapter _queue; - - public BindingAdapter(final org.apache.qpid.server.binding.Binding binding, - ExchangeAdapter exchangeAdapter, - QueueAdapter queueAdapter) - { - super(binding.getId(), queueAdapter.getTaskExecutor()); - _binding = binding; - _exchange = exchangeAdapter; - _queue = queueAdapter; - addParent(Queue.class, queueAdapter); - addParent(Exchange.class, exchangeAdapter); - } - - - public ExchangeAdapter getExchange() - { - return _exchange; - } - - public QueueAdapter getQueue() - { - return _queue; - } - - public String getName() - { - return _binding.getBindingKey(); - } - - public String setName(final String currentName, final String desiredName) - throws IllegalStateException, AccessControlException - { - return null; //TODO - } - - public State getState() - { - return _binding.getState(); - } - - public boolean isDurable() - { - return _binding.isDurable(); - } - - public void setDurable(final boolean durable) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - //TODO - } - - public LifetimePolicy getLifetimePolicy() - { - return LifetimePolicy.PERMANENT; - } - - public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return null; //TODO - } - - public long getTimeToLive() - { - return 0; //TODO - } - - public long setTimeToLive(final long expected, final long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; //TODO - } - - @Override - public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) - { - return Collections.emptySet(); - } - - @Override - public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) - { - throw new IllegalArgumentException("Cannot add children to a binding"); - } - - public Map<String, Object> getArguments() - { - return new HashMap<String, Object> (_binding.getArguments()); - } - - @Override - public long getMatches() - { - return _binding.getMatches(); - } - - public void delete() - { - _binding.delete(); - } - - @Override - public Object getAttribute(final String name) - { - if(ID.equals(name)) - { - return getId(); - } - else if(NAME.equals(name)) - { - return getName(); - } - else if(STATE.equals(name)) - { - return getState(); - } - else if(DURABLE.equals(name)) - { - return isDurable(); - } - else if(LIFETIME_POLICY.equals(name)) - { - return _queue.getLifetimePolicy() != LifetimePolicy.PERMANENT || _exchange.getLifetimePolicy() != LifetimePolicy.PERMANENT ? LifetimePolicy.IN_USE : LifetimePolicy.PERMANENT; - } - else if(TIME_TO_LIVE.equals(name)) - { - - } - else if(EXCHANGE.equals(name)) - { - return _exchange.getName(); - } - else if(QUEUE.equals(name)) - { - return _queue.getName(); - } - else if(ARGUMENTS.equals(name)) - { - return getArguments(); - } - - return super.getAttribute(name); //TODO - } - - @Override - public Collection<String> getAttributeNames() - { - return getAttributeNames(Binding.class); - } - - @Override - protected boolean setState(State currentState, State desiredState) throws IllegalStateTransitionException, - AccessControlException - { - if (desiredState == State.DELETED) - { - delete(); - return true; - } - return false; - } - - @Override - public Object setAttribute(final String name, final Object expected, final Object desired) throws IllegalStateException, - AccessControlException, IllegalArgumentException - { - throw new UnsupportedOperationException("Changing attributes on binding is not supported."); - } - - @Override - public void setAttributes(final Map<String, Object> attributes) throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new UnsupportedOperationException("Changing attributes on binding is not supported."); - } - -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java index 74a7230d03..e12191e9ba 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java @@ -928,10 +928,6 @@ public class BrokerAdapter<X extends Broker<X>> extends AbstractConfiguredObject { return LifetimePolicy.PERMANENT; } - else if(TIME_TO_LIVE.equals(name)) - { - // TODO - } else if(BUILD_VERSION.equals(name)) { return QpidProperties.getBuildVersion(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java deleted file mode 100644 index a931624f30..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * - * 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.server.model.adapter; - -import java.util.Map; - -import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.model.LifetimePolicy; -import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.UUIDGenerator; -import org.apache.qpid.server.consumer.Consumer; - -import java.security.AccessControlException; -import java.util.Collection; -import java.util.Collections; - -public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> implements org.apache.qpid.server.model.Consumer<ConsumerAdapter> -{ - private final Consumer _consumer; - private final QueueAdapter _queue; - private final SessionAdapter _session; - - public ConsumerAdapter(final QueueAdapter queueAdapter, final SessionAdapter sessionAdapter, - final Consumer consumer) - { - super(UUIDGenerator.generateConsumerUUID(queueAdapter.getVirtualHost().getName(), - queueAdapter.getName(), - consumer.getSessionModel().getConnectionModel().getRemoteAddressString(), - String.valueOf(consumer.getSessionModel().getChannelId()), - consumer.getName()), queueAdapter.getTaskExecutor()); - _consumer = consumer; - _queue = queueAdapter; - _session = sessionAdapter; - //TODO - } - - public String getName() - { - return _consumer.getName(); - } - - public String setName(final String currentName, final String desiredName) - throws IllegalStateException, AccessControlException - { - return null; //TODO - } - - public State getState() - { - return null; //TODO - } - - public boolean isDurable() - { - return false; //TODO - } - - public void setDurable(final boolean durable) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - //TODO - } - - public LifetimePolicy getLifetimePolicy() - { - return null; //TODO - } - - public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return null; //TODO - } - - public long getTimeToLive() - { - return 0; //TODO - } - - public long setTimeToLive(final long expected, final long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; //TODO - } - - @Override - public Collection<String> getAttributeNames() - { - return getAttributeNames(org.apache.qpid.server.model.Consumer.class); - } - - @Override - public Object getAttribute(final String name) - { - if(ID.equals(name)) - { - return getId(); - } - else if(NAME.equals(name)) - { - return getName(); - } - else if(STATE.equals(name)) - { - - } - else if(DURABLE.equals(name)) - { - return false; - } - else if(LIFETIME_POLICY.equals(name)) - { - return LifetimePolicy.DELETE_ON_SESSION_END; - } - else if(TIME_TO_LIVE.equals(name)) - { - - } - else if(DISTRIBUTION_MODE.equals(name)) - { - return _consumer.acquires() ? "MOVE" : "COPY"; - } - else if(SETTLEMENT_MODE.equals(name)) - { - - } - else if(EXCLUSIVE.equals(name)) - { - - } - else if(NO_LOCAL.equals(name)) - { - - } - else if(SELECTOR.equals(name)) - { - - } - return super.getAttribute(name); //TODO - } - - @Override - public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) - { - return Collections.emptySet(); - } - - @Override - public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) - { - throw new IllegalArgumentException(); - } - - @Override - public String getDistributionMode() - { - return _consumer.acquires() ? "MOVE" : "COPY"; - } - - @Override - public String getSettlementMode() - { - return null; - } - - @Override - public boolean isExclusive() - { - return false; - } - - @Override - public boolean isNoLocal() - { - return false; - } - - @Override - public String getSelector() - { - return null; - } - - @Override - public long getBytesOut() - { - return _consumer.getBytesOut(); - } - - @Override - public long getMessagesOut() - { - return _consumer.getMessagesOut(); - } - - @Override - public long getUnacknowledgedBytes() - { - return _consumer.getUnacknowledgedBytes(); - } - - @Override - public long getUnacknowledgedMessages() - { - return _consumer.getUnacknowledgedMessages(); - } - - @Override - protected boolean setState(State currentState, State desiredState) - { - // TODO : Add state management - return false; - } - - @Override - public Object setAttribute(final String name, final Object expected, final Object desired) throws IllegalStateException, - AccessControlException, IllegalArgumentException - { - throw new UnsupportedOperationException("Changing attributes on consumer is not supported."); - } - - @Override - public void setAttributes(final Map<String, Object> attributes) throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new UnsupportedOperationException("Changing attributes on consumer is not supported."); - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java deleted file mode 100644 index b1f97a213b..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java +++ /dev/null @@ -1,398 +0,0 @@ -/* - * - * 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.server.model.adapter; - -import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.model.*; -import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.util.MapValueConverter; -import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException; -import org.apache.qpid.server.virtualhost.RequiredExchangeException; - -final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> implements Exchange<ExchangeAdapter>, org.apache.qpid.server.exchange.Exchange.BindingListener -{ - - private final org.apache.qpid.server.exchange.Exchange _exchange; - private final Map<Binding, BindingAdapter> _bindingAdapters = - new HashMap<Binding, BindingAdapter>(); - private VirtualHostAdapter _vhost; - - public ExchangeAdapter(final VirtualHostAdapter virtualHostAdapter, - final org.apache.qpid.server.exchange.Exchange exchange) - { - super(exchange.getId(), virtualHostAdapter.getTaskExecutor()); - _vhost = virtualHostAdapter; - _exchange = exchange; - addParent(org.apache.qpid.server.model.VirtualHost.class, virtualHostAdapter); - - exchange.addBindingListener(this); - populateBindings(); - } - - private void populateBindings() - { - Collection<Binding> actualBindings = _exchange.getBindings(); - synchronized (_bindingAdapters) - { - for(Binding binding : actualBindings) - { - if(!_bindingAdapters.containsKey(binding)) - { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); - BindingAdapter adapter = new BindingAdapter(binding, this, queueAdapter); - _bindingAdapters.put(binding, adapter); - - queueAdapter.bindingRegistered(binding, adapter); - } - } - } - - } - - @Override - public String getType() - { - return _exchange.getExchangeType().getType(); - } - - public Collection<org.apache.qpid.server.model.Binding> getBindings() - { - synchronized (_bindingAdapters) - { - return new ArrayList<org.apache.qpid.server.model.Binding>(_bindingAdapters.values()); - } - - } - - public Collection<Publisher> getPublishers() - { - // TODO - return Collections.emptyList(); - } - - - public org.apache.qpid.server.model.Binding createBinding(Queue queue, - Map<String, Object> attributes) - throws AccessControlException, IllegalStateException - { - attributes = new HashMap<String, Object>(attributes); - String bindingKey = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Binding.NAME, attributes, ""); - Map<String, Object> bindingArgs = MapValueConverter.getMapAttribute(org.apache.qpid.server.model.Binding.ARGUMENTS, attributes, Collections.<String,Object>emptyMap()); - - attributes.remove(org.apache.qpid.server.model.Binding.NAME); - attributes.remove(org.apache.qpid.server.model.Binding.ARGUMENTS); - - return createBinding(bindingKey, queue, bindingArgs, attributes); - - } - - public org.apache.qpid.server.model.Binding createBinding(String bindingKey, Queue queue, - Map<String, Object> bindingArguments, - Map<String, Object> attributes) - throws AccessControlException, IllegalStateException - { - AMQQueue amqQueue = ((QueueAdapter)queue).getAMQQueue(); - - if(!_exchange.addBinding(bindingKey, amqQueue, bindingArguments)) - { - Binding oldBinding = _exchange.getBinding(bindingKey, amqQueue); - - Map<String, Object> oldArgs = oldBinding.getArguments(); - if((oldArgs == null && !bindingArguments.isEmpty()) || (oldArgs != null && !oldArgs.equals(bindingArguments))) - { - _exchange.replaceBinding(oldBinding.getId(), bindingKey, amqQueue, bindingArguments); - } - } - Binding binding = _exchange.getBinding(bindingKey, amqQueue); - - synchronized (_bindingAdapters) - { - return binding == null ? null : _bindingAdapters.get(binding); - } - } - - public void delete() - { - try - { - _vhost.getVirtualHost().removeExchange(_exchange, true); - } - catch(RequiredExchangeException e) - { - throw new UnsupportedOperationException("'" + getName() + "' is a reserved exchange and can't be deleted"); - } - catch(ExchangeIsAlternateException e) - { - throw new IllegalStateException(e); - } - } - - public String getName() - { - return _exchange.getName(); - } - - public String setName(final String currentName, final String desiredName) - throws IllegalStateException, AccessControlException - { - return null; //TODO - } - - public State getState() - { - return null; //TODO - } - - public boolean isDurable() - { - return _exchange.isDurable(); - } - - public void setDurable(final boolean durable) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - //TODO - } - - public LifetimePolicy getLifetimePolicy() - { - return _exchange.isAutoDelete() ? LifetimePolicy.DELETE_ON_NO_OUTBOUND_LINKS : LifetimePolicy.PERMANENT; - } - - public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return null; //TODO - } - - public long getTimeToLive() - { - return 0; //TODO - } - - public long setTimeToLive(final long expected, final long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; //TODO - } - - @Override - public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) - { - if(clazz == org.apache.qpid.server.model.Binding.class) - { - return (Collection<C>) getBindings(); - } - else - { - return Collections.emptySet(); - } - } - - @Override - public <C extends ConfiguredObject> C addChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) - { - if(childClass == org.apache.qpid.server.model.Binding.class) - { - if(otherParents != null && otherParents.length == 1 && otherParents[0] instanceof Queue) - { - Queue queue = (Queue) otherParents[0]; - if(queue.getParent(org.apache.qpid.server.model.VirtualHost.class) == getParent(org.apache.qpid.server.model.VirtualHost.class)) - { - return (C) createBinding(queue, attributes); - } - else - { - throw new IllegalArgumentException("Queue and Exchange parents of a binding must be on same virtual host"); - } - } - else - { - throw new IllegalArgumentException("Other parent must be a queue"); - } - } - else - { - throw new IllegalArgumentException(); - } - } - - public void bindingAdded(org.apache.qpid.server.exchange.Exchange exchange, Binding binding) - { - BindingAdapter adapter = null; - synchronized (_bindingAdapters) - { - if(!_bindingAdapters.containsKey(binding)) - { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); - adapter = new BindingAdapter(binding, this, queueAdapter); - _bindingAdapters.put(binding,adapter); - queueAdapter.bindingRegistered(binding,adapter); - } - } - if(adapter != null) - { - childAdded(adapter); - } - } - - public void bindingRemoved(org.apache.qpid.server.exchange.Exchange exchange, Binding binding) - { - BindingAdapter adapter = null; - synchronized (_bindingAdapters) - { - adapter = _bindingAdapters.remove(binding); - } - if(adapter != null) - { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); - if(queueAdapter != null) - { - queueAdapter.bindingUnregistered(binding); - childRemoved(adapter); - } - } - } - - org.apache.qpid.server.exchange.Exchange getExchange() - { - return _exchange; - } - - @Override - public Object getAttribute(String name) - { - if(ID.equals(name)) - { - return getId(); - } - else if(NAME.equals(name)) - { - return getName(); - } - else if(STATE.equals(name)) - { - return State.ACTIVE; - } - else if(DURABLE.equals(name)) - { - return isDurable(); - } - else if(LIFETIME_POLICY.equals(name)) - { - return _exchange.isAutoDelete() ? LifetimePolicy.DELETE_ON_NO_OUTBOUND_LINKS : LifetimePolicy.PERMANENT; - } - else if(TIME_TO_LIVE.equals(name)) - { - - } - else if(ALTERNATE_EXCHANGE.equals(name)) - { - org.apache.qpid.server.exchange.Exchange alternateExchange = _exchange.getAlternateExchange(); - return alternateExchange == null ? null : - ConfiguredObjectFinder.findConfiguredObjectByName(_vhost.getExchanges(), - alternateExchange.getName()); - } - else if(TYPE.equals(name)) - { - return getType(); - } - return super.getAttribute(name); - } - - @Override - public Collection<String> getAttributeNames() - { - return getAttributeNames(Exchange.class); - } - - @Override - protected boolean setState(State currentState, State desiredState) - { - if (desiredState == State.DELETED) - { - delete(); - return true; - } - return false; - } - - @Override - protected void changeAttributes(Map<String, Object> attributes) - { - throw new UnsupportedOperationException("Changing attributes on exchange is not supported."); - } - - @Override - protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException - { - _vhost.getSecurityManager().authoriseUpdate(_exchange); - } - - @Override - protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException - { - _vhost.getSecurityManager().authoriseUpdate(_exchange); - } - - @Override - public long getBindingCount() - { - return _exchange.getBindingCount(); - } - - @Override - public long getBytesDropped() - { - return _exchange.getByteDrops(); - } - - @Override - public long getBytesIn() - { - return _exchange.getByteReceives(); - } - - @Override - public long getMessagesDropped() - { - return _exchange.getMsgDrops(); - } - - @Override - public long getMessagesIn() - { - return _exchange.getMsgReceives(); - } - - @Override - public Exchange<?> getAlternateExchange() - { - return null; - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java index b6af07dea4..f1ba45dd09 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java @@ -145,19 +145,6 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new UnsupportedOperationException(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return Collections.emptySet(); @@ -182,10 +169,6 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File { return getState(); } - else if (TIME_TO_LIVE.equals(name)) - { - // TODO - } return super.getAttribute(name); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java index 120e9a5123..09ab758271 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java @@ -132,20 +132,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - return 0; - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; @@ -170,10 +156,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider { return getState(); } - else if (TIME_TO_LIVE.equals(name)) - { - // TODO - } return super.getAttribute(name); } @@ -407,20 +389,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new IllegalStateException("ttl cannot be updated"); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren( Class<C> clazz) { @@ -590,20 +558,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - return 0; - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren( Class<C> clazz) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java index 6e97d735ea..54a9a44bf3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java @@ -213,19 +213,6 @@ abstract public class PortAdapter<X extends PortAdapter<X>> extends AbstractConf } @Override - public long getTimeToLive() - { - return 0; - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - throw new IllegalStateException(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { if(clazz == Connection.class) @@ -263,10 +250,6 @@ abstract public class PortAdapter<X extends PortAdapter<X>> extends AbstractConf { return getLifetimePolicy(); } - else if(TIME_TO_LIVE.equals(name)) - { - return getTimeToLive(); - } return super.getAttribute(name); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java deleted file mode 100644 index c08ccd0839..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java +++ /dev/null @@ -1,938 +0,0 @@ -/* - * - * 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.server.model.adapter; - -import java.lang.reflect.Type; -import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.message.MessageSource; -import org.apache.qpid.server.model.*; -import org.apache.qpid.server.protocol.AMQConnectionModel; -import org.apache.qpid.server.protocol.AMQSessionModel; -import org.apache.qpid.server.queue.*; -import org.apache.qpid.server.store.DurableConfigurationStoreHelper; -import org.apache.qpid.server.consumer.Consumer; -import org.apache.qpid.server.util.MapValueConverter; - -final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredObject<QueueAdapter<Q>> implements Queue<QueueAdapter<Q>>, - MessageSource.ConsumerRegistrationListener<Q>, - AMQQueue.NotificationListener -{ - @SuppressWarnings("serial") - static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ - put(ALERT_REPEAT_GAP, Long.class); - put(ALERT_THRESHOLD_MESSAGE_AGE, Long.class); - put(ALERT_THRESHOLD_MESSAGE_SIZE, Long.class); - put(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Long.class); - put(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Long.class); - put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class); - put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class); - put(MAXIMUM_DELIVERY_ATTEMPTS, Integer.class); - put(DESCRIPTION, String.class); - }}); - - private final AMQQueue<?,Q,?> _queue; - - private final Map<Binding, BindingAdapter> _bindingAdapters = - new HashMap<Binding, BindingAdapter>(); - private final Map<Consumer, ConsumerAdapter> _consumerAdapters = - new HashMap<Consumer, ConsumerAdapter>(); - - - private final VirtualHostAdapter _vhost; - private QueueNotificationListener _queueNotificationListener; - - public QueueAdapter(final VirtualHostAdapter virtualHostAdapter, final AMQQueue<?,Q,?> queue) - { - super(queue.getId(), virtualHostAdapter.getTaskExecutor()); - _vhost = virtualHostAdapter; - addParent(org.apache.qpid.server.model.VirtualHost.class, virtualHostAdapter); - - _queue = queue; - _queue.addConsumerRegistrationListener(this); - populateConsumers(); - _queue.setNotificationListener(this); - } - - /** - * Helper method to retrieve the SessionAdapter keyed by the AMQSessionModel. - * This method first finds the ConnectionAdapter associated with the Session from this QueueAdapter's parent vhost - * then it does a lookup on that to find the SessionAdapter keyed by the requested AMQSessionModel instance. - * @param session the AMQSessionModel used to index the SessionAdapter. - * @return the requested SessionAdapter or null if it can't be found. - */ - private SessionAdapter getSessionAdapter(AMQSessionModel session) - { - // Retrieve the ConnectionModel associated with the SessionModel as a key to lookup the ConnectionAdapter. - AMQConnectionModel connectionKey = session.getConnectionModel(); - - // Lookup the ConnectionAdapter, from which we should be able to retrieve the SessionAdapter we really want. - ConnectionAdapter connectionAdapter = _vhost.getConnectionAdapter(connectionKey); - if (connectionAdapter == null) - { - return null; // If we can't find an associated ConnectionAdapter the SessionAdapter is a lost cause. - } - else - { // With a good ConnectionAdapter we can finally try to find the SessionAdapter we are actually looking for. - SessionAdapter sessionAdapter = connectionAdapter.getSessionAdapter(session); - if (sessionAdapter == null) - { - return null; // If the SessionAdapter isn't associated with the selected ConnectionAdapter give up. - } - else - { - return sessionAdapter; - } - } - } - - private void populateConsumers() - { - Collection<? extends Consumer> actualConsumers = _queue.getConsumers(); - - synchronized (_consumerAdapters) - { - for(Consumer consumer : actualConsumers) - { - if(!_consumerAdapters.containsKey(consumer)) - { - SessionAdapter sessionAdapter = getSessionAdapter(consumer.getSessionModel()); - ConsumerAdapter adapter = new ConsumerAdapter(this, sessionAdapter, consumer); - _consumerAdapters.put(consumer, adapter); - if (sessionAdapter != null) - { // Register ConsumerAdapter with the SessionAdapter. - sessionAdapter.consumerRegistered(consumer, adapter); - } - } - } - } - } - - @Override - public String getQueueType() - { - return (String) getAttribute(QUEUE_TYPE); - } - - @Override - public Exchange getAlternateExchange() - { - org.apache.qpid.server.exchange.Exchange alternateExchange = _queue.getAlternateExchange(); - return alternateExchange == null ? null : - ConfiguredObjectFinder.findConfiguredObjectByName(_vhost.getExchanges(), - alternateExchange.getName()); - } - - @Override - public ExclusivityPolicy getExclusive() - { - return (ExclusivityPolicy) _queue.getAttribute(EXCLUSIVE); - } - - @Override - public String getOwner() - { - return _queue.getOwner(); - } - - @Override - public boolean getNoLocal() - { - // TODO - return false; - } - - @Override - public String getLvqKey() - { - return (String) _queue.getAttribute(LVQ_KEY); - } - - @Override - public String getSortKey() - { - return (String) _queue.getAttribute(SORT_KEY); - } - - @Override - public String getMessageGroupKey() - { - return (String) _queue.getAttribute(MESSAGE_GROUP_KEY); - } - - @Override - public int getMessageGroupSharedGroups() - { - return (Integer) _queue.getAttribute(MESSAGE_GROUP_SHARED_GROUPS); - } - - @Override - public int getMaximumDeliveryAttempts() - { - return _queue.getMaximumDeliveryCount(); - } - - @Override - public long getQueueFlowControlSizeBytes() - { - return _queue.getCapacity(); - } - - @Override - public long getQueueFlowResumeSizeBytes() - { - return _queue.getFlowResumeCapacity(); - } - - @Override - public boolean isQueueFlowStopped() - { - return false; - } - - @Override - public long getAlertThresholdMessageAge() - { - return _queue.getMaximumMessageAge(); - } - - @Override - public long getAlertThresholdMessageSize() - { - return _queue.getMaximumMessageSize(); - } - - @Override - public long getAlertThresholdQueueDepthBytes() - { - return _queue.getMaximumQueueDepth(); - } - - @Override - public long getAlertThresholdQueueDepthMessages() - { - return _queue.getMaximumMessageCount(); - } - - @Override - public long getAlertRepeatGap() - { - return _queue.getMinimumAlertRepeatGap(); - } - - @Override - public int getPriorities() - { - return (Integer) _queue.getAttribute(PRIORITIES); - } - - public Collection<org.apache.qpid.server.model.Binding> getBindings() - { - synchronized (_bindingAdapters) - { - return new ArrayList<org.apache.qpid.server.model.Binding>(_bindingAdapters.values()); - } - } - - public Collection<org.apache.qpid.server.model.Consumer> getConsumers() - { - synchronized (_consumerAdapters) - { - return new ArrayList<org.apache.qpid.server.model.Consumer>(_consumerAdapters.values()); - } - - } - - public void visit(final QueueEntryVisitor visitor) - { - _queue.visit(visitor); - } - - public void delete() - { - _queue.getVirtualHost().removeQueue(_queue); - } - - public String getName() - { - return _queue.getName(); - } - - public String setName(final String currentName, final String desiredName) - throws IllegalStateException, AccessControlException - { - return null; //TODO - } - - public State getState() - { - return null; //TODO - } - - public boolean isDurable() - { - return _queue.isDurable(); - } - - public void setDurable(final boolean durable) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - //TODO - } - - public LifetimePolicy getLifetimePolicy() - { - return _queue.getLifetimePolicy(); - } - - public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return null; //TODO - } - - public long getTimeToLive() - { - return 0; //TODO - } - - public long setTimeToLive(final long expected, final long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; //TODO - } - - - @Override - public Collection<String> getAttributeNames() - { - return getAttributeNames(Queue.class); - } - - @Override - public boolean changeAttribute(String name, Object expected, Object desired) throws IllegalStateException, AccessControlException, IllegalArgumentException - { - try - { - if(ALERT_REPEAT_GAP.equals(name)) - { - _queue.setMinimumAlertRepeatGap((Long)desired); - return true; - } - else if(ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) - { - _queue.setMaximumMessageAge((Long)desired); - return true; - } - else if(ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) - { - _queue.setMaximumMessageSize((Long)desired); - return true; - } - else if(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) - { - _queue.setMaximumQueueDepth((Long)desired); - return true; - } - else if(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) - { - _queue.setMaximumMessageCount((Long)desired); - return true; - } - else if(ALTERNATE_EXCHANGE.equals(name)) - { - // In future we may want to accept a UUID as an alternative way to identifying the exchange - ExchangeAdapter alternateExchange = (ExchangeAdapter) desired; - _queue.setAlternateExchange(alternateExchange == null ? null : alternateExchange.getExchange()); - return true; - } - else if(EXCLUSIVE.equals(name)) - { - ExclusivityPolicy desiredPolicy; - if(desired == null) - { - desiredPolicy = ExclusivityPolicy.NONE; - } - else if(desired instanceof ExclusivityPolicy) - { - desiredPolicy = (ExclusivityPolicy)desired; - } - else if (desired instanceof String) - { - desiredPolicy = ExclusivityPolicy.valueOf((String)desired); - } - else - { - throw new IllegalArgumentException("Cannot set " + Queue.EXCLUSIVE + " property to type " + desired.getClass().getName()); - } - try - { - _queue.setExclusivityPolicy(desiredPolicy); - } - catch (MessageSource.ExistingConsumerPreventsExclusive existingConsumerPreventsExclusive) - { - throw new IllegalArgumentException("Unable to set exclusivity policy to " + desired + " as an existing combinations of consumers prevents this"); - } - return true; - - } - else if(MESSAGE_GROUP_KEY.equals(name)) - { - // TODO - } - else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) - { - // TODO - } - else if(LVQ_KEY.equals(name)) - { - // TODO - } - else if(MAXIMUM_DELIVERY_ATTEMPTS.equals(name)) - { - _queue.setMaximumDeliveryCount((Integer)desired); - return true; - } - else if(NO_LOCAL.equals(name)) - { - // TODO - } - else if(OWNER.equals(name)) - { - // TODO - } - else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name)) - { - _queue.setCapacity((Long)desired); - return true; - } - else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name)) - { - _queue.setFlowResumeCapacity((Long)desired); - return true; - } - else if(QUEUE_FLOW_STOPPED.equals(name)) - { - // TODO - } - else if(SORT_KEY.equals(name)) - { - // TODO - } - else if(QUEUE_TYPE.equals(name)) - { - // TODO - } - else if (DESCRIPTION.equals(name)) - { - _queue.setDescription((String) desired); - return true; - } - - return super.changeAttribute(name, expected, desired); - } - finally - { - if (_queue.isDurable()) - { - DurableConfigurationStoreHelper.updateQueue(_queue.getVirtualHost().getDurableConfigurationStore(), - _queue); - } - } - } - - @Override - public Object getAttribute(String name) - { - - if(ALERT_REPEAT_GAP.equals(name)) - { - return _queue.getMinimumAlertRepeatGap(); - } - else if(ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) - { - return _queue.getMaximumMessageAge(); - } - else if(ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) - { - return _queue.getMaximumMessageSize(); - } - else if(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) - { - return _queue.getMaximumQueueDepth(); - } - else if(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) - { - return _queue.getMaximumMessageCount(); - } - else if(ALTERNATE_EXCHANGE.equals(name)) - { - org.apache.qpid.server.exchange.Exchange alternateExchange = _queue.getAlternateExchange(); - return alternateExchange == null ? null : - ConfiguredObjectFinder.findConfiguredObjectByName(_vhost.getExchanges(), - alternateExchange.getName()); - } - else if(EXCLUSIVE.equals(name)) - { - return _queue.getAttribute(Queue.EXCLUSIVE); - } - else if(MESSAGE_GROUP_KEY.equals(name)) - { - return _queue.getAttribute(MESSAGE_GROUP_KEY); - } - else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) - { - //We only return the boolean value if message groups are actually in use - return getAttribute(MESSAGE_GROUP_KEY) == null ? null : _queue.getAttribute(MESSAGE_GROUP_SHARED_GROUPS); - } - else if(LVQ_KEY.equals(name)) - { - AMQQueue queue = _queue; - if(queue instanceof ConflationQueue) - { - return ((ConflationQueue)queue).getConflationKey(); - } - } - else if(MAXIMUM_DELIVERY_ATTEMPTS.equals(name)) - { - return _queue.getMaximumDeliveryCount(); - } - else if(NO_LOCAL.equals(name)) - { - // TODO - } - else if(OWNER.equals(name)) - { - return _queue.getOwner(); - } - else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name)) - { - return _queue.getCapacity(); - } - else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name)) - { - return _queue.getFlowResumeCapacity(); - } - else if(QUEUE_FLOW_STOPPED.equals(name)) - { - return _queue.isOverfull(); - } - else if(SORT_KEY.equals(name)) - { - AMQQueue queue = _queue; - if(queue instanceof SortedQueue) - { - return ((SortedQueue)queue).getSortedPropertyName(); - } - } - else if(QUEUE_TYPE.equals(name)) - { - AMQQueue queue = _queue; - if(queue instanceof SortedQueue) - { - return "sorted"; - } - if(queue instanceof ConflationQueue) - { - return "lvq"; - } - if(queue instanceof PriorityQueue) - { - return "priority"; - } - return "standard"; - } - else if(DURABLE.equals(name)) - { - return _queue.isDurable(); - } - else if(ID.equals(name)) - { - return getId(); - } - else if(LIFETIME_POLICY.equals(name)) - { - return _queue.getLifetimePolicy(); - } - else if(NAME.equals(name)) - { - return _queue.getName(); - } - else if(STATE.equals(name)) - { - return State.ACTIVE; // TODO - } - else if(TIME_TO_LIVE.equals(name)) - { - // TODO - } - else if (DESCRIPTION.equals(name)) - { - return _queue.getDescription(); - } - else if(PRIORITIES.equals(name)) - { - AMQQueue queue = _queue; - if(queue instanceof PriorityQueue) - { - return ((PriorityQueue)queue).getPriorities(); - } - } - return super.getAttribute(name); - } - - - @Override - public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) - { - if(clazz == org.apache.qpid.server.model.Consumer.class) - { - return (Collection<C>) getConsumers(); - } - else if(clazz == org.apache.qpid.server.model.Binding.class) - { - return (Collection<C>) getBindings(); - } - else - { - return Collections.emptySet(); - } - } - - public org.apache.qpid.server.model.Binding createBinding(Exchange exchange, Map<String, Object> attributes) - throws AccessControlException, IllegalStateException - { - attributes = new HashMap<String, Object>(attributes); - String bindingKey = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Binding.NAME, attributes, ""); - Map<String, Object> bindingArgs = MapValueConverter.getMapAttribute(org.apache.qpid.server.model.Binding.ARGUMENTS, attributes, Collections.<String,Object>emptyMap()); - - attributes.remove(org.apache.qpid.server.model.Binding.NAME); - attributes.remove(org.apache.qpid.server.model.Binding.ARGUMENTS); - - return exchange.createBinding(bindingKey, this, bindingArgs, attributes); - - } - - - - @Override - public <C extends ConfiguredObject> C addChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) - { - if(childClass == org.apache.qpid.server.model.Binding.class) - { - if(otherParents != null && otherParents.length == 1 && otherParents[0] instanceof Exchange) - { - Exchange exchange = (Exchange) otherParents[0]; - if(exchange.getParent(org.apache.qpid.server.model.VirtualHost.class) == getParent(org.apache.qpid.server.model.VirtualHost.class)) - { - return (C) createBinding(exchange, attributes); - } - else - { - throw new IllegalArgumentException("Queue and Exchange parents of a binding must be on same virtual host"); - } - } - else - { - throw new IllegalArgumentException("Other parent must be an exchange"); - } - } - else - { - throw new IllegalArgumentException(); - } - } - - void bindingRegistered(Binding binding, BindingAdapter adapter) - { - synchronized (_bindingAdapters) - { - _bindingAdapters.put(binding, adapter); - } - childAdded(adapter); - } - - void bindingUnregistered(Binding binding) - { - BindingAdapter adapter = null; - synchronized (_bindingAdapters) - { - adapter = _bindingAdapters.remove(binding); - } - if(adapter != null) - { - childRemoved(adapter); - } - } - - AMQQueue getAMQQueue() - { - return _queue; - } - - public void consumerAdded(final AMQQueue queue, final Consumer consumer) - { - ConsumerAdapter adapter = null; - synchronized (_consumerAdapters) - { - if(!_consumerAdapters.containsKey(consumer)) - { - SessionAdapter sessionAdapter = getSessionAdapter(consumer.getSessionModel()); - adapter = new ConsumerAdapter(this, sessionAdapter, consumer); - _consumerAdapters.put(consumer, adapter); - if (sessionAdapter != null) - { // Register ConsumerAdapter with the SessionAdapter. - sessionAdapter.consumerRegistered(consumer, adapter); - } - } - } - if(adapter != null) - { - childAdded(adapter); - } - } - - public void consumerRemoved(final AMQQueue queue, final Consumer consumer) - { - ConsumerAdapter adapter = null; - - synchronized (_consumerAdapters) - { - adapter = _consumerAdapters.remove(consumer); - } - if(adapter != null) - { - SessionAdapter sessionAdapter = getSessionAdapter(consumer.getSessionModel()); - if (sessionAdapter != null) - { // Unregister ConsumerAdapter with the SessionAdapter. - sessionAdapter.consumerUnregistered(consumer); - } - childRemoved(adapter); - } - } - - VirtualHostAdapter getVirtualHost() - { - return _vhost; - } - - - @Override - public long getBytesIn() - { - return _queue.getTotalEnqueueSize(); - } - - @Override - public long getBytesOut() - { - return _queue.getTotalDequeueSize(); - } - - @Override - public long getMessagesIn() - { - return _queue.getTotalEnqueueCount(); - } - - @Override - public long getMessagesOut() - { - return _queue.getTotalDequeueCount(); - } - @Override - public long getBindingCount() - { - return _queue.getBindingCount(); - } - - @Override - public long getConsumerCount() - { - return _queue.getConsumerCount(); - } - - @Override - public long getConsumerCountWithCredit() - { - return _queue.getActiveConsumerCount(); - } - - @Override - public long getPersistentDequeuedBytes() - { - return _queue.getPersistentByteDequeues(); - } - - @Override - public long getPersistentDequeuedMessages() - { - return _queue.getPersistentMsgDequeues(); - } - - @Override - public long getPersistentEnqueuedBytes() - { - return _queue.getPersistentByteEnqueues(); - } - - @Override - public long getPersistentEnqueuedMessages() - { - return _queue.getPersistentMsgEnqueues(); - } - - @Override - public long getQueueDepthBytes() - { - return _queue.getQueueDepth(); - } - - @Override - public long getQueueDepthMessages() - { - return _queue.getMessageCount(); - } - - @Override - public long getTotalDequeuedBytes() - { - return _queue.getTotalDequeueSize(); - } - - @Override - public long getTotalDequeuedMessages() - { - return _queue.getTotalDequeueCount(); - } - - @Override - public long getTotalEnqueuedBytes() - { - return _queue.getTotalEnqueueSize(); - } - - @Override - public long getTotalEnqueuedMessages() - { - return _queue.getTotalEnqueueCount(); - } - - @Override - public long getUnacknowledgedBytes() - { - return _queue.getUnackedMessageBytes(); - } - - @Override - public long getUnacknowledgedMessages() - { - return _queue.getUnackedMessageCount(); - } - - - @Override - public void setNotificationListener(QueueNotificationListener listener) - { - _queueNotificationListener = listener; - } - - @Override - public void notifyClients(NotificationCheck notification, AMQQueue queue, String notificationMsg) - { - QueueNotificationListener listener = _queueNotificationListener; - if(listener != null) - { - listener.notifyClients(notification, this, notificationMsg); - } - } - - @Override - protected boolean setState(State currentState, State desiredState) throws IllegalStateTransitionException, - AccessControlException - { - if (desiredState == State.DELETED) - { - delete(); - return true; - } - return false; - } - - @Override - protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException - { - _vhost.getSecurityManager().authoriseUpdate(_queue); - } - - @Override - protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException - { - _vhost.getSecurityManager().authoriseUpdate(_queue); - } - - @Override - protected void changeAttributes(final Map<String, Object> attributes) - { - Map<String, Object> convertedAttributes = MapValueConverter.convert(attributes, ATTRIBUTE_TYPES); - validateAttributes(convertedAttributes); - - super.changeAttributes(convertedAttributes); - } - - private void validateAttributes(Map<String, Object> convertedAttributes) - { - Long queueFlowControlSize = (Long) convertedAttributes.get(QUEUE_FLOW_CONTROL_SIZE_BYTES); - Long queueFlowControlResumeSize = (Long) convertedAttributes.get(QUEUE_FLOW_RESUME_SIZE_BYTES); - if (queueFlowControlSize != null || queueFlowControlResumeSize != null ) - { - if (queueFlowControlSize == null) - { - queueFlowControlSize = (Long)getAttribute(QUEUE_FLOW_CONTROL_SIZE_BYTES); - } - if (queueFlowControlResumeSize == null) - { - queueFlowControlResumeSize = (Long)getAttribute(QUEUE_FLOW_RESUME_SIZE_BYTES); - } - if (queueFlowControlResumeSize > queueFlowControlSize) - { - throw new IllegalConfigurationException("Flow resume size can't be greater than flow control size"); - } - } - for (Map.Entry<String, Object> entry: convertedAttributes.entrySet()) - { - Object value = entry.getValue(); - if (value instanceof Number && ((Number)value).longValue() < 0) - { - throw new IllegalConfigurationException("Only positive integer value can be specified for the attribute " - + entry.getKey()); - } - } - } - -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java index 7ddcb047f5..92e409e103 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java @@ -32,6 +32,7 @@ import org.apache.qpid.server.model.*; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.protocol.AMQSessionModel; +import org.apache.qpid.server.queue.QueueConsumer; final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> implements Session<SessionAdapter> { @@ -39,7 +40,7 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl private AMQSessionModel _session; - private Map<Consumer, ConsumerAdapter> _consumerAdapters = new HashMap<Consumer, ConsumerAdapter>(); + private Map<Consumer, QueueConsumer> _consumerAdapters = new HashMap<Consumer, QueueConsumer>(); public SessionAdapter(final AMQSessionModel session, TaskExecutor taskExecutor) { @@ -110,47 +111,6 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl return null; //TODO } - public long getTimeToLive() - { - return 0; //TODO - } - - public long setTimeToLive(final long expected, final long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - return 0; //TODO - } - - /** - * Register a ConsumerAdapter with this Session keyed by the Consumer. - * @param consumer the org.apache.qpid.server.consumer.Consumer used to key the ConsumerAdapter. - * @param adapter the registered ConsumerAdapter. - */ - void consumerRegistered(Consumer consumer, ConsumerAdapter adapter) - { - synchronized (_consumerAdapters) - { - _consumerAdapters.put(consumer, adapter); - } - childAdded(adapter); - } - - /** - * Unregister a ConsumerAdapter with this Session keyed by the Consumer. - * @param consumer the org.apache.qpid.server.consumer.Consumer used to key the ConsumerAdapter. - */ - void consumerUnregistered(Consumer consumer) - { - ConsumerAdapter adapter = null; - synchronized (_consumerAdapters) - { - adapter = _consumerAdapters.remove(consumer); - } - if (adapter != null) - { - childRemoved(adapter); - } - } @Override public Collection<String> getAttributeNames() diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java index 0761e31935..36d8ebde43 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java @@ -24,14 +24,11 @@ import java.io.File; import java.lang.reflect.Type; import java.security.AccessControlException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.UUID; import org.apache.commons.configuration.CompositeConfiguration; @@ -43,6 +40,8 @@ import org.apache.qpid.server.exchange.AMQUnknownExchangeType; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.configuration.XmlConfigurationUtilities.MyConfiguration; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.*; @@ -50,6 +49,7 @@ import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.queue.AbstractQueue; import org.apache.qpid.server.queue.ConflationQueue; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; @@ -86,11 +86,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo private final Map<AMQConnectionModel, ConnectionAdapter> _connectionAdapters = new HashMap<AMQConnectionModel, ConnectionAdapter>(); - private final Map<AMQQueue, QueueAdapter> _queueAdapters = - new HashMap<AMQQueue, QueueAdapter>(); - - private final Map<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter> _exchangeAdapters = - new HashMap<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter>(); private final Broker<?> _broker; private final List<VirtualHostAlias> _aliases = new ArrayList<VirtualHostAlias>(); private StatisticsGatherer _brokerStatisticsGatherer; @@ -162,46 +157,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo } - private void populateExchanges() - { - Collection<org.apache.qpid.server.exchange.Exchange> actualExchanges = - _virtualHost.getExchanges(); - - synchronized (_exchangeAdapters) - { - for(org.apache.qpid.server.exchange.Exchange exchange : actualExchanges) - { - if(!_exchangeAdapters.containsKey(exchange)) - { - final ExchangeAdapter adapter = new ExchangeAdapter(this, exchange); - _exchangeAdapters.put(exchange, adapter); - childAdded(adapter); - - } - } - } - } - - - private void populateQueues() - { - Collection<AMQQueue> actualQueues = _virtualHost.getQueues(); - if ( actualQueues != null ) - { - synchronized(_queueAdapters) - { - for(AMQQueue queue : actualQueues) - { - if(!_queueAdapters.containsKey(queue)) - { - final QueueAdapter adapter = new QueueAdapter(this, queue); - _queueAdapters.put(queue, adapter); - childAdded(adapter); - } - } - } - } - } public Collection<VirtualHostAlias> getAliases() { @@ -232,18 +187,12 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo public Collection<Queue> getQueues() { - synchronized(_queueAdapters) - { - return new ArrayList<Queue>(_queueAdapters.values()); - } + return _virtualHost == null ? Collections.<Queue>emptyList() : new ArrayList<Queue>(_virtualHost.getQueues()); } public Collection<Exchange> getExchanges() { - synchronized (_exchangeAdapters) - { - return new ArrayList<Exchange>(_exchangeAdapters.values()); - } + return _virtualHost == null ? Collections.<Exchange>emptyList() : new ArrayList<Exchange>(_virtualHost.getExchangesExceptDefault()); } @@ -257,23 +206,20 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo boolean durable = MapValueConverter.getBooleanAttribute(Exchange.DURABLE, attributes, false); LifetimePolicy lifetime = MapValueConverter.getEnumAttribute(LifetimePolicy.class, Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT); String type = MapValueConverter.getStringAttribute(Exchange.TYPE, attributes, null); - long ttl = MapValueConverter.getLongAttribute(Exchange.TIME_TO_LIVE, attributes, 0l); attributes.remove(Exchange.NAME); attributes.remove(Exchange.STATE); attributes.remove(Exchange.DURABLE); attributes.remove(Exchange.LIFETIME_POLICY); attributes.remove(Exchange.TYPE); - attributes.remove(Exchange.TIME_TO_LIVE); - return createExchange(name, state, durable, lifetime, ttl, type, attributes); + return createExchange(name, state, durable, lifetime, type, attributes); } public Exchange createExchange(final String name, final State initialState, final boolean durable, final LifetimePolicy lifetime, - final long ttl, final String type, final Map<String, Object> attributes) throws AccessControlException, IllegalArgumentException @@ -344,11 +290,8 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo lifetime != null && lifetime != LifetimePolicy.PERMANENT ? LifetimePolicy.DELETE_ON_NO_LINKS : LifetimePolicy.PERMANENT); attributes1.put(Exchange.ALTERNATE_EXCHANGE, alternateExchange); - org.apache.qpid.server.exchange.Exchange exchange = _virtualHost.createExchange(attributes1); - synchronized (_exchangeAdapters) - { - return _exchangeAdapters.get(exchange); - } + NonDefaultExchange exchange = _virtualHost.createExchange(attributes1); + return exchange; } catch(ExchangeExistsException e) @@ -405,12 +348,11 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo try { - AMQQueue queue = _virtualHost.createQueue(attributes); + AMQQueue<?> queue = _virtualHost.createQueue(attributes); + + + return queue; - synchronized (_queueAdapters) - { - return _queueAdapters.get(queue); - } } catch(QueueExistsException qe) @@ -565,76 +507,25 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo throw new IllegalArgumentException("Cannot create a child of class " + childClass.getSimpleName()); } - public void exchangeRegistered(org.apache.qpid.server.exchange.Exchange exchange) + public void exchangeRegistered(ExchangeImpl exchange) { - ExchangeAdapter adapter = null; - synchronized (_exchangeAdapters) - { - if(!_exchangeAdapters.containsKey(exchange)) - { - adapter = new ExchangeAdapter(this, exchange); - _exchangeAdapters.put(exchange, adapter); - - } - - } - if(adapter != null) - { - childAdded(adapter); - } - + childAdded((NonDefaultExchange)exchange); } - public void exchangeUnregistered(org.apache.qpid.server.exchange.Exchange exchange) + public void exchangeUnregistered(ExchangeImpl exchange) { - ExchangeAdapter adapter; - synchronized (_exchangeAdapters) - { - adapter = _exchangeAdapters.remove(exchange); - - } - - if(adapter != null) - { - childRemoved(adapter); - } + childRemoved((NonDefaultExchange)exchange); } public void queueRegistered(AMQQueue queue) { - QueueAdapter adapter = null; - synchronized (_queueAdapters) - { - if(!_queueAdapters.containsKey(queue)) - { - adapter = new QueueAdapter(this, queue); - _queueAdapters.put(queue, adapter); - - } - - } - if(adapter != null) - { - childAdded(adapter); - } - + childAdded(queue); } public void queueUnregistered(AMQQueue queue) { - - QueueAdapter adapter; - synchronized (_queueAdapters) - { - adapter = _queueAdapters.remove(queue); - - } - - if(adapter != null) - { - childRemoved(adapter); - } + childRemoved(queue); } public void connectionRegistered(AMQConnectionModel connection) @@ -676,22 +567,14 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo } } - QueueAdapter getQueueAdapter(AMQQueue queue) - { - synchronized (_queueAdapters) - { - return _queueAdapters.get(queue); - } - } - public Collection<String> getExchangeTypes() { - Collection<ExchangeType<? extends org.apache.qpid.server.exchange.Exchange>> types = + Collection<ExchangeType<? extends ExchangeImpl>> types = _virtualHost.getExchangeTypes(); Collection<String> exchangeTypes = new ArrayList<String>(); - for(ExchangeType<? extends org.apache.qpid.server.exchange.Exchange> type : types) + for(ExchangeType<? extends ExchangeImpl> type : types) { exchangeTypes.add(type.getType()); } @@ -726,7 +609,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo public void copy(MessageInstance entry, Queue queue) { final ServerMessage message = entry.getMessage(); - final AMQQueue toQueue = ((QueueAdapter)queue).getAMQQueue(); + final AMQQueue toQueue = (AMQQueue)queue; txn.enqueue(toQueue, message, new ServerTransaction.Action() { @@ -745,7 +628,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo public void move(final MessageInstance entry, Queue queue) { final ServerMessage message = entry.getMessage(); - final AMQQueue toQueue = ((QueueAdapter)queue).getAMQQueue(); + final AMQQueue toQueue = (AMQQueue)queue; if(entry.acquire()) { txn.enqueue(toQueue, message, @@ -807,10 +690,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo { return LifetimePolicy.PERMANENT; } - else if(TIME_TO_LIVE.equals(name)) - { - // TODO - } else if (_virtualHost != null) { return getAttributeFromVirtualHostImplementation(name); @@ -1194,8 +1073,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo virtualHostRegistry.registerVirtualHost(_virtualHost); _virtualHost.addVirtualHostListener(this); - populateQueues(); - populateExchanges(); synchronized(_aliases) { @@ -1303,4 +1180,9 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo throw new AccessControlException("Setting of virtual host attributes is denied"); } } + + public TaskExecutor getTaskExecutor() + { + return super.getTaskExecutor(); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java index 61e64d4ca3..8520884fd6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java @@ -110,19 +110,6 @@ public class VirtualHostAliasAdapter extends AbstractConfiguredObject<VirtualHos } @Override - public long getTimeToLive() - { - return 0; // TODO - Implement - } - - @Override - public long setTimeToLive(long expected, long desired) - throws IllegalStateException, AccessControlException, IllegalArgumentException - { - throw new IllegalStateException(); // TODO - Implement - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return Collections.emptySet(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java index a1d49aa49a..3017aded98 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java @@ -21,13 +21,13 @@ package org.apache.qpid.server.plugin; import java.util.Map; -import java.util.UUID; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHost; -public interface ExchangeType<T extends Exchange> extends Pluggable +public interface ExchangeType<T extends NonDefaultExchange> extends Pluggable { public String getType(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java index 7dcafedc18..9216061169 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java @@ -20,52 +20,51 @@ */ package org.apache.qpid.server.queue; -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.ExchangeReferrer; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.Queue; +import org.apache.qpid.server.model.QueueNotificationListener; import org.apache.qpid.server.protocol.CapacityChecker; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.util.Deletable; import org.apache.qpid.server.virtualhost.VirtualHost; +import javax.management.NotificationListener; import java.util.Collection; import java.util.List; import java.util.Set; -public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, C extends Consumer> - extends Comparable<Q>, ExchangeReferrer, BaseQueue<C>, MessageSource<C,Q>, CapacityChecker, MessageDestination, - Deletable<Q> +public interface AMQQueue<X extends AMQQueue<X>> + extends Comparable<AMQQueue>, ExchangeReferrer, BaseQueue, MessageSource, CapacityChecker, MessageDestination, + Deletable<AMQQueue>, Queue<X> { void setExclusivityPolicy(ExclusivityPolicy desiredPolicy) throws ExistingConsumerPreventsExclusive; - public interface NotificationListener - { - void notifyClients(NotificationCheck notification, AMQQueue queue, String notificationMsg); - } - boolean isExclusive(); - void addBinding(Binding binding); + void addBinding(BindingImpl binding); - void removeBinding(Binding binding); + void removeBinding(BindingImpl binding); - List<Binding> getBindings(); + Collection<BindingImpl> getBindings(); int getBindingCount(); LogSubject getLogSubject(); - long getUnackedMessageBytes(); + long getUnacknowledgedBytes(); - long getTotalDequeueCount(); + long getTotalDequeuedMessages(); - long getTotalEnqueueCount(); + long getTotalEnqueuedMessages(); LifetimePolicy getLifetimePolicy(); @@ -73,10 +72,11 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> VirtualHost getVirtualHost(); + public Collection<QueueConsumer<?>> getConsumers(); int getConsumerCount(); - int getActiveConsumerCount(); + int getConsumerCountWithCredit(); boolean hasExclusiveConsumer(); @@ -84,10 +84,10 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> boolean isEmpty(); - int getMessageCount(); + int getQueueDepthMessages(); - long getQueueDepth(); + long getQueueDepthBytes(); long getOldestMessageArrivalTime(); @@ -95,21 +95,21 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> int delete(); - void requeue(E entry); + void requeue(QueueEntry entry); - void dequeue(E entry); + void dequeue(QueueEntry entry); - void decrementUnackedMsgCount(E queueEntry); + void decrementUnackedMsgCount(QueueEntry queueEntry); - boolean resend(final E entry, final C consumer); + boolean resend(final QueueEntry entry, final QueueConsumer<?> consumer); - List<E> getMessagesOnTheQueue(); + List<? extends QueueEntry> getMessagesOnTheQueue(); List<Long> getMessagesOnTheQueue(int num); List<Long> getMessagesOnTheQueue(int num, int offset); - E getMessageOnTheQueue(long messageId); + QueueEntry getMessageOnTheQueue(long messageId); /** * Returns a list of QueEntries from a given range of queue positions, eg messages 5 to 10 on the queue. @@ -120,42 +120,42 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> * @param toPosition * @return */ - public List<E> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition); + public List<? extends QueueEntry> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition); - void visit(QueueEntryVisitor<E> visitor); + void visit(QueueEntryVisitor visitor); - long getMaximumMessageSize(); + long getAlertThresholdMessageSize(); void setMaximumMessageSize(long value); - long getMaximumMessageCount(); + long getAlertThresholdQueueDepthMessages(); void setMaximumMessageCount(long value); - long getMaximumQueueDepth(); + long getAlertThresholdQueueDepthBytes(); void setMaximumQueueDepth(long value); - long getMaximumMessageAge(); + long getAlertThresholdMessageAge(); void setMaximumMessageAge(final long maximumMessageAge); - long getMinimumAlertRepeatGap(); + long getAlertRepeatGap(); void setMinimumAlertRepeatGap(long value); - long getCapacity(); + long getQueueFlowControlSizeBytes(); void setCapacity(long capacity); - long getFlowResumeCapacity(); + long getQueueFlowResumeSizeBytes(); void setFlowResumeCapacity(long flowResumeCapacity); @@ -174,9 +174,9 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> void stop(); - Exchange getAlternateExchange(); + NonDefaultExchange getAlternateExchange(); - void setAlternateExchange(Exchange exchange); + void setAlternateExchange(NonDefaultExchange exchange); Collection<String> getAvailableAttributes(); Object getAttribute(String attrName); @@ -189,7 +189,7 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> * * @return maximum delivery count */ - int getMaximumDeliveryCount(); + int getMaximumDeliveryAttempts(); /** * Sets the maximum delivery count. @@ -198,7 +198,7 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> */ public void setMaximumDeliveryCount(final int maximumDeliveryCount); - void setNotificationListener(NotificationListener listener); + void setNotificationListener(QueueNotificationListener listener); /** * Sets the free text description of this queue. @@ -213,18 +213,18 @@ public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C> */ String getDescription(); - long getPersistentByteDequeues(); + long getPersistentDequeuedBytes(); - long getPersistentMsgDequeues(); + long getPersistentDequeuedMessages(); - long getPersistentByteEnqueues(); + long getPersistentEnqueuedBytes(); - long getPersistentMsgEnqueues(); + long getPersistentEnqueuedMessages(); - long getTotalDequeueSize(); + long getTotalDequeuedBytes(); - long getTotalEnqueueSize(); + long getTotalEnqueuedBytes(); - long getUnackedMessageCount(); + long getUnacknowledgedMessages(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java index 42052ba3be..34895b61e8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java @@ -25,20 +25,20 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.QueueConfiguration; import org.apache.qpid.server.exchange.DefaultExchangeFactory; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.MapValueConverter; import org.apache.qpid.server.util.ServerScopedRuntimeException; -import org.apache.qpid.server.virtualhost.AbstractVirtualHost; import org.apache.qpid.server.virtualhost.ExchangeExistsException; import org.apache.qpid.server.virtualhost.ReservedExchangeNameException; import org.apache.qpid.server.virtualhost.UnknownExchangeException; @@ -154,14 +154,14 @@ public class AMQQueueFactory implements QueueFactory { final String altExchangeAttr = (String) attributes.get(Queue.ALTERNATE_EXCHANGE); - Exchange altExchange; + NonDefaultExchange altExchange; try { - altExchange = _virtualHost.getExchange(UUID.fromString(altExchangeAttr)); + altExchange = (NonDefaultExchange) _virtualHost.getExchange(UUID.fromString(altExchangeAttr)); } catch(IllegalArgumentException e) { - altExchange = _virtualHost.getExchange(altExchangeAttr); + altExchange = (NonDefaultExchange) _virtualHost.getExchange(altExchangeAttr); } queue.setAlternateExchange(altExchange); } @@ -183,7 +183,7 @@ public class AMQQueueFactory implements QueueFactory final String dlExchangeName = getDeadLetterExchangeName(queueName); final String dlQueueName = getDeadLetterQueueName(queueName); - Exchange dlExchange = null; + NonDefaultExchange dlExchange = null; final UUID dlExchangeId = UUIDGenerator.generateExchangeUUID(dlExchangeName, _virtualHost.getName()); try @@ -202,7 +202,7 @@ public class AMQQueueFactory implements QueueFactory catch(ExchangeExistsException e) { // We're ok if the exchange already exists - dlExchange = e.getExistingExchange(); + dlExchange = (NonDefaultExchange) e.getExistingExchange(); } catch (ReservedExchangeNameException e) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java index 352129b514..516fc7750c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java @@ -18,6 +18,8 @@ */ package org.apache.qpid.server.queue; +import java.lang.reflect.Type; +import java.security.AccessControlException; import java.security.AccessController; import java.security.Principal; import java.util.*; @@ -30,14 +32,17 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import org.apache.log4j.Logger; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.connection.SessionPrincipal; -import org.apache.qpid.server.model.ExclusivityPolicy; -import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.exchange.NonDefaultExchange; +import org.apache.qpid.server.message.MessageSource; +import org.apache.qpid.server.model.*; +import org.apache.qpid.server.model.Queue; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.pool.ReferenceCountingExecutorService; -import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.configuration.BrokerProperties; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.LogSubject; @@ -49,11 +54,11 @@ import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; -import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; +import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.LocalTransaction; @@ -65,14 +70,14 @@ import org.apache.qpid.server.util.ServerScopedRuntimeException; import org.apache.qpid.server.util.StateChangeListener; import org.apache.qpid.server.virtualhost.VirtualHost; +import javax.management.NotificationListener; import javax.security.auth.Subject; -abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, - Q extends AbstractQueue<E, Q,L>, - L extends QueueEntryListBase<E,Q,L>> - implements AMQQueue<E, Q, QueueConsumer<?,E,Q,L>>, - StateChangeListener<QueueConsumer<?,E,Q,L>, QueueConsumer.State>, - MessageGroupManager.ConsumerResetHelper<E,Q,L> +public abstract class AbstractQueue + extends AbstractConfiguredObject<AbstractQueue> + implements AMQQueue<AbstractQueue>, + StateChangeListener<QueueConsumer<?>, State>, + MessageGroupManager.ConsumerResetHelper { private static final Logger _logger = Logger.getLogger(AbstractQueue.class); @@ -83,6 +88,16 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, // TODO - should make this configurable at the vhost / broker level private static final int DEFAULT_MAX_GROUPS = 255; + private static final QueueNotificationListener NULL_NOTIFICATION_LISTENER = new QueueNotificationListener() + { + @Override + public void notifyClients(final NotificationCheck notification, + final Queue queue, + final String notificationMsg) + { + + } + }; private final VirtualHost _virtualHost; @@ -93,14 +108,14 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, private final boolean _durable; - private Exchange _alternateExchange; + private NonDefaultExchange _alternateExchange; - private final L _entries; + private final QueueEntryList _entries; - private final QueueConsumerList<E,Q,L> _consumerList = new QueueConsumerList<E,Q,L>(); + private final QueueConsumerList _consumerList = new QueueConsumerList(); - private volatile QueueConsumer<?,E,Q,L> _exclusiveSubscriber; + private volatile QueueConsumer<?> _exclusiveSubscriber; @@ -163,8 +178,8 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, private final Set<AMQSessionModel> _blockedChannels = new ConcurrentSkipListSet<AMQSessionModel>(); private final AtomicBoolean _deleted = new AtomicBoolean(false); - private final List<Action<? super Q>> _deleteTaskList = - new CopyOnWriteArrayList<Action<? super Q>>(); + private final List<Action<? super AMQQueue>> _deleteTaskList = + new CopyOnWriteArrayList<Action<? super AMQQueue>>(); private LogSubject _logSubject; @@ -173,7 +188,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, private boolean _noLocal; private final AtomicBoolean _overfull = new AtomicBoolean(false); - private final CopyOnWriteArrayList<Binding> _bindings = new CopyOnWriteArrayList<Binding>(); + private final CopyOnWriteArrayList<BindingImpl> _bindings = new CopyOnWriteArrayList<BindingImpl>(); private UUID _id; private final Map<String, Object> _arguments; @@ -182,18 +197,20 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, /** the maximum delivery count for each message on this queue or 0 if maximum delivery count is not to be enforced. */ private int _maximumDeliveryCount; - private final MessageGroupManager<E,Q,L> _messageGroupManager; + private final MessageGroupManager _messageGroupManager; - private final Collection<ConsumerRegistrationListener<Q>> _consumerListeners = - new ArrayList<ConsumerRegistrationListener<Q>>(); + private final Collection<ConsumerRegistrationListener<? super MessageSource>> _consumerListeners = + new ArrayList<ConsumerRegistrationListener<? super MessageSource>>(); - private AMQQueue.NotificationListener _notificationListener; + private QueueNotificationListener _notificationListener; private final long[] _lastNotificationTimes = new long[NotificationCheck.values().length]; protected AbstractQueue(VirtualHost virtualHost, Map<String, Object> attributes, - QueueEntryListFactory<E, Q, L> entryListFactory) + QueueEntryListFactory entryListFactory) { + super(MapValueConverter.getUUIDAttribute(Queue.ID, attributes), + Collections.<String,Object>emptyMap(), attributes, virtualHost.getTaskExecutor()); if (virtualHost == null) { throw new IllegalArgumentException("Virtual Host must not be null"); @@ -223,7 +240,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _name = name; _durable = durable; _virtualHost = virtualHost; - _entries = entryListFactory.createQueueEntryList((Q) this); + _entries = entryListFactory.createQueueEntryList(this); final LinkedHashMap<String, Object> arguments = new LinkedHashMap<String, Object>(attributes); arguments.put(Queue.EXCLUSIVE, _exclusivityPolicy); @@ -421,13 +438,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, { Object defaultGroup = attributes.get(Queue.MESSAGE_GROUP_DEFAULT_GROUP); _messageGroupManager = - new DefinedGroupMessageGroupManager<E,Q,L>(String.valueOf(attributes.get(Queue.MESSAGE_GROUP_KEY)), + new DefinedGroupMessageGroupManager(String.valueOf(attributes.get(Queue.MESSAGE_GROUP_KEY)), defaultGroup == null ? DEFAULT_SHARED_MESSAGE_GROUP : defaultGroup.toString(), this); } else { - _messageGroupManager = new AssignedConsumerMessageGroupManager<E,Q,L>(String.valueOf(attributes.get( + _messageGroupManager = new AssignedConsumerMessageGroupManager(String.valueOf(attributes.get( Queue.MESSAGE_GROUP_KEY)), DEFAULT_MAX_GROUPS); } } @@ -499,11 +516,6 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _noLocal = nolocal; } - public UUID getId() - { - return _id; - } - public boolean isDurable() { return _durable; @@ -514,12 +526,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return _exclusivityPolicy != ExclusivityPolicy.NONE; } - public Exchange getAlternateExchange() + public NonDefaultExchange getAlternateExchange() { return _alternateExchange; } - public void setAlternateExchange(Exchange exchange) + public void setAlternateExchange(NonDefaultExchange exchange) { if(_alternateExchange != null) { @@ -540,9 +552,120 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } @Override - public Object getAttribute(String attrName) + public Object getAttribute(String name) { - return _arguments.get(attrName); + if(ALTERNATE_EXCHANGE.equals(name)) + { + return getAlternateExchange(); + } + else if(OWNER.equals(name)) + { + return getOwner(); + } + else if(NAME.equals(name)) + { + return getName(); + } + if(ALERT_REPEAT_GAP.equals(name)) + { + return getAlertRepeatGap(); + } + else if(ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) + { + return getAlertThresholdMessageAge(); + } + else if(ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) + { + return getAlertThresholdMessageSize(); + } + else if(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) + { + return getAlertThresholdQueueDepthBytes(); + } + else if(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) + { + return getAlertThresholdQueueDepthMessages(); + } + else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) + { + //We only return the boolean value if message groups are actually in use + return _arguments.get(MESSAGE_GROUP_KEY) == null ? null : _arguments.get(MESSAGE_GROUP_SHARED_GROUPS); + } + else if(LVQ_KEY.equals(name)) + { + if(this instanceof ConflationQueue) + { + return ((ConflationQueue)this).getConflationKey(); + } + } + else if(MAXIMUM_DELIVERY_ATTEMPTS.equals(name)) + { + return getMaximumDeliveryAttempts(); + } + else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name)) + { + return getQueueFlowControlSizeBytes(); + } + else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name)) + { + return getQueueFlowResumeSizeBytes(); + } + else if(QUEUE_FLOW_STOPPED.equals(name)) + { + return isOverfull(); + } + else if(SORT_KEY.equals(name)) + { + if(this instanceof SortedQueue) + { + return ((SortedQueue)this).getSortedPropertyName(); + } + } + else if(QUEUE_TYPE.equals(name)) + { + if(this instanceof SortedQueue) + { + return "sorted"; + } + if(this instanceof ConflationQueue) + { + return "lvq"; + } + if(this instanceof PriorityQueue) + { + return "priority"; + } + return "standard"; + } + else if(DURABLE.equals(name)) + { + return isDurable(); + } + else if(ID.equals(name)) + { + return getId(); + } + else if(LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + else if(STATE.equals(name)) + { + return State.ACTIVE; // TODO + } + else if (DESCRIPTION.equals(name)) + { + return getDescription(); + } + else if(PRIORITIES.equals(name)) + { + if(this instanceof PriorityQueue) + { + return ((PriorityQueue)this).getPriorities(); + } + } + + return _arguments.get(name); } @Override @@ -580,7 +703,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, @Override - public synchronized <T extends ConsumerTarget> QueueConsumer<T,E,Q,L> addConsumer(final T target, + public synchronized QueueConsumerImpl addConsumer(final ConsumerTarget target, final FilterManager filters, final Class<? extends ServerMessage> messageClass, final String consumerName, @@ -678,11 +801,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, throw new ExistingConsumerPreventsExclusive(); } - QueueConsumerImpl<T,E,Q,L> consumer = new QueueConsumerImpl<T,E,Q,L>((Q)this, - target, - consumerName, - filters, messageClass, - optionSet); + QueueConsumerImpl consumer = new QueueConsumerImpl(this, + target, + consumerName, + filters, + messageClass, + optionSet); _exclusiveOwner = exclusiveOwner; target.consumerAdded(consumer); @@ -699,15 +823,15 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } consumer.setStateListener(this); - consumer.setQueueContext(new QueueContext<E,Q,L>(_entries.getHead())); + consumer.setQueueContext(new QueueContext(_entries.getHead())); if (!isDeleted()) { synchronized (_consumerListeners) { - for(ConsumerRegistrationListener<Q> listener : _consumerListeners) + for(ConsumerRegistrationListener<? super MessageSource> listener : _consumerListeners) { - listener.consumerAdded((Q)this, consumer); + listener.consumerAdded(this, consumer); } } @@ -729,7 +853,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - synchronized void unregisterConsumer(final QueueConsumerImpl<?,E,Q,L> consumer) + synchronized void unregisterConsumer(final QueueConsumerImpl consumer) { if (consumer == null) { @@ -758,9 +882,9 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, synchronized (_consumerListeners) { - for(ConsumerRegistrationListener<Q> listener : _consumerListeners) + for(ConsumerRegistrationListener<? super MessageSource> listener : _consumerListeners) { - listener.consumerRemoved((Q)this, consumer); + listener.consumerRemoved(this, consumer); } } @@ -787,10 +911,10 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public Collection<QueueConsumer<?,E,Q,L>> getConsumers() + public Collection<QueueConsumer<?>> getConsumers() { - List<QueueConsumer<?,E,Q,L>> consumers = new ArrayList<QueueConsumer<?,E,Q,L>>(); - QueueConsumerList.ConsumerNodeIterator<E,Q,L> iter = _consumerList.iterator(); + List<QueueConsumer<?>> consumers = new ArrayList<QueueConsumer<?>>(); + QueueConsumerList.ConsumerNodeIterator iter = _consumerList.iterator(); while(iter.advance()) { consumers.add(iter.getNode().getConsumer()); @@ -799,7 +923,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public void addConsumerRegistrationListener(final ConsumerRegistrationListener<Q> listener) + public void addConsumerRegistrationListener(final ConsumerRegistrationListener<? super MessageSource> listener) { synchronized (_consumerListeners) { @@ -807,7 +931,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void removeConsumerRegistrationListener(final ConsumerRegistrationListener<Q> listener) + public void removeConsumerRegistrationListener(final ConsumerRegistrationListener<? super MessageSource> listener) { synchronized (_consumerListeners) { @@ -815,9 +939,9 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void resetSubPointersForGroups(QueueConsumer<?,E,Q,L> consumer, boolean clearAssignments) + public void resetSubPointersForGroups(QueueConsumer<?> consumer, boolean clearAssignments) { - E entry = _messageGroupManager.findEarliestAssignedAvailableEntry(consumer); + QueueEntry entry = _messageGroupManager.findEarliestAssignedAvailableEntry(consumer); if(clearAssignments) { _messageGroupManager.clearAssignments(consumer); @@ -825,11 +949,11 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, if(entry != null) { - QueueConsumerList.ConsumerNodeIterator<E,Q,L> subscriberIter = _consumerList.iterator(); + QueueConsumerList.ConsumerNodeIterator subscriberIter = _consumerList.iterator(); // iterate over all the subscribers, and if they are in advance of this queue entry then move them backwards while (subscriberIter.advance()) { - QueueConsumer<?,E,Q,L> sub = subscriberIter.getNode().getConsumer(); + QueueConsumer<?> sub = subscriberIter.getNode().getConsumer(); // we don't make browsers send the same stuff twice if (sub.seesRequeues()) @@ -843,7 +967,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void addBinding(final Binding binding) + public void addBinding(final BindingImpl binding) { _bindings.add(binding); int bindingCount = _bindings.size(); @@ -857,12 +981,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void removeBinding(final Binding binding) + public void removeBinding(final BindingImpl binding) { _bindings.remove(binding); } - public List<Binding> getBindings() + public Collection<BindingImpl> getBindings() { return Collections.unmodifiableList(_bindings); } @@ -879,7 +1003,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, // ------ Enqueue / Dequeue - public void enqueue(ServerMessage message, Action<? super MessageInstance<?, QueueConsumer<?,E,Q,L>>> action) + public void enqueue(ServerMessage message, Action<? super MessageInstance> action) { incrementQueueCount(); incrementQueueSize(message); @@ -887,8 +1011,8 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _totalMessagesReceived.incrementAndGet(); - E entry; - final QueueConsumer<?,E,Q,L> exclusiveSub = _exclusiveSubscriber; + QueueEntry entry; + final QueueConsumer<?> exclusiveSub = _exclusiveSubscriber; entry = _entries.add(message); if(action != null || (exclusiveSub == null && _queueRunner.isIdle())) @@ -898,8 +1022,8 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, iterate over consumers and if any is at the end of the queue and can deliver this message, then deliver the message */ - QueueConsumerList.ConsumerNode<E,Q,L> node = _consumerList.getMarkedNode(); - QueueConsumerList.ConsumerNode<E,Q,L> nextNode = node.findNext(); + QueueConsumerList.ConsumerNode node = _consumerList.getMarkedNode(); + QueueConsumerList.ConsumerNode nextNode = node.findNext(); if (nextNode == null) { nextNode = _consumerList.getHead().findNext(); @@ -935,7 +1059,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, else { // if consumer at end, and active, offer - QueueConsumer<?,E,Q,L> sub = nextNode.getConsumer(); + QueueConsumer<?> sub = nextNode.getConsumer(); deliverToConsumer(sub, entry); } nextNode = nextNode.findNext(); @@ -967,7 +1091,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - private void deliverToConsumer(final QueueConsumer<?,E,Q,L> sub, final E entry) + private void deliverToConsumer(final QueueConsumer<?> sub, final QueueEntry entry) { if(sub.trySendLock()) @@ -998,7 +1122,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - private boolean assign(final QueueConsumer<?,E,Q,L> sub, final E entry) + private boolean assign(final QueueConsumer<?> sub, final QueueEntry entry) { if(_messageGroupManager == null) { @@ -1012,17 +1136,17 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - private boolean mightAssign(final QueueConsumer<?,E,Q,L> sub, final E entry) + private boolean mightAssign(final QueueConsumer sub, final QueueEntry entry) { if(_messageGroupManager == null || !sub.acquires()) { return true; } - QueueConsumer<?,E,Q,L> assigned = _messageGroupManager.getAssignedConsumer(entry); + QueueConsumer assigned = _messageGroupManager.getAssignedConsumer(entry); return (assigned == null) || (assigned == sub); } - protected void checkConsumersNotAheadOfDelivery(final E entry) + protected void checkConsumersNotAheadOfDelivery(final QueueEntry entry) { // This method is only required for queues which mess with ordering // Simple Queues don't :-) @@ -1041,12 +1165,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public long getTotalDequeueCount() + public long getTotalDequeuedMessages() { return _dequeueCount.get(); } - public long getTotalEnqueueCount() + public long getTotalEnqueuedMessages() { return _enqueueCount.get(); } @@ -1056,7 +1180,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, getAtomicQueueCount().incrementAndGet(); } - private void deliverMessage(final QueueConsumer<?,E,Q,L> sub, final E entry, boolean batch) + private void deliverMessage(final QueueConsumer<?> sub, final QueueEntry entry, boolean batch) { setLastSeenEntry(sub, entry); @@ -1066,18 +1190,18 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, sub.send(entry, batch); } - private boolean consumerReadyAndHasInterest(final QueueConsumer<?,E,Q,L> sub, final E entry) + private boolean consumerReadyAndHasInterest(final QueueConsumer<?> sub, final QueueEntry entry) { return sub.hasInterest(entry) && (getNextAvailableEntry(sub) == entry); } - private void setLastSeenEntry(final QueueConsumer<?,E,Q,L> sub, final E entry) + private void setLastSeenEntry(final QueueConsumer<?> sub, final QueueEntry entry) { - QueueContext<E,Q,L> subContext = sub.getQueueContext(); + QueueContext subContext = sub.getQueueContext(); if (subContext != null) { - E releasedEntry = subContext.getReleasedEntry(); + QueueEntry releasedEntry = subContext.getReleasedEntry(); QueueContext._lastSeenUpdater.set(subContext, entry); if(releasedEntry == entry) @@ -1087,13 +1211,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - private void updateSubRequeueEntry(final QueueConsumer<?,E,Q,L> sub, final E entry) + private void updateSubRequeueEntry(final QueueConsumer<?> sub, final QueueEntry entry) { - QueueContext<E,Q,L> subContext = sub.getQueueContext(); + QueueContext subContext = sub.getQueueContext(); if(subContext != null) { - E oldEntry; + QueueEntry oldEntry; while((oldEntry = subContext.getReleasedEntry()) == null || oldEntry.compareTo(entry) > 0) { @@ -1105,13 +1229,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void requeue(E entry) + public void requeue(QueueEntry entry) { - QueueConsumerList.ConsumerNodeIterator<E,Q,L> subscriberIter = _consumerList.iterator(); + QueueConsumerList.ConsumerNodeIterator subscriberIter = _consumerList.iterator(); // iterate over all the subscribers, and if they are in advance of this queue entry then move them backwards while (subscriberIter.advance() && entry.isAvailable()) { - QueueConsumer<?,E,Q,L> sub = subscriberIter.getNode().getConsumer(); + QueueConsumer<?> sub = subscriberIter.getNode().getConsumer(); // we don't make browsers send the same stuff twice if (sub.seesRequeues()) @@ -1125,7 +1249,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } @Override - public void dequeue(E entry) + public void dequeue(QueueEntry entry) { decrementQueueCount(); decrementQueueSize(entry); @@ -1138,7 +1262,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - private void decrementQueueSize(final E entry) + private void decrementQueueSize(final QueueEntry entry) { final ServerMessage message = entry.getMessage(); long size = message.getSize(); @@ -1157,7 +1281,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _dequeueCount.incrementAndGet(); } - public boolean resend(final E entry, final QueueConsumer<?,E,Q,L> consumer) + public boolean resend(final QueueEntry entry, final QueueConsumer<?> consumer) { /* TODO : This is wrong as the consumer may be suspended, we should instead change the state of the message entry to resend and move back the consumer pointer. */ @@ -1188,7 +1312,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return _consumerList.size(); } - public int getActiveConsumerCount() + public int getConsumerCountWithCredit() { return _activeSubscriberCount.get(); } @@ -1200,22 +1324,23 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, public boolean isEmpty() { - return getMessageCount() == 0; + return getQueueDepthMessages() == 0; } - public int getMessageCount() + @Override + public int getQueueDepthMessages() { return getAtomicQueueCount().get(); } - public long getQueueDepth() + public long getQueueDepthBytes() { return getAtomicQueueSize().get(); } public int getUndeliveredMessageCount() { - int count = getMessageCount() - _deliveredMessages.get(); + int count = getQueueDepthMessages() - _deliveredMessages.get(); if (count < 0) { return 0; @@ -1233,11 +1358,11 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, public long getOldestMessageArrivalTime() { - E entry = getOldestQueueEntry(); + QueueEntry entry = getOldestQueueEntry(); return entry == null ? Long.MAX_VALUE : entry.getMessage().getArrivalTime(); } - protected E getOldestQueueEntry() + protected QueueEntry getOldestQueueEntry() { return _entries.next(_entries.getHead()); } @@ -1247,13 +1372,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return _deleted.get(); } - public List<E> getMessagesOnTheQueue() + public List<QueueEntry> getMessagesOnTheQueue() { - ArrayList<E> entryList = new ArrayList<E>(); - QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> queueListIterator = _entries.iterator(); + ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); + QueueEntryIterator queueListIterator = _entries.iterator(); while (queueListIterator.advance()) { - E node = queueListIterator.getNode(); + QueueEntry node = queueListIterator.getNode(); if (node != null && !node.isDeleted()) { entryList.add(node); @@ -1263,16 +1388,16 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public void stateChanged(QueueConsumer<?,E,Q,L> sub, QueueConsumer.State oldState, QueueConsumer.State newState) + public void stateChanged(QueueConsumer<?> sub, State oldState, State newState) { - if (oldState == QueueConsumer.State.ACTIVE && newState != QueueConsumer.State.ACTIVE) + if (oldState == State.ACTIVE && newState != State.ACTIVE) { _activeSubscriberCount.decrementAndGet(); } - else if (newState == QueueConsumer.State.ACTIVE) + else if (newState == State.ACTIVE) { - if (oldState != QueueConsumer.State.ACTIVE) + if (oldState != State.ACTIVE) { _activeSubscriberCount.incrementAndGet(); @@ -1281,7 +1406,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public int compareTo(final Q o) + public int compareTo(final AMQQueue o) { return _name.compareTo(o.getName()); } @@ -1301,7 +1426,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return _exclusiveSubscriber != null; } - private void setExclusiveSubscriber(QueueConsumer<?,E,Q,L> exclusiveSubscriber) + private void setExclusiveSubscriber(QueueConsumer<?> exclusiveSubscriber) { _exclusiveSubscriber = exclusiveSubscriber; } @@ -1312,32 +1437,32 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } /** Used to track bindings to exchanges so that on deletion they can easily be cancelled. */ - protected L getEntries() + protected QueueEntryList getEntries() { return _entries; } - protected QueueConsumerList<E,Q,L> getConsumerList() + protected QueueConsumerList getConsumerList() { return _consumerList; } - public static interface QueueEntryFilter<E extends QueueEntry> + public static interface QueueEntryFilter { - public boolean accept(E entry); + public boolean accept(QueueEntry entry); public boolean filterComplete(); } - public List<E> getMessagesOnTheQueue(final long fromMessageId, final long toMessageId) + public List<QueueEntry> getMessagesOnTheQueue(final long fromMessageId, final long toMessageId) { - return getMessagesOnTheQueue(new QueueEntryFilter<E>() + return getMessagesOnTheQueue(new QueueEntryFilter() { - public boolean accept(E entry) + public boolean accept(QueueEntry entry) { final long messageId = entry.getMessage().getMessageNumber(); return messageId >= fromMessageId && messageId <= toMessageId; @@ -1350,13 +1475,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, }); } - public E getMessageOnTheQueue(final long messageId) + public QueueEntry getMessageOnTheQueue(final long messageId) { - List<E> entries = getMessagesOnTheQueue(new QueueEntryFilter<E>() + List<QueueEntry> entries = getMessagesOnTheQueue(new QueueEntryFilter() { private boolean _complete; - public boolean accept(E entry) + public boolean accept(QueueEntry entry) { _complete = entry.getMessage().getMessageNumber() == messageId; return _complete; @@ -1370,13 +1495,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return entries.isEmpty() ? null : entries.get(0); } - public List<E> getMessagesOnTheQueue(QueueEntryFilter<E> filter) + public List<QueueEntry> getMessagesOnTheQueue(QueueEntryFilter filter) { - ArrayList<E> entryList = new ArrayList<E>(); - QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> queueListIterator = _entries.iterator(); + ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); + QueueEntryIterator queueListIterator = _entries.iterator(); while (queueListIterator.advance() && !filter.filterComplete()) { - E node = queueListIterator.getNode(); + QueueEntry node = queueListIterator.getNode(); if (!node.isDeleted() && filter.accept(node)) { entryList.add(node); @@ -1386,13 +1511,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public void visit(final QueueEntryVisitor<E> visitor) + public void visit(final QueueEntryVisitor visitor) { - QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> queueListIterator = _entries.iterator(); + QueueEntryIterator queueListIterator = _entries.iterator(); while(queueListIterator.advance()) { - E node = queueListIterator.getNode(); + QueueEntry node = queueListIterator.getNode(); if(!node.isDeleted()) { @@ -1413,13 +1538,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, * @param toPosition last message position * @return list of messages */ - public List<E> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition) + public List<QueueEntry> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition) { - return getMessagesOnTheQueue(new QueueEntryFilter<E>() + return getMessagesOnTheQueue(new QueueEntryFilter() { private long position = 0; - public boolean accept(E entry) + public boolean accept(QueueEntry entry) { position++; return (position >= fromPosition) && (position <= toPosition); @@ -1450,14 +1575,14 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, //Perform ACLs getVirtualHost().getSecurityManager().authorisePurge(this); - QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> queueListIterator = _entries.iterator(); + QueueEntryIterator queueListIterator = _entries.iterator(); long count = 0; ServerTransaction txn = new LocalTransaction(getVirtualHost().getMessageStore()); while (queueListIterator.advance()) { - E node = queueListIterator.getNode(); + QueueEntry node = queueListIterator.getNode(); if (node.acquire()) { dequeueEntry(node, txn); @@ -1474,13 +1599,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return count; } - private void dequeueEntry(final E node) + private void dequeueEntry(final QueueEntry node) { ServerTransaction txn = new AutoCommitTransaction(getVirtualHost().getMessageStore()); dequeueEntry(node, txn); } - private void dequeueEntry(final E node, ServerTransaction txn) + private void dequeueEntry(final QueueEntry node, ServerTransaction txn) { txn.dequeue(this, node.getMessage(), new ServerTransaction.Action() @@ -1499,13 +1624,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } @Override - public void addDeleteTask(final Action<? super Q> task) + public void addDeleteTask(final Action<? super AMQQueue> task) { _deleteTaskList.add(task); } @Override - public void removeDeleteTask(final Action<? super Q> task) + public void removeDeleteTask(final Action<? super AMQQueue> task) { _deleteTaskList.remove(task); } @@ -1519,9 +1644,9 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, if (!_deleted.getAndSet(true)) { - final ArrayList<Binding> bindingCopy = new ArrayList<Binding>(_bindings); + final ArrayList<BindingImpl> bindingCopy = new ArrayList<BindingImpl>(_bindings); - for (Binding b : bindingCopy) + for (BindingImpl b : bindingCopy) { b.delete(); } @@ -1538,10 +1663,10 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - List<E> entries = getMessagesOnTheQueue(new QueueEntryFilter<E>() + List<QueueEntry> entries = getMessagesOnTheQueue(new QueueEntryFilter() { - public boolean accept(E entry) + public boolean accept(QueueEntry entry) { return entry.acquire(); } @@ -1555,7 +1680,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, ServerTransaction txn = new LocalTransaction(getVirtualHost().getMessageStore()); - for(final E entry : entries) + for(final QueueEntry entry : entries) { // TODO log requeues with a post enqueue action int requeues = entry.routeToAlternate(null, txn); @@ -1574,9 +1699,9 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - for (Action<? super Q> task : _deleteTaskList) + for (Action<? super AMQQueue> task : _deleteTaskList) { - task.performAction((Q)this); + task.performAction(this); } _deleteTaskList.clear(); @@ -1586,7 +1711,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, CurrentActor.get().message(_logSubject, QueueMessages.DELETED()); } - return getMessageCount(); + return getQueueDepthMessages(); } @@ -1660,7 +1785,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public void deliverAsync(QueueConsumer<?,E,Q,L> sub) + public void deliverAsync(QueueConsumer<?> sub) { if(_exclusiveSubscriber == null) { @@ -1674,13 +1799,13 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - void flushConsumer(QueueConsumer<?,E,Q,L> sub) + void flushConsumer(QueueConsumer<?> sub) { flushConsumer(sub, Long.MAX_VALUE); } - boolean flushConsumer(QueueConsumer<?,E,Q,L> sub, long iterations) + boolean flushConsumer(QueueConsumer<?> sub, long iterations) { boolean atTail = false; final boolean keepSendLockHeld = iterations <= AbstractQueue.MAX_ASYNC_DELIVERIES; @@ -1757,7 +1882,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, * @param batch true if processing can be batched * @return true if we have completed all possible deliveries for this sub. */ - private boolean attemptDelivery(QueueConsumer<?,E,Q,L> sub, boolean batch) + private boolean attemptDelivery(QueueConsumer<?> sub, boolean batch) { boolean atTail = false; @@ -1765,7 +1890,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, if (subActive) { - E node = getNextAvailableEntry(sub); + QueueEntry node = getNextAvailableEntry(sub); if (node != null && node.isAvailable()) { @@ -1802,11 +1927,11 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, protected void advanceAllConsumers() { - QueueConsumerList.ConsumerNodeIterator<E,Q,L> consumerNodeIterator = _consumerList.iterator(); + QueueConsumerList.ConsumerNodeIterator consumerNodeIterator = _consumerList.iterator(); while (consumerNodeIterator.advance()) { - QueueConsumerList.ConsumerNode<E,Q,L> subNode = consumerNodeIterator.getNode(); - QueueConsumer<?,E,Q,L> sub = subNode.getConsumer(); + QueueConsumerList.ConsumerNode subNode = consumerNodeIterator.getNode(); + QueueConsumer sub = subNode.getConsumer(); if(sub.acquires()) { getNextAvailableEntry(sub); @@ -1818,15 +1943,15 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - private E getNextAvailableEntry(final QueueConsumer<?,E,Q,L> sub) + private QueueEntry getNextAvailableEntry(final QueueConsumer sub) { - QueueContext<E,Q,L> context = sub.getQueueContext(); + QueueContext context = sub.getQueueContext(); if(context != null) { - E lastSeen = context.getLastSeenEntry(); - E releasedNode = context.getReleasedEntry(); + QueueEntry lastSeen = context.getLastSeenEntry(); + QueueEntry releasedNode = context.getReleasedEntry(); - E node = (releasedNode != null && lastSeen.compareTo(releasedNode)>=0) ? releasedNode : _entries.next(lastSeen); + QueueEntry node = (releasedNode != null && lastSeen.compareTo(releasedNode)>=0) ? releasedNode : _entries.next(lastSeen); boolean expired = false; while (node != null && (!node.isAvailable() || (expired = node.expired()) || !sub.hasInterest(node) || @@ -1858,12 +1983,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public boolean isEntryAheadOfConsumer(E entry, QueueConsumer<?,E,Q,L> sub) + public boolean isEntryAheadOfConsumer(QueueEntry entry, QueueConsumer<?> sub) { - QueueContext<E,Q,L> context = sub.getQueueContext(); + QueueContext context = sub.getQueueContext(); if(context != null) { - E releasedNode = context.getReleasedEntry(); + QueueEntry releasedNode = context.getReleasedEntry(); return releasedNode != null && releasedNode.compareTo(entry) < 0; } else @@ -1934,11 +2059,11 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, boolean allConsumersDone = true; boolean consumerDone; - QueueConsumerList.ConsumerNodeIterator<E,Q,L> consumerNodeIterator = _consumerList.iterator(); + QueueConsumerList.ConsumerNodeIterator consumerNodeIterator = _consumerList.iterator(); //iterate over the subscribers and try to advance their pointer while (consumerNodeIterator.advance()) { - QueueConsumer<?,E,Q,L> sub = consumerNodeIterator.getNode().getConsumer(); + QueueConsumer<?> sub = consumerNodeIterator.getNode().getConsumer(); sub.getSendLock(); try @@ -2020,11 +2145,11 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, public void checkMessageStatus() { - QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> queueListIterator = _entries.iterator(); + QueueEntryIterator queueListIterator = _entries.iterator(); while (queueListIterator.advance()) { - E node = queueListIterator.getNode(); + QueueEntry node = queueListIterator.getNode(); // Only process nodes that are not currently deleted and not dequeued if (!node.isDeleted()) { @@ -2054,7 +2179,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public long getMinimumAlertRepeatGap() + public long getAlertRepeatGap() { return _minimumAlertRepeatGap; } @@ -2064,7 +2189,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _minimumAlertRepeatGap = minimumAlertRepeatGap; } - public long getMaximumMessageAge() + public long getAlertThresholdMessageAge() { return _maximumMessageAge; } @@ -2082,7 +2207,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public long getMaximumMessageCount() + public long getAlertThresholdQueueDepthMessages() { return _maximumMessageCount; } @@ -2101,7 +2226,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public long getMaximumQueueDepth() + public long getAlertThresholdQueueDepthBytes() { return _maximumQueueDepth; } @@ -2121,7 +2246,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } - public long getMaximumMessageSize() + public long getAlertThresholdMessageSize() { return _maximumMessageSize; } @@ -2139,7 +2264,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public long getCapacity() + public long getQueueFlowControlSizeBytes() { return _capacity; } @@ -2149,7 +2274,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _capacity = capacity; } - public long getFlowResumeCapacity() + public long getQueueFlowResumeSizeBytes() { return _flowResumeCapacity; } @@ -2191,12 +2316,12 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - private final class QueueEntryListener implements StateChangeListener<E, QueueEntry.State> + private final class QueueEntryListener implements StateChangeListener<MessageInstance, QueueEntry.State> { - private final QueueConsumer<?,E,Q,L> _sub; + private final QueueConsumer<?> _sub; - public QueueEntryListener(final QueueConsumer<?,E,Q,L> sub) + public QueueEntryListener(final QueueConsumer<?> sub) { _sub = sub; } @@ -2212,7 +2337,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return System.identityHashCode(_sub); } - public void stateChanged(E entry, QueueEntry.State oldSate, QueueEntry.State newState) + public void stateChanged(MessageInstance entry, QueueEntry.State oldSate, QueueEntry.State newState) { entry.removeStateChangeListener(this); deliverAsync(_sub); @@ -2241,32 +2366,32 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return ids; } - public long getTotalEnqueueSize() + public long getTotalEnqueuedBytes() { return _enqueueSize.get(); } - public long getTotalDequeueSize() + public long getTotalDequeuedBytes() { return _dequeueSize.get(); } - public long getPersistentByteEnqueues() + public long getPersistentEnqueuedBytes() { return _persistentMessageEnqueueSize.get(); } - public long getPersistentByteDequeues() + public long getPersistentDequeuedBytes() { return _persistentMessageDequeueSize.get(); } - public long getPersistentMsgEnqueues() + public long getPersistentEnqueuedMessages() { return _persistentMessageEnqueueCount.get(); } - public long getPersistentMsgDequeues() + public long getPersistentDequeuedMessages() { return _persistentMessageDequeueCount.get(); } @@ -2278,23 +2403,23 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return getName(); } - public long getUnackedMessageCount() + public long getUnacknowledgedMessages() { return _unackedMsgCount.get(); } - public long getUnackedMessageBytes() + public long getUnacknowledgedBytes() { return _unackedMsgBytes.get(); } - public void decrementUnackedMsgCount(E queueEntry) + public void decrementUnackedMsgCount(QueueEntry queueEntry) { _unackedMsgCount.decrementAndGet(); _unackedMsgBytes.addAndGet(-queueEntry.getSize()); } - private void incrementUnackedMsgCount(E entry) + private void incrementUnackedMsgCount(QueueEntry entry) { _unackedMsgCount.incrementAndGet(); _unackedMsgBytes.addAndGet(entry.getSize()); @@ -2305,7 +2430,8 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, return _logActor; } - public int getMaximumDeliveryCount() + @Override + public int getMaximumDeliveryAttempts() { return _maximumDeliveryCount; } @@ -2321,12 +2447,15 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, private void checkForNotification(ServerMessage<?> msg) { final Set<NotificationCheck> notificationChecks = getNotificationChecks(); - final AMQQueue.NotificationListener listener = _notificationListener; - + QueueNotificationListener listener = _notificationListener; + if(listener == null) + { + listener = NULL_NOTIFICATION_LISTENER; + } if(listener != null && !notificationChecks.isEmpty()) { final long currentTime = System.currentTimeMillis(); - final long thresholdTime = currentTime - getMinimumAlertRepeatGap(); + final long thresholdTime = currentTime - getAlertRepeatGap(); for (NotificationCheck check : notificationChecks) { @@ -2341,7 +2470,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, } } - public void setNotificationListener(AMQQueue.NotificationListener listener) + public void setNotificationListener(QueueNotificationListener listener) { _notificationListener = listener; } @@ -2361,7 +2490,7 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, public final <M extends ServerMessage<? extends StorableMessageMetaData>> int send(final M message, final InstanceProperties instanceProperties, final ServerTransaction txn, - final Action<? super MessageInstance<?, ? extends Consumer>> postEnqueueAction) + final Action<? super MessageInstance> postEnqueueAction) { txn.enqueue(this,message, new ServerTransaction.Action() { @@ -2612,4 +2741,371 @@ abstract class AbstractQueue<E extends QueueEntryImpl<E,Q,L>, _deleteTask = deleteTask; } } + + //============= + + + @Override + protected boolean setState(final State currentState, final State desiredState) + { + if(desiredState == State.DELETED) + { + _virtualHost.removeQueue(this); + return true; + } + return false; + } + + @Override + public String getQueueType() + { + return null; + } + + @Override + public ExclusivityPolicy getExclusive() + { + return _exclusivityPolicy; + } + + @Override + public boolean getNoLocal() + { + return _noLocal; + } + + @Override + public String getLvqKey() + { + return null; + } + + @Override + public String getSortKey() + { + return null; + } + + @Override + public String getMessageGroupKey() + { + return (String) getAttribute(MESSAGE_GROUP_KEY); + } + + @Override + public int getMessageGroupSharedGroups() + { + return (Integer) getAttribute(MESSAGE_GROUP_SHARED_GROUPS); + } + + + @Override + public boolean isQueueFlowStopped() + { + return false; + } + + @Override + public int getPriorities() + { + return 0; + } + + @Override + public long getBytesIn() + { + return 0; + } + + @Override + public long getBytesOut() + { + return 0; + } + + @Override + public long getMessagesIn() + { + return 0; + } + + @Override + public long getMessagesOut() + { + return 0; + } + + @Override + public String setName(final String currentName, final String desiredName) + throws IllegalStateException, AccessControlException + { + return null; + } + + @Override + public State getState() + { + return isDeleted() ? State.DELETED : State.ACTIVE; + } + + @Override + public void setDurable(final boolean durable) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + + } + + @Override + public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + return null; + } + + @Override + public <C extends ConfiguredObject> Collection<C> getChildren(final Class<C> clazz) + { + if(clazz == Binding.class) + { + return (Collection<C>) getBindings(); + } + else if(clazz == org.apache.qpid.server.model.Consumer.class) + { + return (Collection<C>) getConsumers(); + } + else return Collections.emptySet(); + } + + @Override + public <T extends ConfiguredObject> T getParent(final Class<T> clazz) + { + if(clazz == org.apache.qpid.server.model.VirtualHost.class) + { + return (T) _virtualHost.getModel(); + } + return super.getParent(clazz); + } + + @Override + protected <C extends ConfiguredObject> C addChild(final Class<C> childClass, + final Map<String, Object> attributes, + final ConfiguredObject... otherParents) + { + if(childClass == Binding.class && otherParents.length == 1 && otherParents[0] instanceof Exchange) + { + final String bindingKey = (String) attributes.get("name"); + ((NonDefaultExchange)otherParents[0]).addBinding(bindingKey, this, attributes); + for(Binding binding : _bindings) + { + if(binding.getExchange() == otherParents[0] && binding.getName().equals(bindingKey)) + { + return (C) binding; + } + } + return null; + } + return super.addChild(childClass, attributes, otherParents); + } + + @Override + public boolean changeAttribute(String name, Object expected, Object desired) throws IllegalStateException, AccessControlException, IllegalArgumentException + { + try + { + if(ALERT_REPEAT_GAP.equals(name)) + { + setMinimumAlertRepeatGap((Long) desired); + return true; + } + else if(ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) + { + setMaximumMessageAge((Long) desired); + return true; + } + else if(ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) + { + setMaximumMessageSize((Long) desired); + return true; + } + else if(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) + { + setMaximumQueueDepth((Long) desired); + return true; + } + else if(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) + { + setMaximumMessageCount((Long) desired); + return true; + } + else if(ALTERNATE_EXCHANGE.equals(name)) + { + // In future we may want to accept a UUID as an alternative way to identifying the exchange + NonDefaultExchange alternateExchange = (NonDefaultExchange) desired; + setAlternateExchange(alternateExchange); + return true; + } + else if(EXCLUSIVE.equals(name)) + { + ExclusivityPolicy desiredPolicy; + if(desired == null) + { + desiredPolicy = ExclusivityPolicy.NONE; + } + else if(desired instanceof ExclusivityPolicy) + { + desiredPolicy = (ExclusivityPolicy)desired; + } + else if (desired instanceof String) + { + desiredPolicy = ExclusivityPolicy.valueOf((String)desired); + } + else + { + throw new IllegalArgumentException("Cannot set " + Queue.EXCLUSIVE + " property to type " + desired.getClass().getName()); + } + try + { + setExclusivityPolicy(desiredPolicy); + } + catch (MessageSource.ExistingConsumerPreventsExclusive existingConsumerPreventsExclusive) + { + throw new IllegalArgumentException("Unable to set exclusivity policy to " + desired + " as an existing combinations of consumers prevents this"); + } + return true; + + } + else if(MESSAGE_GROUP_KEY.equals(name)) + { + // TODO + } + else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) + { + // TODO + } + else if(LVQ_KEY.equals(name)) + { + // TODO + } + else if(MAXIMUM_DELIVERY_ATTEMPTS.equals(name)) + { + setMaximumDeliveryCount((Integer) desired); + return true; + } + else if(NO_LOCAL.equals(name)) + { + // TODO + } + else if(OWNER.equals(name)) + { + // TODO + } + else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name)) + { + setCapacity((Long) desired); + return true; + } + else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name)) + { + setFlowResumeCapacity((Long) desired); + return true; + } + else if(QUEUE_FLOW_STOPPED.equals(name)) + { + // TODO + } + else if(SORT_KEY.equals(name)) + { + // TODO + } + else if(QUEUE_TYPE.equals(name)) + { + // TODO + } + else if (DESCRIPTION.equals(name)) + { + setDescription((String) desired); + return true; + } + + return super.changeAttribute(name, expected, desired); + } + finally + { + if (isDurable()) + { + DurableConfigurationStoreHelper.updateQueue(this.getVirtualHost().getDurableConfigurationStore(), + this); + } + } + } + + @Override + public Collection<String> getAttributeNames() + { + return getAttributeNames(getClass()); + } + @Override + protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException + { + _virtualHost.getSecurityManager().authoriseUpdate(this); + } + + @Override + protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException + { + _virtualHost.getSecurityManager().authoriseUpdate(this); + } + + @SuppressWarnings("serial") + static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ + put(ALERT_REPEAT_GAP, Long.class); + put(ALERT_THRESHOLD_MESSAGE_AGE, Long.class); + put(ALERT_THRESHOLD_MESSAGE_SIZE, Long.class); + put(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Long.class); + put(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Long.class); + put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class); + put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class); + put(MAXIMUM_DELIVERY_ATTEMPTS, Integer.class); + put(DESCRIPTION, String.class); + }}); + + @Override + protected void changeAttributes(final Map<String, Object> attributes) + { + Map<String, Object> convertedAttributes = MapValueConverter.convert(attributes, ATTRIBUTE_TYPES); + validateAttributes(convertedAttributes); + + super.changeAttributes(convertedAttributes); + } + + private void validateAttributes(Map<String, Object> convertedAttributes) + { + Long queueFlowControlSize = (Long) convertedAttributes.get(QUEUE_FLOW_CONTROL_SIZE_BYTES); + Long queueFlowControlResumeSize = (Long) convertedAttributes.get(QUEUE_FLOW_RESUME_SIZE_BYTES); + if (queueFlowControlSize != null || queueFlowControlResumeSize != null ) + { + if (queueFlowControlSize == null) + { + queueFlowControlSize = (Long)getAttribute(QUEUE_FLOW_CONTROL_SIZE_BYTES); + } + if (queueFlowControlResumeSize == null) + { + queueFlowControlResumeSize = (Long)getAttribute(QUEUE_FLOW_RESUME_SIZE_BYTES); + } + if (queueFlowControlResumeSize > queueFlowControlSize) + { + throw new IllegalConfigurationException("Flow resume size can't be greater than flow control size"); + } + } + for (Map.Entry<String, Object> entry: convertedAttributes.entrySet()) + { + Object value = entry.getValue(); + if (value instanceof Number && ((Number)value).longValue() < 0) + { + throw new IllegalConfigurationException("Only positive integer value can be specified for the attribute " + + entry.getKey()); + } + } + } + } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AssignedConsumerMessageGroupManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AssignedConsumerMessageGroupManager.java index d8209e66ca..827d44dfb3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AssignedConsumerMessageGroupManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AssignedConsumerMessageGroupManager.java @@ -28,13 +28,13 @@ import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; -public class AssignedConsumerMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> implements MessageGroupManager<E,Q,L> +public class AssignedConsumerMessageGroupManager implements MessageGroupManager { private static final Logger _logger = LoggerFactory.getLogger(AssignedConsumerMessageGroupManager.class); private final String _groupId; - private final ConcurrentHashMap<Integer, QueueConsumer> _groupMap = new ConcurrentHashMap<Integer, QueueConsumer>(); + private final ConcurrentHashMap<Integer, QueueConsumer<?>> _groupMap = new ConcurrentHashMap<Integer, QueueConsumer<?>>(); private final int _groupMask; public AssignedConsumerMessageGroupManager(final String groupId, final int maxGroups) @@ -53,18 +53,18 @@ public class AssignedConsumerMessageGroupManager<E extends QueueEntryImpl<E,Q,L> return val; } - public QueueConsumer getAssignedConsumer(final E entry) + public QueueConsumer<?> getAssignedConsumer(final QueueEntry entry) { Object groupVal = entry.getMessage().getMessageHeader().getHeader(_groupId); return groupVal == null ? null : _groupMap.get(groupVal.hashCode() & _groupMask); } - public boolean acceptMessage(QueueConsumer<?,E,Q,L> sub, E entry) + public boolean acceptMessage(QueueConsumer<?> sub, QueueEntry entry) { return assignMessage(sub, entry) && entry.acquire(sub); } - private boolean assignMessage(QueueConsumer sub, E entry) + private boolean assignMessage(QueueConsumer<?> sub, QueueEntry entry) { Object groupVal = entry.getMessage().getMessageHeader().getHeader(_groupId); if(groupVal == null) @@ -98,24 +98,24 @@ public class AssignedConsumerMessageGroupManager<E extends QueueEntryImpl<E,Q,L> } } - public E findEarliestAssignedAvailableEntry(QueueConsumer sub) + public QueueEntry findEarliestAssignedAvailableEntry(QueueConsumer<?> sub) { EntryFinder visitor = new EntryFinder(sub); sub.getQueue().visit(visitor); return visitor.getEntry(); } - private class EntryFinder implements QueueEntryVisitor<E> + private class EntryFinder implements QueueEntryVisitor { - private E _entry; - private QueueConsumer _sub; + private QueueEntry _entry; + private QueueConsumer<?> _sub; - public EntryFinder(final QueueConsumer sub) + public EntryFinder(final QueueConsumer<?> sub) { _sub = sub; } - public boolean visit(final E entry) + public boolean visit(final QueueEntry entry) { if(!entry.isAvailable()) { @@ -129,7 +129,7 @@ public class AssignedConsumerMessageGroupManager<E extends QueueEntryImpl<E,Q,L> } Integer group = groupId.hashCode() & _groupMask; - Consumer assignedSub = _groupMap.get(group); + QueueConsumer<?> assignedSub = _groupMap.get(group); if(assignedSub == _sub) { _entry = entry; @@ -141,15 +141,15 @@ public class AssignedConsumerMessageGroupManager<E extends QueueEntryImpl<E,Q,L> } } - public E getEntry() + public QueueEntry getEntry() { return _entry; } } - public void clearAssignments(QueueConsumer sub) + public void clearAssignments(QueueConsumer<?> sub) { - Iterator<QueueConsumer> subIter = _groupMap.values().iterator(); + Iterator<QueueConsumer<?>> subIter = _groupMap.values().iterator(); while(subIter.hasNext()) { if(subIter.next() == sub) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/BaseQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/BaseQueue.java index 4158e51d2f..3bc6cbd625 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/BaseQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/BaseQueue.java @@ -27,9 +27,9 @@ import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.store.TransactionLogResource; import org.apache.qpid.server.util.Action; -public interface BaseQueue<C extends Consumer> extends TransactionLogResource +public interface BaseQueue extends TransactionLogResource { - void enqueue(ServerMessage message, Action<? super MessageInstance<?,C>> action); + void enqueue(ServerMessage message, Action<? super MessageInstance> action); boolean isDurable(); boolean isDeleted(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueue.java index 1ffa404caf..dd5c6ea119 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueue.java @@ -28,7 +28,7 @@ import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.util.MapValueConverter; import org.apache.qpid.server.virtualhost.VirtualHost; -public class ConflationQueue extends AbstractQueue<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList> +public class ConflationQueue extends AbstractQueue { public static final String DEFAULT_LVQ_KEY = "qpid.LVQ_key"; @@ -52,7 +52,7 @@ public class ConflationQueue extends AbstractQueue<ConflationQueueList.Conflatio public String getConflationKey() { - return getEntries().getConflationKey(); + return ((ConflationQueueList)getEntries()).getConflationKey(); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java index a98a4ac144..c234b9cbb3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java @@ -32,17 +32,17 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; -public class ConflationQueueList extends OrderedQueueEntryList<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList> +public class ConflationQueueList extends OrderedQueueEntryList { private static final Logger LOGGER = LoggerFactory.getLogger(ConflationQueueList.class); - private static final HeadCreator<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList> HEAD_CREATOR = new HeadCreator<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList>() + private static final HeadCreator HEAD_CREATOR = new HeadCreator() { @Override - public ConflationQueueEntry createHead(final ConflationQueueList list) + public ConflationQueueEntry createHead(final QueueEntryList list) { - return list.createHead(); + return ((ConflationQueueList)list).createHead(); } }; @@ -75,13 +75,15 @@ public class ConflationQueueList extends OrderedQueueEntryList<ConflationQueueLi return new ConflationQueueEntry(this, message); } + + /** * Updates the list using super.add and also updates {@link #_latestValuesMap} and discards entries as necessary. */ @Override public ConflationQueueEntry add(final ServerMessage message) { - final ConflationQueueEntry addedEntry = super.add(message); + final ConflationQueueEntry addedEntry = (ConflationQueueEntry) super.add(message); final Object keyValue = message.getMessageHeader().getHeader(_conflationKey); if (keyValue != null) @@ -192,7 +194,7 @@ public class ConflationQueueList extends OrderedQueueEntryList<ConflationQueueLi } } - final class ConflationQueueEntry extends OrderedQueueEntry<ConflationQueueEntry, ConflationQueue, ConflationQueueList> + final class ConflationQueueEntry extends OrderedQueueEntry { private AtomicReference<ConflationQueueEntry> _latestValueReference; @@ -252,7 +254,7 @@ public class ConflationQueueList extends OrderedQueueEntryList<ConflationQueueLi return Collections.unmodifiableMap(_latestValuesMap); } - static class Factory implements QueueEntryListFactory<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList> + static class Factory implements QueueEntryListFactory { private final String _conflationKey; @@ -262,9 +264,9 @@ public class ConflationQueueList extends OrderedQueueEntryList<ConflationQueueLi } @Override - public ConflationQueueList createQueueEntryList(final ConflationQueue queue) + public ConflationQueueList createQueueEntryList(final AMQQueue<?> queue) { - return new ConflationQueueList(queue, _conflationKey); + return new ConflationQueueList((ConflationQueue)queue, _conflationKey); } } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefinedGroupMessageGroupManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefinedGroupMessageGroupManager.java index ebf8058584..c64291faec 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefinedGroupMessageGroupManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefinedGroupMessageGroupManager.java @@ -32,22 +32,22 @@ import org.apache.qpid.server.message.ServerMessage; import java.util.HashMap; import java.util.Map; -public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> implements MessageGroupManager<E,Q,L> +public class DefinedGroupMessageGroupManager implements MessageGroupManager { private static final Logger _logger = LoggerFactory.getLogger(DefinedGroupMessageGroupManager.class); private final String _groupId; private final String _defaultGroup; private final Map<Object, Group> _groupMap = new HashMap<Object, Group>(); - private final ConsumerResetHelper<E,Q,L> _resetHelper; + private final ConsumerResetHelper _resetHelper; private final class Group { private final Object _group; - private QueueConsumer<?,E,Q,L> _consumer; + private QueueConsumer<?> _consumer; private int _activeCount; - private Group(final Object key, final QueueConsumer<?,E,Q,L> consumer) + private Group(final Object key, final QueueConsumer<?> consumer) { _group = key; _consumer = consumer; @@ -104,7 +104,7 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q return !(_consumer == null || (_activeCount == 0 && _consumer.isClosed())); } - public QueueConsumer<?,E,Q,L> getConsumer() + public QueueConsumer<?> getConsumer() { return _consumer; } @@ -120,14 +120,14 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q } } - public DefinedGroupMessageGroupManager(final String groupId, String defaultGroup, ConsumerResetHelper<E,Q,L> resetHelper) + public DefinedGroupMessageGroupManager(final String groupId, String defaultGroup, ConsumerResetHelper resetHelper) { _groupId = groupId; _defaultGroup = defaultGroup; _resetHelper = resetHelper; } - public synchronized QueueConsumer<?,E,Q,L> getAssignedConsumer(final E entry) + public synchronized QueueConsumer<?> getAssignedConsumer(final QueueEntry entry) { Object groupId = getKey(entry); @@ -135,12 +135,12 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q return group == null || !group.isValid() ? null : group.getConsumer(); } - public synchronized boolean acceptMessage(final QueueConsumer<?,E,Q,L> sub, final E entry) + public synchronized boolean acceptMessage(final QueueConsumer<?> sub, final QueueEntry entry) { return assignMessage(sub, entry) && entry.acquire(sub); } - private boolean assignMessage(final QueueConsumer<?,E,Q,L> sub, final E entry) + private boolean assignMessage(final QueueConsumer<?> sub, final QueueEntry entry) { Object groupId = getKey(entry); Group group = _groupMap.get(groupId); @@ -173,24 +173,24 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q } } - public synchronized E findEarliestAssignedAvailableEntry(final QueueConsumer<?,E,Q,L> sub) + public synchronized QueueEntry findEarliestAssignedAvailableEntry(final QueueConsumer<?> sub) { EntryFinder visitor = new EntryFinder(sub); sub.getQueue().visit(visitor); return visitor.getEntry(); } - private class EntryFinder implements QueueEntryVisitor<E> + private class EntryFinder implements QueueEntryVisitor { - private E _entry; + private QueueEntry _entry; private QueueConsumer _sub; - public EntryFinder(final QueueConsumer sub) + public EntryFinder(final QueueConsumer<?> sub) { _sub = sub; } - public boolean visit(final E entry) + public boolean visit(final QueueEntry entry) { if(!entry.isAvailable()) { @@ -211,18 +211,18 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q } } - public E getEntry() + public QueueEntry getEntry() { return _entry; } } - public void clearAssignments(final QueueConsumer sub) + public void clearAssignments(final QueueConsumer<?> sub) { } - private Object getKey(E entry) + private Object getKey(QueueEntry entry) { ServerMessage message = entry.getMessage(); AMQMessageHeader messageHeader = message == null ? null : message.getMessageHeader(); @@ -234,7 +234,7 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q return groupVal; } - private class GroupStateChangeListener implements StateChangeListener<MessageInstance<?, ? extends QueueConsumer>, QueueEntry.State> + private class GroupStateChangeListener implements StateChangeListener<MessageInstance, MessageInstance.State> { private final Group _group; @@ -243,7 +243,7 @@ public class DefinedGroupMessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q _group = group; } - public void stateChanged(final MessageInstance<?, ? extends QueueConsumer> entry, + public void stateChanged(final MessageInstance entry, final MessageInstance.State oldState, final MessageInstance.State newState) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/MessageGroupManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/MessageGroupManager.java index 820114f33f..3776bc1f2e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/MessageGroupManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/MessageGroupManager.java @@ -20,20 +20,20 @@ */ package org.apache.qpid.server.queue; -public interface MessageGroupManager<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> +public interface MessageGroupManager { - public interface ConsumerResetHelper<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> + public interface ConsumerResetHelper { - public void resetSubPointersForGroups(QueueConsumer<?,E,Q,L> consumer, boolean clearAssignments); + public void resetSubPointersForGroups(QueueConsumer<?> consumer, boolean clearAssignments); - boolean isEntryAheadOfConsumer(E entry, QueueConsumer<?,E,Q,L> sub); + boolean isEntryAheadOfConsumer(QueueEntry entry, QueueConsumer<?> sub); } - QueueConsumer getAssignedConsumer(E entry); + QueueConsumer getAssignedConsumer(QueueEntry entry); - boolean acceptMessage(QueueConsumer<?,E,Q,L> sub, E entry); + boolean acceptMessage(QueueConsumer<?> sub, QueueEntry entry); - E findEarliestAssignedAvailableEntry(QueueConsumer<?,E,Q,L> sub); + QueueEntry findEarliestAssignedAvailableEntry(QueueConsumer<?> sub); - void clearAssignments(QueueConsumer sub); + void clearAssignments(QueueConsumer<?> sub); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/NotificationCheck.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/NotificationCheck.java index 566cdd0ea5..d3ab8bec32 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/NotificationCheck.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/NotificationCheck.java @@ -1,150 +1,152 @@ -/*
- *
- * 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.server.queue;
-
-import org.apache.log4j.Logger;
-import org.apache.qpid.server.message.ServerMessage;
-
-public enum NotificationCheck
-{
-
- MESSAGE_COUNT_ALERT
- {
- public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, AMQQueue.NotificationListener listener)
- {
- int msgCount;
- final long maximumMessageCount = queue.getMaximumMessageCount();
- if (maximumMessageCount!= 0 && (msgCount = queue.getMessageCount()) >= maximumMessageCount)
- {
- String notificationMsg = msgCount + ": Maximum count on queue threshold ("+ maximumMessageCount +") breached.";
-
- logNotification(this, queue, notificationMsg);
- listener.notifyClients(this, queue, notificationMsg);
- return true;
- }
- return false;
- }
- },
- MESSAGE_SIZE_ALERT(true)
- {
- public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, AMQQueue.NotificationListener listener)
- {
- final long maximumMessageSize = queue.getMaximumMessageSize();
- if(maximumMessageSize != 0)
- {
- // Check for threshold message size
- long messageSize;
- messageSize = (msg == null) ? 0 : msg.getSize();
-
- if (messageSize >= maximumMessageSize)
- {
- String notificationMsg = messageSize + "b : Maximum message size threshold ("+ maximumMessageSize +") breached. [Message ID=" + msg.getMessageNumber() + "]";
-
- logNotification(this, queue, notificationMsg);
- listener.notifyClients(this, queue, notificationMsg);
- return true;
- }
- }
- return false;
- }
-
- },
- QUEUE_DEPTH_ALERT
- {
- public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, AMQQueue.NotificationListener listener)
- {
- // Check for threshold queue depth in bytes
- final long maximumQueueDepth = queue.getMaximumQueueDepth();
-
- if(maximumQueueDepth != 0)
- {
- final long queueDepth = queue.getQueueDepth();
-
- if (queueDepth >= maximumQueueDepth)
- {
- String notificationMsg = (queueDepth>>10) + "Kb : Maximum queue depth threshold ("+(maximumQueueDepth>>10)+"Kb) breached.";
-
- logNotification(this, queue, notificationMsg);
- listener.notifyClients(this, queue, notificationMsg);
- return true;
- }
- }
- return false;
- }
-
- },
- MESSAGE_AGE_ALERT
- {
- public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, AMQQueue.NotificationListener listener)
- {
-
- final long maxMessageAge = queue.getMaximumMessageAge();
- if(maxMessageAge != 0)
- {
- final long currentTime = System.currentTimeMillis();
- final long thresholdTime = currentTime - maxMessageAge;
- final long firstArrivalTime = queue.getOldestMessageArrivalTime();
-
- if(firstArrivalTime < thresholdTime)
- {
- long oldestAge = currentTime - firstArrivalTime;
- String notificationMsg = (oldestAge/1000) + "s : Maximum age on queue threshold ("+(maxMessageAge /1000)+"s) breached.";
-
- logNotification(this, queue, notificationMsg);
- listener.notifyClients(this, queue, notificationMsg);
-
- return true;
- }
- }
- return false;
-
- }
-
- }
- ;
-
- private static final Logger LOGGER = Logger.getLogger(NotificationCheck.class);
-
- private final boolean _messageSpecific;
-
- NotificationCheck()
- {
- this(false);
- }
-
- NotificationCheck(boolean messageSpecific)
- {
- _messageSpecific = messageSpecific;
- }
-
- public boolean isMessageSpecific()
- {
- return _messageSpecific;
- }
-
- public abstract boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, AMQQueue.NotificationListener listener);
-
- //A bit of a hack, only for use until we do the logging listener
- private static void logNotification(NotificationCheck notification, AMQQueue queue, String notificationMsg)
- {
- LOGGER.info(notification.name() + " On Queue " + queue.getName() + " - " + notificationMsg);
- }
-}
+/* + * + * 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.server.queue; + +import org.apache.log4j.Logger; +import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.QueueNotificationListener; + + +public enum NotificationCheck +{ + + MESSAGE_COUNT_ALERT + { + public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, QueueNotificationListener listener) + { + int msgCount; + final long maximumMessageCount = queue.getAlertThresholdQueueDepthMessages(); + if (maximumMessageCount!= 0 && (msgCount = queue.getQueueDepthMessages()) >= maximumMessageCount) + { + String notificationMsg = msgCount + ": Maximum count on queue threshold ("+ maximumMessageCount +") breached."; + + logNotification(this, queue, notificationMsg); + listener.notifyClients(this, queue, notificationMsg); + return true; + } + return false; + } + }, + MESSAGE_SIZE_ALERT(true) + { + public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, QueueNotificationListener listener) + { + final long maximumMessageSize = queue.getAlertThresholdMessageSize(); + if(maximumMessageSize != 0) + { + // Check for threshold message size + long messageSize; + messageSize = (msg == null) ? 0 : msg.getSize(); + + if (messageSize >= maximumMessageSize) + { + String notificationMsg = messageSize + "b : Maximum message size threshold ("+ maximumMessageSize +") breached. [Message ID=" + msg.getMessageNumber() + "]"; + + logNotification(this, queue, notificationMsg); + listener.notifyClients(this, queue, notificationMsg); + return true; + } + } + return false; + } + + }, + QUEUE_DEPTH_ALERT + { + public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, QueueNotificationListener listener) + { + // Check for threshold queue depth in bytes + final long maximumQueueDepth = queue.getAlertThresholdQueueDepthBytes(); + + if(maximumQueueDepth != 0) + { + final long queueDepth = queue.getQueueDepthBytes(); + + if (queueDepth >= maximumQueueDepth) + { + String notificationMsg = (queueDepth>>10) + "Kb : Maximum queue depth threshold ("+(maximumQueueDepth>>10)+"Kb) breached."; + + logNotification(this, queue, notificationMsg); + listener.notifyClients(this, queue, notificationMsg); + return true; + } + } + return false; + } + + }, + MESSAGE_AGE_ALERT + { + public boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, QueueNotificationListener listener) + { + + final long maxMessageAge = queue.getAlertThresholdMessageAge(); + if(maxMessageAge != 0) + { + final long currentTime = System.currentTimeMillis(); + final long thresholdTime = currentTime - maxMessageAge; + final long firstArrivalTime = queue.getOldestMessageArrivalTime(); + + if(firstArrivalTime < thresholdTime) + { + long oldestAge = currentTime - firstArrivalTime; + String notificationMsg = (oldestAge/1000) + "s : Maximum age on queue threshold ("+(maxMessageAge /1000)+"s) breached."; + + logNotification(this, queue, notificationMsg); + listener.notifyClients(this, queue, notificationMsg); + + return true; + } + } + return false; + + } + + } + ; + + private static final Logger LOGGER = Logger.getLogger(NotificationCheck.class); + + private final boolean _messageSpecific; + + NotificationCheck() + { + this(false); + } + + NotificationCheck(boolean messageSpecific) + { + _messageSpecific = messageSpecific; + } + + public boolean isMessageSpecific() + { + return _messageSpecific; + } + + public abstract boolean notifyIfNecessary(ServerMessage<?> msg, AMQQueue queue, QueueNotificationListener listener); + + //A bit of a hack, only for use until we do the logging listener + private static void logNotification(NotificationCheck notification, AMQQueue queue, String notificationMsg) + { + LOGGER.info(notification.name() + " On Queue " + queue.getName() + " - " + notificationMsg); + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntry.java index 7e4ed5401d..6532b1224b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntry.java @@ -24,43 +24,45 @@ import org.apache.qpid.server.message.ServerMessage; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -public abstract class OrderedQueueEntry<E extends OrderedQueueEntry<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends OrderedQueueEntryList<E,Q,L>> extends QueueEntryImpl<E,Q,L> +public abstract class OrderedQueueEntry extends QueueEntryImpl { static final AtomicReferenceFieldUpdater<OrderedQueueEntry, OrderedQueueEntry> _nextUpdater = AtomicReferenceFieldUpdater.newUpdater (OrderedQueueEntry.class, OrderedQueueEntry.class, "_next"); - private volatile E _next; + private volatile OrderedQueueEntry _next; - public OrderedQueueEntry(L queueEntryList) + public OrderedQueueEntry(OrderedQueueEntryList queueEntryList) { super(queueEntryList); } - public OrderedQueueEntry(L queueEntryList, ServerMessage message, final long entryId) + public OrderedQueueEntry(OrderedQueueEntryList queueEntryList, ServerMessage message, final long entryId) { super(queueEntryList, message, entryId); } - public OrderedQueueEntry(L queueEntryList, ServerMessage message) + public OrderedQueueEntry(OrderedQueueEntryList queueEntryList, ServerMessage message) { super(queueEntryList, message); } - public E getNextNode() + @Override + public OrderedQueueEntry getNextNode() { return _next; } - public E getNextValidEntry() + @Override + public OrderedQueueEntry getNextValidEntry() { - E next = getNextNode(); + OrderedQueueEntry next = getNextNode(); while(next != null && next.isDeleted()) { - final E newNext = next.getNextNode(); + final OrderedQueueEntry newNext = next.getNextNode(); if(newNext != null) { OrderedQueueEntryList._nextUpdater.compareAndSet(this,next, newNext); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntryList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntryList.java index a8bf3eecca..47fd5c2fa3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntryList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OrderedQueueEntryList.java @@ -26,13 +26,12 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends OrderedQueueEntryList<E,Q,L>> implements - QueueEntryListBase<E,Q,L> +public abstract class OrderedQueueEntryList implements QueueEntryList { - private final E _head; + private final OrderedQueueEntry _head; - private volatile E _tail; + private volatile OrderedQueueEntry _tail; static final AtomicReferenceFieldUpdater<OrderedQueueEntryList, OrderedQueueEntry> _tailUpdater = @@ -40,27 +39,27 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, (OrderedQueueEntryList.class, OrderedQueueEntry.class, "_tail"); - private final Q _queue; + private final AMQQueue _queue; static final AtomicReferenceFieldUpdater<OrderedQueueEntry, OrderedQueueEntry> _nextUpdater = OrderedQueueEntry._nextUpdater; private AtomicLong _scavenges = new AtomicLong(0L); private final long _scavengeCount = Integer.getInteger("qpid.queue.scavenge_count", 50); - private final AtomicReference<E> _unscavengedHWM = new AtomicReference<E>(); + private final AtomicReference<QueueEntry> _unscavengedHWM = new AtomicReference<QueueEntry>(); - public OrderedQueueEntryList(Q queue, HeadCreator<E,Q,L> headCreator) + public OrderedQueueEntryList(AMQQueue queue, HeadCreator headCreator) { _queue = queue; - _head = headCreator.createHead((L)this); + _head = headCreator.createHead(this); _tail = _head; } void scavenge() { - E hwm = _unscavengedHWM.getAndSet(null); - E next = _head.getNextValidEntry(); + QueueEntry hwm = _unscavengedHWM.getAndSet(null); + QueueEntry next = _head.getNextValidEntry(); if(hwm != null) { @@ -72,15 +71,15 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, } - public Q getQueue() + public AMQQueue getQueue() { return _queue; } - public E add(ServerMessage message) + public QueueEntry add(ServerMessage message) { - E node = createQueueEntry(message); + OrderedQueueEntry node = createQueueEntry(message); for (;;) { OrderedQueueEntry tail = _tail; @@ -105,23 +104,24 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, } } - abstract protected E createQueueEntry(ServerMessage<?> message); + abstract protected OrderedQueueEntry createQueueEntry(ServerMessage<?> message); - public E next(E node) + @Override + public QueueEntry next(QueueEntry node) { return node.getNextValidEntry(); } - public static interface HeadCreator<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> + public static interface HeadCreator { - E createHead(L list); + OrderedQueueEntry createHead(QueueEntryList list); } - public static class QueueEntryIteratorImpl<E extends OrderedQueueEntry<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends OrderedQueueEntryList<E,Q,L>> implements QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> + public static class QueueEntryIteratorImpl implements QueueEntryIterator { - private E _lastNode; + private QueueEntry _lastNode; - QueueEntryIteratorImpl(E startNode) + QueueEntryIteratorImpl(QueueEntry startNode) { _lastNode = startNode; } @@ -131,14 +131,14 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, return _lastNode.getNextValidEntry() == null; } - public E getNode() + public QueueEntry getNode() { return _lastNode; } public boolean advance() { - E nextValidNode = _lastNode.getNextValidEntry(); + QueueEntry nextValidNode = _lastNode.getNextValidEntry(); if(nextValidNode != null) { @@ -149,26 +149,26 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, } } - public QueueEntryIterator<E,Q,L,QueueConsumer<?,E,Q,L>> iterator() + public QueueEntryIterator iterator() { - return new QueueEntryIteratorImpl<E,Q,L>(_head); + return new QueueEntryIteratorImpl(_head); } - public E getHead() + public QueueEntry getHead() { return _head; } - public void entryDeleted(E queueEntry) + public void entryDeleted(QueueEntry queueEntry) { - E next = _head.getNextNode(); - E newNext = _head.getNextValidEntry(); + QueueEntry next = _head.getNextNode(); + QueueEntry newNext = _head.getNextValidEntry(); // the head of the queue has not been deleted, hence the deletion must have been mid queue. if (next == newNext) { - E unscavengedHWM = _unscavengedHWM.get(); + QueueEntry unscavengedHWM = _unscavengedHWM.get(); while(unscavengedHWM == null || unscavengedHWM.compareTo(queueEntry)<0) { _unscavengedHWM.compareAndSet(unscavengedHWM, queueEntry); @@ -182,7 +182,7 @@ public abstract class OrderedQueueEntryList<E extends OrderedQueueEntry<E,Q,L>, } else { - E unscavengedHWM = _unscavengedHWM.get(); + QueueEntry unscavengedHWM = _unscavengedHWM.get(); if(unscavengedHWM != null && (next == null || unscavengedHWM.compareTo(next) < 0)) { _unscavengedHWM.compareAndSet(unscavengedHWM, null); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OutOfOrderQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OutOfOrderQueue.java index 20229ec3ff..d0a001677d 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OutOfOrderQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/OutOfOrderQueue.java @@ -24,30 +24,30 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Map; -public abstract class OutOfOrderQueue<E extends QueueEntryImpl<E,Q,L>, Q extends OutOfOrderQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> extends AbstractQueue<E,Q,L> +public abstract class OutOfOrderQueue extends AbstractQueue { protected OutOfOrderQueue(VirtualHost virtualHost, Map<String, Object> attributes, - QueueEntryListFactory<E, Q, L> entryListFactory) + QueueEntryListFactory entryListFactory) { super(virtualHost, attributes, entryListFactory); } @Override - protected void checkConsumersNotAheadOfDelivery(final E entry) + protected void checkConsumersNotAheadOfDelivery(final QueueEntry entry) { // check that all consumers are not in advance of the entry - QueueConsumerList.ConsumerNodeIterator<E,Q,L> subIter = getConsumerList().iterator(); + QueueConsumerList.ConsumerNodeIterator subIter = getConsumerList().iterator(); while(subIter.advance() && !entry.isAcquired()) { - final QueueConsumer<?,E,Q,L> consumer = subIter.getNode().getConsumer(); + final QueueConsumer<?> consumer = subIter.getNode().getConsumer(); if(!consumer.isClosed()) { - QueueContext<E,Q,L> context = consumer.getQueueContext(); + QueueContext context = consumer.getQueueContext(); if(context != null) { - E released = context.getReleasedEntry(); + QueueEntry released = context.getReleasedEntry(); while(!entry.isAcquired() && (released == null || released.compareTo(entry) > 0)) { if(QueueContext._releasedUpdater.compareAndSet(context,released,entry)) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java index b86d8efe87..c65b0a3060 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java @@ -27,7 +27,7 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Map; -public class PriorityQueue extends OutOfOrderQueue<PriorityQueueList.PriorityQueueEntry, PriorityQueue, PriorityQueueList> +public class PriorityQueue extends OutOfOrderQueue { public static final int DEFAULT_PRIORITY_LEVELS = 10; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java index e877983643..d47b7ce2cd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java @@ -22,23 +22,23 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.message.ServerMessage; -abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQueueList.PriorityQueueEntry, PriorityQueue, PriorityQueueList> +abstract public class PriorityQueueList extends OrderedQueueEntryList { public PriorityQueueList(final PriorityQueue queue, - final HeadCreator<PriorityQueueEntry, PriorityQueue, PriorityQueueList> headCreator) + final HeadCreator headCreator) { super(queue, headCreator); } static class PriorityQueueMasterList extends PriorityQueueList { - private static final HeadCreator<PriorityQueueEntry, PriorityQueue, PriorityQueueList> DUMMY_HEAD_CREATOR = - new HeadCreator<PriorityQueueEntry, PriorityQueue, PriorityQueueList>() + private static final HeadCreator DUMMY_HEAD_CREATOR = + new HeadCreator() { @Override - public PriorityQueueEntry createHead(final PriorityQueueList list) + public PriorityQueueEntry createHead(final QueueEntryList list) { return null; } @@ -66,11 +66,13 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu return _priorities; } + @Override public PriorityQueue getQueue() { return _queue; } + @Override public PriorityQueueEntry add(ServerMessage message) { int index = message.getMessageHeader().getPriority() - _priorityOffset; @@ -82,7 +84,7 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu { index = 0; } - return _priorityLists[index].add(message); + return (PriorityQueueEntry) _priorityLists[index].add(message); } @@ -92,13 +94,14 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu throw new UnsupportedOperationException(); } - public PriorityQueueEntry next(PriorityQueueEntry node) + @Override + public PriorityQueueEntry next(QueueEntry node) { - PriorityQueueEntry next = node.getNextValidEntry(); + PriorityQueueEntry next = (PriorityQueueEntry) node.getNextValidEntry(); if(next == null) { - final PriorityQueueList nodeEntryList = node.getQueueEntryList(); + final PriorityQueueList nodeEntryList = (PriorityQueueList) ((PriorityQueueEntry)node).getQueueEntryList(); int index; for(index = _priorityLists.length-1; _priorityLists[index] != nodeEntryList; index--) { @@ -108,16 +111,16 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu while(next == null && index != 0) { index--; - next = _priorityLists[index].getHead().getNextValidEntry(); + next = (PriorityQueueEntry) _priorityLists[index].getHead().getNextValidEntry(); } } return next; } - private final class PriorityQueueEntryListIterator implements QueueEntryIterator<PriorityQueueEntry, PriorityQueue, PriorityQueueList, QueueConsumer<?,PriorityQueueEntry, PriorityQueue, PriorityQueueList>> + private final class PriorityQueueEntryListIterator implements QueueEntryIterator { - private final QueueEntryIterator<PriorityQueueEntry, PriorityQueue, PriorityQueueList,QueueConsumer<?,PriorityQueueEntry, PriorityQueue, PriorityQueueList>>[] _iterators = new QueueEntryIterator[ _priorityLists.length ]; + private final QueueEntryIterator[] _iterators = new QueueEntryIterator[ _priorityLists.length ]; private PriorityQueueEntry _lastNode; PriorityQueueEntryListIterator() @@ -126,10 +129,10 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu { _iterators[i] = _priorityLists[i].iterator(); } - _lastNode = _iterators[_iterators.length - 1].getNode(); + _lastNode = (PriorityQueueEntry) _iterators[_iterators.length - 1].getNode(); } - + @Override public boolean atTail() { for(int i = 0; i < _iterators.length; i++) @@ -142,18 +145,20 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu return true; } + @Override public PriorityQueueEntry getNode() { return _lastNode; } + @Override public boolean advance() { for(int i = _iterators.length-1; i >= 0; i--) { if(_iterators[i].advance()) { - _lastNode = _iterators[i].getNode(); + _lastNode = (PriorityQueueEntry) _iterators[i].getNode(); return true; } } @@ -161,23 +166,26 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu } } + @Override public PriorityQueueEntryListIterator iterator() { return new PriorityQueueEntryListIterator(); } + @Override public PriorityQueueEntry getHead() { - return _priorityLists[_priorities-1].getHead(); + return (PriorityQueueEntry) _priorityLists[_priorities-1].getHead(); } - public void entryDeleted(final PriorityQueueEntry queueEntry) + @Override + public void entryDeleted(final QueueEntry queueEntry) { } } - static class Factory implements QueueEntryListFactory<PriorityQueueEntry, PriorityQueue, PriorityQueueList> + static class Factory implements QueueEntryListFactory { private final int _priorities; @@ -186,20 +194,20 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu _priorities = priorities; } - public PriorityQueueList createQueueEntryList(PriorityQueue queue) + public PriorityQueueList createQueueEntryList(AMQQueue<?> queue) { - return new PriorityQueueMasterList(queue, _priorities); + return new PriorityQueueMasterList((PriorityQueue) queue, _priorities); } } static class PriorityQueueEntrySubList extends PriorityQueueList { - private static final HeadCreator<PriorityQueueEntry, PriorityQueue, PriorityQueueList> HEAD_CREATOR = new HeadCreator<PriorityQueueEntry, PriorityQueue, PriorityQueueList>() + private static final HeadCreator HEAD_CREATOR = new HeadCreator() { @Override - public PriorityQueueEntry createHead(final PriorityQueueList list) + public PriorityQueueEntry createHead(final QueueEntryList list) { - return new PriorityQueueEntry(list); + return new PriorityQueueEntry((PriorityQueueList) list); } }; private int _listPriority; @@ -222,7 +230,7 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu } } - static class PriorityQueueEntry extends OrderedQueueEntry<PriorityQueueEntry, PriorityQueue, PriorityQueueList> + static class PriorityQueueEntry extends OrderedQueueEntry { private PriorityQueueEntry(final PriorityQueueList queueEntryList) { @@ -235,9 +243,10 @@ abstract public class PriorityQueueList extends OrderedQueueEntryList<PriorityQu } @Override - public int compareTo(final PriorityQueueEntry o) + public int compareTo(final QueueEntry o) { - PriorityQueueEntrySubList pqel = (PriorityQueueEntrySubList)o.getQueueEntryList(); + PriorityQueueEntry other = (PriorityQueueEntry)o; + PriorityQueueEntrySubList pqel = (PriorityQueueEntrySubList)other.getQueueEntryList(); int otherPriority = pqel.getListPriority(); int thisPriority = ((PriorityQueueEntrySubList) getQueueEntryList()).getListPriority(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumer.java index b2f473f9ff..660d4ec5d6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumer.java @@ -24,37 +24,30 @@ import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.message.MessageInstance; -interface QueueConsumer<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> extends Consumer +public interface QueueConsumer<X extends QueueConsumer<X>> extends Consumer, org.apache.qpid.server.model.Consumer<X> { void flushBatched(); void queueEmpty(); - boolean hasInterest(E node); + boolean hasInterest(QueueEntry node); - boolean wouldSuspend(E entry); + boolean wouldSuspend(QueueEntry entry); - void restoreCredit(E entry); + void restoreCredit(QueueEntry entry); - void send(E entry, boolean batch); + void send(QueueEntry entry, boolean batch); void queueDeleted(); SubFlushRunner getRunner(); - Q getQueue(); + AMQQueue getQueue(); - boolean resend(E e); + boolean resend(QueueEntry e); - public static enum State - { - ACTIVE, - SUSPENDED, - CLOSED - } + MessageInstance.ConsumerAcquiredState<X> getOwningState(); - MessageInstance.ConsumerAcquiredState<QueueConsumer<T,E,Q,L>> getOwningState(); - - QueueContext<E,Q,L> getQueueContext(); + QueueContext getQueueContext(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java index ae30e53e9a..f0a8f239a8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java @@ -31,14 +31,23 @@ import org.apache.qpid.server.logging.subjects.QueueLogSubject; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Consumer; +import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.protocol.MessageConverterRegistry; import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.util.StateChangeListener; +import java.security.AccessControlException; import java.text.MessageFormat; +import java.util.Collection; +import java.util.Collections; import java.util.EnumMap; import java.util.EnumSet; +import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; @@ -46,17 +55,19 @@ import java.util.concurrent.locks.ReentrantLock; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.SUBSCRIPTION_FORMAT; -class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> implements QueueConsumer<T,E,Q,L> +class QueueConsumerImpl + extends AbstractConfiguredObject<QueueConsumerImpl> + implements QueueConsumer<QueueConsumerImpl> { private static final Logger _logger = Logger.getLogger(QueueConsumerImpl.class); private final AtomicBoolean _targetClosed = new AtomicBoolean(false); private final AtomicBoolean _closed = new AtomicBoolean(false); - private final long _id; + private final long _consumerNumber; private final Lock _stateChangeLock = new ReentrantLock(); private final long _createTime = System.currentTimeMillis(); - private final MessageInstance.ConsumerAcquiredState<QueueConsumer<T,E,Q,L>> _owningState = new MessageInstance.ConsumerAcquiredState<QueueConsumer<T,E,Q,L>>(this); + private final MessageInstance.ConsumerAcquiredState<QueueConsumerImpl> _owningState = new MessageInstance.ConsumerAcquiredState<QueueConsumerImpl>(this); private final boolean _acquires; private final boolean _seesRequeues; private final String _consumerName; @@ -66,8 +77,9 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L private final FilterManager _filters; private final Class<? extends ServerMessage> _messageClass; private final Object _sessionReference; - private final Q _queue; - private GenericActor _logActor = new GenericActor("[" + MessageFormat.format(SUBSCRIPTION_FORMAT, getId()) + private final AbstractQueue _queue; + private final boolean _exclusive; + private GenericActor _logActor = new GenericActor("[" + MessageFormat.format(SUBSCRIPTION_FORMAT, getConsumerNumber()) + "(UNKNOWN)" + "] "); @@ -77,14 +89,14 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L static { STATE_MAP.put(ConsumerTarget.State.ACTIVE, State.ACTIVE); - STATE_MAP.put(ConsumerTarget.State.SUSPENDED, State.SUSPENDED); - STATE_MAP.put(ConsumerTarget.State.CLOSED, State.CLOSED); + STATE_MAP.put(ConsumerTarget.State.SUSPENDED, State.QUIESCED); + STATE_MAP.put(ConsumerTarget.State.CLOSED, State.DELETED); } - private final T _target; + private final ConsumerTarget _target; private final SubFlushRunner _runner = new SubFlushRunner(this); - private volatile QueueContext<E,Q,L> _queueContext; - private StateChangeListener<? super QueueConsumerImpl<T,E,Q,L>, State> _stateListener = new StateChangeListener<QueueConsumerImpl<T,E,Q,L>, State>() + private volatile QueueContext _queueContext; + private StateChangeListener<? super QueueConsumerImpl, State> _stateListener = new StateChangeListener<QueueConsumerImpl, State>() { public void stateChanged(QueueConsumerImpl sub, State oldState, State newState) { @@ -93,16 +105,18 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L }; private final boolean _noLocal; - QueueConsumerImpl(final Q queue, - T target, final String consumerName, + QueueConsumerImpl(final AbstractQueue queue, + ConsumerTarget target, final String consumerName, final FilterManager filters, final Class<? extends ServerMessage> messageClass, EnumSet<Option> optionSet) { - + super(UUID.randomUUID(), Collections.<String,Object>emptyMap(), + Collections.<String,Object>emptyMap(), + queue.getVirtualHost().getTaskExecutor()); _messageClass = messageClass; _sessionReference = target.getSessionModel().getConnectionReference(); - _id = SUB_ID_GENERATOR.getAndIncrement(); + _consumerNumber = CONSUMER_NUMBER_GENERATOR.getAndIncrement(); _filters = filters; _acquires = optionSet.contains(Option.ACQUIRES); _seesRequeues = optionSet.contains(Option.SEES_REQUEUES); @@ -111,6 +125,7 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L _target = target; _queue = queue; _noLocal = optionSet.contains(Option.NO_LOCAL); + _exclusive = optionSet.contains(Option.EXCLUSIVE); setupLogging(optionSet.contains(Option.EXCLUSIVE)); // Access control @@ -151,14 +166,14 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L { close(); } - final StateChangeListener<? super QueueConsumerImpl<T,E,Q,L>, State> stateListener = getStateListener(); + final StateChangeListener<? super QueueConsumerImpl, State> stateListener = getStateListener(); if(stateListener != null) { stateListener.stateChanged(this, STATE_MAP.get(oldState), STATE_MAP.get(newState)); } } - public T getTarget() + public ConsumerTarget getTarget() { return _target; } @@ -166,7 +181,7 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L @Override public void externalStateChange() { - getQueue().deliverAsync(this); + _queue.deliverAsync(this); } @Override @@ -229,12 +244,12 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L _target.queueDeleted(); } - public boolean wouldSuspend(final E msg) + public boolean wouldSuspend(final QueueEntry msg) { return !_target.allocateCredit(msg.getMessage()); } - public void restoreCredit(final E queueEntry) + public void restoreCredit(final QueueEntry queueEntry) { _target.restoreCredit(queueEntry.getMessage()); } @@ -244,12 +259,12 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L _target.queueEmpty(); } - State getState() + public State getState() { return STATE_MAP.get(_target.getState()); } - public final Q getQueue() + public final AMQQueue getQueue() { return _queue; } @@ -258,7 +273,7 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L { String queueString = new QueueLogSubject(_queue).toLogString(); - _logActor = new GenericActor("[" + MessageFormat.format(SUBSCRIPTION_FORMAT, getId()) + _logActor = new GenericActor("[" + MessageFormat.format(SUBSCRIPTION_FORMAT, getConsumerNumber()) + "(" // queueString is [vh(/{0})/qu({1}) ] so need to trim // ^ ^^ @@ -289,10 +304,10 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L @Override public final void flush() { - getQueue().flushConsumer(this); + _queue.flushConsumer(this); } - public boolean resend(final E entry) + public boolean resend(final QueueEntry entry) { return getQueue().resend(entry, this); } @@ -302,27 +317,27 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L return _runner; } - public final long getId() + public final long getConsumerNumber() { - return _id; + return _consumerNumber; } - public final StateChangeListener<? super QueueConsumerImpl<T,E,Q,L>, State> getStateListener() + public final StateChangeListener<? super QueueConsumerImpl, State> getStateListener() { return _stateListener; } - public final void setStateListener(StateChangeListener<? super QueueConsumerImpl<T,E,Q,L>, State> listener) + public final void setStateListener(StateChangeListener<? super QueueConsumerImpl, State> listener) { _stateListener = listener; } - public final QueueContext<E,Q,L> getQueueContext() + public final QueueContext getQueueContext() { return _queueContext; } - final void setQueueContext(QueueContext<E,Q,L> queueContext) + final void setQueueContext(QueueContext queueContext) { _queueContext = queueContext; } @@ -334,10 +349,10 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L public final boolean isClosed() { - return getState() == State.CLOSED; + return getState() == State.DELETED; } - public final boolean hasInterest(E entry) + public final boolean hasInterest(QueueEntry entry) { //check that the message hasn't been rejected if (entry.isRejectedBy(this)) @@ -412,7 +427,7 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L return _createTime; } - public final MessageInstance.ConsumerAcquiredState<QueueConsumer<T,E,Q,L>> getOwningState() + public final MessageInstance.ConsumerAcquiredState<QueueConsumerImpl> getOwningState() { return _owningState; } @@ -447,11 +462,126 @@ class QueueConsumerImpl<T extends ConsumerTarget, E extends QueueEntryImpl<E,Q,L return _deliveredCount.longValue(); } - public final void send(final E entry, final boolean batch) + public final void send(final QueueEntry entry, final boolean batch) { _deliveredCount.incrementAndGet(); ServerMessage message = entry.getMessage(); _deliveredBytes.addAndGet(message.getSize()); _target.send(entry, batch); } + + @Override + protected boolean setState(final State currentState, final State desiredState) + { + return false; + } + + @Override + public String getDistributionMode() + { + return acquires() ? "MOVE" : "COPY"; + } + + @Override + public String getSettlementMode() + { + return null; + } + + @Override + public boolean isExclusive() + { + return _exclusive; + } + + @Override + public boolean isNoLocal() + { + return isNoLocal(); + } + + @Override + public String getSelector() + { + return null; + } + + @Override + public String setName(final String currentName, final String desiredName) + throws IllegalStateException, AccessControlException + { + return null; + } + + @Override + public boolean isDurable() + { + return false; + } + + @Override + public void setDurable(final boolean durable) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + + } + + @Override + public LifetimePolicy getLifetimePolicy() + { + return LifetimePolicy.DELETE_ON_SESSION_END; + } + + @Override + public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired) + throws IllegalStateException, AccessControlException, IllegalArgumentException + { + return null; + } + + @Override + public <C extends ConfiguredObject> Collection<C> getChildren(final Class<C> clazz) + { + return Collections.<C>emptyList(); + } + + @Override + public Object getAttribute(final String name) + { + if(ID.equals(name)) + { + return getId(); + } + else if(NAME.equals(name)) + { + return getName(); + } + else if(DURABLE.equals(name)) + { + return isDurable(); + } + else if(DISTRIBUTION_MODE.equals(name)) + { + return getDistributionMode(); + } + else if(SETTLEMENT_MODE.equals(name)) + { + return getSettlementMode(); + } + else if(LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + else if(EXCLUSIVE.equals(name)) + { + return isExclusive(); + } + return super.getAttribute(name); + } + + @Override + public Collection<String> getAttributeNames() + { + return getAttributeNames(getClass()); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerList.java index 1f1320cfd2..4c54d6e9cf 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerList.java @@ -24,19 +24,19 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E, Q,L>, L extends QueueEntryListBase<E,Q,L>> +class QueueConsumerList { - private final ConsumerNode<E,Q,L> _head = new ConsumerNode<E,Q,L>(); + private final ConsumerNode _head = new ConsumerNode(); - private final AtomicReference<ConsumerNode<E,Q,L>> _tail = new AtomicReference<ConsumerNode<E,Q,L>>(_head); - private final AtomicReference<ConsumerNode<E,Q,L>> _subNodeMarker = new AtomicReference<ConsumerNode<E,Q,L>>(_head); + private final AtomicReference<ConsumerNode> _tail = new AtomicReference<ConsumerNode>(_head); + private final AtomicReference<ConsumerNode> _subNodeMarker = new AtomicReference<ConsumerNode>(_head); private final AtomicInteger _size = new AtomicInteger(); - public static final class ConsumerNode<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E, Q,L>, L extends QueueEntryListBase<E,Q,L>> + public static final class ConsumerNode { private final AtomicBoolean _deleted = new AtomicBoolean(); - private final AtomicReference<ConsumerNode<E,Q,L>> _next = new AtomicReference<ConsumerNode<E,Q,L>>(); - private final QueueConsumer<?,E,Q,L> _sub; + private final AtomicReference<ConsumerNode> _next = new AtomicReference<ConsumerNode>(); + private final QueueConsumer<?> _sub; public ConsumerNode() { @@ -45,7 +45,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue _deleted.set(true); } - public ConsumerNode(final QueueConsumer<?,E,Q,L> sub) + public ConsumerNode(final QueueConsumer<?> sub) { //used for regular node construction _sub = sub; @@ -57,12 +57,12 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue * * @return the next non-deleted node, or null if none was found. */ - public ConsumerNode<E,Q,L> findNext() + public ConsumerNode findNext() { - ConsumerNode<E,Q,L> next = nextNode(); + ConsumerNode next = nextNode(); while(next != null && next.isDeleted()) { - final ConsumerNode<E,Q,L> newNext = next.nextNode(); + final ConsumerNode newNext = next.nextNode(); if(newNext != null) { //try to move our _next reference forward to the 'newNext' @@ -86,7 +86,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue * * @return the immediately next node in the structure, or null if at the tail. */ - protected ConsumerNode<E,Q,L> nextNode() + protected ConsumerNode nextNode() { return _next.get(); } @@ -97,7 +97,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue * @param node the ConsumerNode to set as 'next' * @return whether the operation succeeded */ - private boolean setNext(final ConsumerNode<E,Q,L> node) + private boolean setNext(final ConsumerNode node) { return _next.compareAndSet(null, node); } @@ -112,18 +112,18 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue return _deleted.compareAndSet(false,true); } - public QueueConsumer<?,E,Q,L> getConsumer() + public QueueConsumer<?> getConsumer() { return _sub; } } - private void insert(final ConsumerNode<E,Q,L> node, final boolean count) + private void insert(final ConsumerNode node, final boolean count) { for (;;) { - ConsumerNode<E,Q,L> tail = _tail.get(); - ConsumerNode<E,Q,L> next = tail.nextNode(); + ConsumerNode tail = _tail.get(); + ConsumerNode next = tail.nextNode(); if (tail == _tail.get()) { if (next == null) @@ -146,16 +146,16 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue } } - public void add(final QueueConsumer<?,E,Q,L> sub) + public void add(final QueueConsumer<?> sub) { - ConsumerNode<E,Q,L> node = new ConsumerNode<E,Q,L>(sub); + ConsumerNode node = new ConsumerNode(sub); insert(node, true); } - public boolean remove(final QueueConsumer<?, E,Q,L> sub) + public boolean remove(final QueueConsumer<?> sub) { - ConsumerNode<E,Q,L> prevNode = _head; - ConsumerNode<E,Q,L> node = _head.nextNode(); + ConsumerNode prevNode = _head; + ConsumerNode node = _head.nextNode(); while(node != null) { @@ -170,7 +170,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue //correctness reasons, however we have just 'deleted' //the tail. Inserting an empty dummy node after it will //let us scavenge the node containing the Consumer. - insert(new ConsumerNode<E,Q,L>(), false); + insert(new ConsumerNode(), false); } //advance the next node reference in the 'prevNode' to scavenge @@ -189,9 +189,9 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue return false; } - private void nodeMarkerCleanup(final ConsumerNode<E,Q,L> node) + private void nodeMarkerCleanup(final ConsumerNode node) { - ConsumerNode<E,Q,L> markedNode = _subNodeMarker.get(); + ConsumerNode markedNode = _subNodeMarker.get(); if(node == markedNode) { //if the marked node is the one we are removing, then @@ -200,7 +200,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue //into the list and find the next node to use. //Because we inserted a dummy if node was the //tail, markedNode.nextNode() can never be null. - ConsumerNode<E,Q,L> dummy = new ConsumerNode<E,Q,L>(); + ConsumerNode dummy = new ConsumerNode(); dummy.setNext(markedNode.nextNode()); //if the CAS fails the marked node has changed, thus @@ -219,7 +219,7 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue } } - public boolean updateMarkedNode(final ConsumerNode<E,Q,L> expected, final ConsumerNode<E,Q,L> nextNode) + public boolean updateMarkedNode(final ConsumerNode expected, final ConsumerNode nextNode) { return _subNodeMarker.compareAndSet(expected, nextNode); } @@ -231,41 +231,41 @@ class QueueConsumerList<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue * * @return the previously marked node (or a dummy if it was subsequently deleted) */ - public ConsumerNode<E,Q,L> getMarkedNode() + public ConsumerNode getMarkedNode() { return _subNodeMarker.get(); } - public static class ConsumerNodeIterator<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E, Q,L>, L extends QueueEntryListBase<E,Q,L>> + public static class ConsumerNodeIterator { - private ConsumerNode<E,Q,L> _lastNode; + private ConsumerNode _lastNode; - ConsumerNodeIterator(ConsumerNode<E,Q,L> startNode) + ConsumerNodeIterator(ConsumerNode startNode) { _lastNode = startNode; } - public ConsumerNode<E,Q,L> getNode() + public ConsumerNode getNode() { return _lastNode; } public boolean advance() { - ConsumerNode<E,Q,L> nextNode = _lastNode.findNext(); + ConsumerNode nextNode = _lastNode.findNext(); _lastNode = nextNode; return _lastNode != null; } } - public ConsumerNodeIterator<E,Q,L> iterator() + public ConsumerNodeIterator iterator() { - return new ConsumerNodeIterator<E,Q,L>(_head); + return new ConsumerNodeIterator(_head); } - public ConsumerNode<E,Q,L> getHead() + public ConsumerNode getHead() { return _head; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueContext.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueContext.java index 45673aa555..861bd3dea1 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueContext.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueContext.java @@ -23,32 +23,32 @@ package org.apache.qpid.server.queue; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -final class QueueContext<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> +final class QueueContext { - private volatile E _lastSeenEntry; - private volatile E _releasedEntry; + private volatile QueueEntry _lastSeenEntry; + private volatile QueueEntry _releasedEntry; - static final AtomicReferenceFieldUpdater<QueueContext, QueueEntryImpl> + static final AtomicReferenceFieldUpdater<QueueContext, QueueEntry> _lastSeenUpdater = AtomicReferenceFieldUpdater.newUpdater - (QueueContext.class, QueueEntryImpl.class, "_lastSeenEntry"); - static final AtomicReferenceFieldUpdater<QueueContext, QueueEntryImpl> + (QueueContext.class, QueueEntry.class, "_lastSeenEntry"); + static final AtomicReferenceFieldUpdater<QueueContext, QueueEntry> _releasedUpdater = AtomicReferenceFieldUpdater.newUpdater - (QueueContext.class, QueueEntryImpl.class, "_releasedEntry"); + (QueueContext.class, QueueEntry.class, "_releasedEntry"); - public QueueContext(E head) + public QueueContext(QueueEntry head) { _lastSeenEntry = head; } - public E getLastSeenEntry() + public QueueEntry getLastSeenEntry() { return _lastSeenEntry; } - E getReleasedEntry() + QueueEntry getReleasedEntry() { return _releasedEntry; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java index 9a49cd6088..1e7c8030c1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java @@ -23,18 +23,18 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.message.MessageInstance; -public interface QueueEntry<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, C extends Consumer> extends MessageInstance<E,C>, Comparable<E> +public interface QueueEntry extends MessageInstance, Comparable<QueueEntry> { - Q getQueue(); + AMQQueue getQueue(); long getSize(); boolean isQueueDeleted(); - E getNextNode(); + QueueEntry getNextNode(); - E getNextValidEntry(); + QueueEntry getNextValidEntry(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java index 5407985cd8..9814431beb 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java @@ -22,7 +22,7 @@ package org.apache.qpid.server.queue; import org.apache.log4j.Logger; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageInstance; @@ -43,11 +43,11 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicLongFieldUpdater; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> implements QueueEntry<E,Q,QueueConsumer<?,E,Q,L>> +public abstract class QueueEntryImpl implements QueueEntry { private static final Logger _log = Logger.getLogger(QueueEntryImpl.class); - private final L _queueEntryList; + private final QueueEntryList _queueEntryList; private final MessageReference _message; @@ -62,7 +62,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends (QueueEntryImpl.class, EntryState.class, "_state"); - private volatile Set<StateChangeListener<? super E, State>> _stateChangeListeners; + private volatile Set<StateChangeListener<? super QueueEntry, State>> _stateChangeListeners; private static final AtomicReferenceFieldUpdater<QueueEntryImpl, Set> @@ -89,14 +89,14 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends private boolean _deliveredToConsumer; - public QueueEntryImpl(L queueEntryList) + public QueueEntryImpl(QueueEntryList queueEntryList) { this(queueEntryList,null,Long.MIN_VALUE); _state = DELETED_STATE; } - public QueueEntryImpl(L queueEntryList, ServerMessage message, final long entryId) + public QueueEntryImpl(QueueEntryList queueEntryList, ServerMessage message, final long entryId) { _queueEntryList = queueEntryList; @@ -106,7 +106,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends populateInstanceProperties(); } - public QueueEntryImpl(L queueEntryList, ServerMessage message) + public QueueEntryImpl(QueueEntryList queueEntryList, ServerMessage message) { _queueEntryList = queueEntryList; _message = message == null ? null : message.newReference(); @@ -137,7 +137,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends return _entryId; } - public Q getQueue() + public AMQQueue getQueue() { return _queueEntryList.getQueue(); } @@ -201,9 +201,9 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends return acquired; } - public boolean acquire(QueueConsumer<?,E,Q,L> sub) + public boolean acquire(Consumer sub) { - final boolean acquired = acquire(sub.getOwningState()); + final boolean acquired = acquire(((QueueConsumer<?>)sub).getOwningState()); if(acquired) { _deliveredToConsumer = true; @@ -217,7 +217,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends return (_state instanceof ConsumerAcquiredState); } - public boolean isAcquiredBy(QueueConsumer consumer) + public boolean isAcquiredBy(Consumer consumer) { EntryState state = _state; return state instanceof ConsumerAcquiredState @@ -233,12 +233,12 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends if(state instanceof ConsumerAcquiredState) { - getQueue().decrementUnackedMsgCount((E) this); + getQueue().decrementUnackedMsgCount(this); } if(!getQueue().isDeleted()) { - getQueue().requeue((E)this); + getQueue().requeue(this); if(_stateChangeListeners != null) { notifyStateChange(QueueEntry.State.ACQUIRED, QueueEntry.State.AVAILABLE); @@ -287,7 +287,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends _rejectedBy = new HashSet<Long>(); } - _rejectedBy.add(consumer.getId()); + _rejectedBy.add(consumer.getConsumerNumber()); } else { @@ -295,12 +295,12 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends } } - public boolean isRejectedBy(QueueConsumer consumer) + public boolean isRejectedBy(Consumer consumer) { if (_rejectedBy != null) // We have consumers that rejected this message { - return _rejectedBy.contains(consumer.getId()); + return _rejectedBy.contains(consumer.getConsumerNumber()); } else // This message hasn't been rejected yet. { @@ -316,10 +316,10 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends { if (state instanceof ConsumerAcquiredState) { - getQueue().decrementUnackedMsgCount((E) this); + getQueue().decrementUnackedMsgCount(this); } - getQueue().dequeue((E)this); + getQueue().dequeue(this); if(_stateChangeListeners != null) { notifyStateChange(state.getState() , QueueEntry.State.DEQUEUED); @@ -331,9 +331,9 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends private void notifyStateChange(final State oldState, final State newState) { - for(StateChangeListener<? super E, State> l : _stateChangeListeners) + for(StateChangeListener<? super QueueEntry, State> l : _stateChangeListeners) { - l.stateChanged((E)this, oldState, newState); + l.stateChanged(this, oldState, newState); } } @@ -343,7 +343,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends if(state != DELETED_STATE && _stateUpdater.compareAndSet(this,state,DELETED_STATE)) { - _queueEntryList.entryDeleted((E)this); + _queueEntryList.entryDeleted(this); onDelete(); _message.release(); @@ -362,10 +362,10 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends dispose(); } - public int routeToAlternate(final Action<? super MessageInstance<?, ? extends Consumer>> action, ServerTransaction txn) + public int routeToAlternate(final Action<? super MessageInstance> action, ServerTransaction txn) { final AMQQueue currentQueue = getQueue(); - Exchange alternateExchange = currentQueue.getAlternateExchange(); + ExchangeImpl alternateExchange = currentQueue.getAlternateExchange(); boolean autocommit = txn == null; int enqueues; @@ -412,21 +412,21 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends return getQueue().isDeleted(); } - public void addStateChangeListener(StateChangeListener<? super E,State> listener) + public void addStateChangeListener(StateChangeListener<? super MessageInstance,State> listener) { - Set<StateChangeListener<? super E, State>> listeners = _stateChangeListeners; + Set<StateChangeListener<? super QueueEntry, State>> listeners = _stateChangeListeners; if(listeners == null) { - _listenersUpdater.compareAndSet(this, null, new CopyOnWriteArraySet<StateChangeListener<? super E, State>>()); + _listenersUpdater.compareAndSet(this, null, new CopyOnWriteArraySet<StateChangeListener<? super QueueEntry, State>>()); listeners = _stateChangeListeners; } listeners.add(listener); } - public boolean removeStateChangeListener(StateChangeListener<? super E, State> listener) + public boolean removeStateChangeListener(StateChangeListener<? super MessageInstance, State> listener) { - Set<StateChangeListener<? super E, State>> listeners = _stateChangeListeners; + Set<StateChangeListener<? super QueueEntry, State>> listeners = _stateChangeListeners; if(listeners != null) { return listeners.remove(listener); @@ -436,9 +436,13 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends } - public int compareTo(final E o) + public int compareTo(final QueueEntry o) { - E other = o; + if(o == null) + { + return 1; + } + QueueEntryImpl other = (QueueEntryImpl)o; return getEntryId() > other.getEntryId() ? 1 : getEntryId() < other.getEntryId() ? -1 : 0; } @@ -446,7 +450,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends { } - public L getQueueEntryList() + public QueueEntryList getQueueEntryList() { return _queueEntryList; } @@ -464,7 +468,7 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends @Override public int getMaximumDeliveryCount() { - return getQueue().getMaximumDeliveryCount(); + return getQueue().getMaximumDeliveryAttempts(); } public void incrementDeliveryCount() @@ -494,10 +498,10 @@ public abstract class QueueEntryImpl<E extends QueueEntryImpl<E,Q,L>, Q extends @Override public boolean resend() { - QueueConsumer<?,E,Q,L> sub = getDeliveredConsumer(); + QueueConsumer sub = getDeliveredConsumer(); if(sub != null) { - return sub.resend((E)this); + return sub.resend(this); } return false; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryIterator.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryIterator.java index 72502feb3d..c5c115a2d1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryIterator.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryIterator.java @@ -20,13 +20,11 @@ */ package org.apache.qpid.server.queue; -import org.apache.qpid.server.consumer.Consumer; - -public interface QueueEntryIterator<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, L extends QueueEntryList<E,Q,L,C>, C extends Consumer> +public interface QueueEntryIterator { boolean atTail(); - E getNode(); + QueueEntry getNode(); boolean advance(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryList.java index a49320e9d6..070b1990a6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryList.java @@ -23,19 +23,19 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.message.ServerMessage; -public interface QueueEntryList<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, L extends QueueEntryList<E,Q,L,C>, C extends Consumer> +public interface QueueEntryList { - Q getQueue(); + AMQQueue getQueue(); - E add(ServerMessage message); + QueueEntry add(ServerMessage message); - E next(E node); + QueueEntry next(QueueEntry node); - QueueEntryIterator<E,Q,L,C> iterator(); + QueueEntryIterator iterator(); - E getHead(); + QueueEntry getHead(); - void entryDeleted(E queueEntry); + void entryDeleted(QueueEntry queueEntry); int getPriorities(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListBase.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListBase.java index f997e7383f..d2aff534c9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListBase.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListBase.java @@ -20,6 +20,6 @@ */ package org.apache.qpid.server.queue; -public interface QueueEntryListBase<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> extends QueueEntryList<E,Q,L,QueueConsumer<?,E,Q,L>> +public interface QueueEntryListBase extends QueueEntryList { } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListFactory.java index 6e66fd2905..3f701f652e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryListFactory.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.queue; -interface QueueEntryListFactory<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> +interface QueueEntryListFactory { - public L createQueueEntryList(Q queue); + public QueueEntryList createQueueEntryList(AMQQueue<?> queue); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryVisitor.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryVisitor.java index e6b5ac5611..9ecaf6dafd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryVisitor.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryVisitor.java @@ -16,9 +16,7 @@ */ package org.apache.qpid.server.queue; -import org.apache.qpid.server.consumer.Consumer; - -public interface QueueEntryVisitor<E extends QueueEntry> +public interface QueueEntryVisitor { - boolean visit(E entry); + boolean visit(QueueEntry entry); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java index cba992f347..899c556ec7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java @@ -28,7 +28,7 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Map; -public class SortedQueue extends OutOfOrderQueue<SortedQueueEntry, SortedQueue, SortedQueueEntryList> +public class SortedQueue extends OutOfOrderQueue { //Lock object to synchronize enqueue. Used instead of the object //monitor to prevent lock order issues with consumer sendLocks @@ -38,7 +38,7 @@ public class SortedQueue extends OutOfOrderQueue<SortedQueueEntry, SortedQueue, protected SortedQueue(VirtualHost virtualHost, Map<String, Object> attributes, - QueueEntryListFactory<SortedQueueEntry, SortedQueue, SortedQueueEntryList> factory) + QueueEntryListFactory factory) { super(virtualHost, attributes, factory); _sortedPropertyName = MapValueConverter.getStringAttribute(Queue.SORT_KEY,attributes); @@ -62,7 +62,7 @@ public class SortedQueue extends OutOfOrderQueue<SortedQueueEntry, SortedQueue, @Override public void enqueue(final ServerMessage message, - final Action<? super MessageInstance<?, QueueConsumer<?, SortedQueueEntry, SortedQueue, SortedQueueEntryList>>> action) + final Action<? super MessageInstance> action) { synchronized (_sortedQueueLock) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntry.java index 30d58138fb..433005a857 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntry.java @@ -24,7 +24,7 @@ import org.apache.qpid.server.message.ServerMessage; /** * An implementation of QueueEntryImpl to be used in SortedQueueEntryList. */ -public class SortedQueueEntry extends QueueEntryImpl<SortedQueueEntry, SortedQueue, SortedQueueEntryList> +public class SortedQueueEntry extends QueueEntryImpl { public static enum Colour { @@ -52,8 +52,9 @@ public class SortedQueueEntry extends QueueEntryImpl<SortedQueueEntry, SortedQue } @Override - public int compareTo(final SortedQueueEntry o) + public int compareTo(final QueueEntry other) { + SortedQueueEntry o = (SortedQueueEntry)other; final String otherKey = o._key; final int compare = _key == null ? (otherKey == null ? 0 : -1) : otherKey == null ? 1 : _key.compareTo(otherKey); return compare == 0 ? super.compareTo(o) : compare; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryList.java index 801f9261f8..990ca76d67 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryList.java @@ -30,7 +30,7 @@ import org.apache.qpid.server.queue.SortedQueueEntry.Colour; * ISBN-13: 978-0262033848 * see http://en.wikipedia.org/wiki/Red-black_tree */ -public class SortedQueueEntryList implements QueueEntryListBase<SortedQueueEntry, SortedQueue, SortedQueueEntryList> +public class SortedQueueEntryList implements QueueEntryList { private final SortedQueueEntry _head; private SortedQueueEntry _root; @@ -279,8 +279,9 @@ public class SortedQueueEntryList implements QueueEntryListBase<SortedQueueEntry return (node == null ? Colour.BLACK : node.getColour()) == colour; } - public SortedQueueEntry next(final SortedQueueEntry node) + public SortedQueueEntry next(final QueueEntry entry) { + SortedQueueEntry node = (SortedQueueEntry)entry; synchronized(_lock) { if(node.isDeleted() && _head != node) @@ -308,7 +309,7 @@ public class SortedQueueEntryList implements QueueEntryListBase<SortedQueueEntry } } - public QueueEntryIterator<SortedQueueEntry,SortedQueue,SortedQueueEntryList,QueueConsumer<?,SortedQueueEntry,SortedQueue,SortedQueueEntryList>> iterator() + public QueueEntryIterator iterator() { return new QueueEntryIteratorImpl(_head); } @@ -323,8 +324,9 @@ public class SortedQueueEntryList implements QueueEntryListBase<SortedQueueEntry return _root; } - public void entryDeleted(final SortedQueueEntry entry) + public void entryDeleted(final QueueEntry e) { + SortedQueueEntry entry = (SortedQueueEntry)e; synchronized(_lock) { // If the node to be removed has two children, we swap the position @@ -618,7 +620,7 @@ public class SortedQueueEntryList implements QueueEntryListBase<SortedQueueEntry return x == null ? null : x.getColour(); } - public class QueueEntryIteratorImpl implements QueueEntryIterator<SortedQueueEntry,SortedQueue,SortedQueueEntryList,QueueConsumer<?,SortedQueueEntry,SortedQueue,SortedQueueEntryList>> + public class QueueEntryIteratorImpl implements QueueEntryIterator { private SortedQueueEntry _lastNode; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryListFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryListFactory.java index 69ffcd67a7..ed80b33234 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryListFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueueEntryListFactory.java @@ -19,7 +19,7 @@ */ package org.apache.qpid.server.queue; -public class SortedQueueEntryListFactory implements QueueEntryListFactory<SortedQueueEntry,SortedQueue,SortedQueueEntryList> +public class SortedQueueEntryListFactory implements QueueEntryListFactory { private final String _propertyName; @@ -30,8 +30,8 @@ public class SortedQueueEntryListFactory implements QueueEntryListFactory<Sorted } @Override - public SortedQueueEntryList createQueueEntryList(final SortedQueue queue) + public SortedQueueEntryList createQueueEntryList(final AMQQueue<?> queue) { - return new SortedQueueEntryList(queue, _propertyName); + return new SortedQueueEntryList((SortedQueue) queue, _propertyName); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java index 51c2d7c7b5..1386196405 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java @@ -25,7 +25,7 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Map; -public class StandardQueue extends AbstractQueue<StandardQueueEntry,StandardQueue,StandardQueueEntryList> +public class StandardQueue extends AbstractQueue { public StandardQueue(final VirtualHost virtualHost, final Map<String, Object> arguments) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntry.java index 368015e9c0..8669d26110 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntry.java @@ -22,7 +22,7 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.message.ServerMessage; -public class StandardQueueEntry extends OrderedQueueEntry<StandardQueueEntry, StandardQueue, StandardQueueEntryList> +public class StandardQueueEntry extends OrderedQueueEntry { protected StandardQueueEntry(final StandardQueueEntryList queueEntryList) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntryList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntryList.java index 11ad04e61c..0b8b7f7c6b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntryList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueueEntryList.java @@ -22,15 +22,15 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.message.ServerMessage; -public class StandardQueueEntryList extends OrderedQueueEntryList<StandardQueueEntry, StandardQueue, StandardQueueEntryList> +public class StandardQueueEntryList extends OrderedQueueEntryList { - private static final HeadCreator<StandardQueueEntry, StandardQueue, StandardQueueEntryList> HEAD_CREATOR = new HeadCreator<StandardQueueEntry, StandardQueue, StandardQueueEntryList>() + private static final HeadCreator HEAD_CREATOR = new HeadCreator() { @Override - public StandardQueueEntry createHead(final StandardQueueEntryList list) + public StandardQueueEntry createHead(final QueueEntryList list) { - return new StandardQueueEntry(list); + return new StandardQueueEntry((StandardQueueEntryList) list); } }; @@ -45,12 +45,12 @@ public class StandardQueueEntryList extends OrderedQueueEntryList<StandardQueueE return new StandardQueueEntry(this, message); } - static class Factory implements QueueEntryListFactory<StandardQueueEntry, StandardQueue, StandardQueueEntryList> + static class Factory implements QueueEntryListFactory { - public StandardQueueEntryList createQueueEntryList(StandardQueue queue) + public StandardQueueEntryList createQueueEntryList(AMQQueue<?> queue) { - return new StandardQueueEntryList(queue); + return new StandardQueueEntryList((StandardQueue) queue); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java index 1ee726c455..dc30892667 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java @@ -20,9 +20,9 @@ package org.apache.qpid.server.security; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.consumer.Consumer; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.*; import org.apache.qpid.server.plugin.AccessControlFactory; @@ -252,9 +252,9 @@ public class SecurityManager implements ConfigurationChangeListener return true; } - public void authoriseCreateBinding(Binding binding) + public void authoriseCreateBinding(BindingImpl binding) { - final Exchange exch = binding.getExchangeImpl(); + final ExchangeImpl exch = binding.getExchange(); final AMQQueue queue = binding.getAMQQueue(); final String bindingKey = binding.getBindingKey(); @@ -340,7 +340,7 @@ public class SecurityManager implements ConfigurationChangeListener } } - public void authoriseCreateExchange(final Exchange exchange) + public void authoriseCreateExchange(final ExchangeImpl exchange) { final String exchangeName = exchange.getName(); if(!checkAllPlugins(new AccessCheck() @@ -408,7 +408,7 @@ public class SecurityManager implements ConfigurationChangeListener } - public void authoriseUpdate(final Exchange exchange) + public void authoriseUpdate(final ExchangeImpl exchange) { if(!checkAllPlugins(new AccessCheck() { @@ -422,7 +422,7 @@ public class SecurityManager implements ConfigurationChangeListener } } - public void authoriseDelete(final Exchange exchange) + public void authoriseDelete(final ExchangeImpl exchange) { if(! checkAllPlugins(new AccessCheck() { @@ -519,7 +519,7 @@ public class SecurityManager implements ConfigurationChangeListener } } - public void authoriseUnbind(final Exchange exch, final String routingKey, final AMQQueue queue) + public void authoriseUnbind(final ExchangeImpl exch, final String routingKey, final AMQQueue queue) { if(! checkAllPlugins(new AccessCheck() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java index 7f136a953f..ae0241314f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java @@ -26,7 +26,7 @@ import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.queue.AMQQueue; @@ -155,7 +155,7 @@ public class ObjectProperties } - public ObjectProperties(Exchange exch, AMQQueue queue, String routingKey) + public ObjectProperties(ExchangeImpl exch, AMQQueue queue, String routingKey) { this(queue); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreHelper.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreHelper.java index c4ee5819ac..77af1f92fd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreHelper.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreHelper.java @@ -29,6 +29,8 @@ import java.util.Map; import java.util.Set; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.LifetimePolicy; @@ -43,7 +45,7 @@ public class DurableConfigurationStoreHelper private static final String QUEUE = Queue.class.getSimpleName(); private static final Set<String> QUEUE_ARGUMENTS_EXCLUDES = new HashSet<String>(Arrays.asList(Queue.ALTERNATE_EXCHANGE)); - public static void updateQueue(DurableConfigurationStore store, AMQQueue<?,?,?> queue) + public static void updateQueue(DurableConfigurationStore store, AMQQueue queue) { Map<String, Object> attributesMap = new LinkedHashMap<String, Object>(); @@ -65,7 +67,7 @@ public class DurableConfigurationStoreHelper store.update(queue.getId(), QUEUE, attributesMap); } - public static void createQueue(DurableConfigurationStore store, AMQQueue<?,?,?> queue) + public static void createQueue(DurableConfigurationStore store, AMQQueue<?> queue) { Map<String, Object> attributesMap = new HashMap<String, Object>(); if (queue.getAlternateExchange() != null) @@ -88,7 +90,7 @@ public class DurableConfigurationStoreHelper store.remove(queue.getId(), QUEUE); } - public static void createExchange(DurableConfigurationStore store, org.apache.qpid.server.exchange.Exchange exchange) + public static void createExchange(DurableConfigurationStore store, ExchangeImpl exchange) { Map<String, Object> attributesMap = new HashMap<String, Object>(); attributesMap.put(Exchange.NAME, exchange.getName()); @@ -101,16 +103,16 @@ public class DurableConfigurationStoreHelper } - public static void removeExchange(DurableConfigurationStore store, org.apache.qpid.server.exchange.Exchange exchange) + public static void removeExchange(DurableConfigurationStore store, ExchangeImpl exchange) { store.remove(exchange.getId(), EXCHANGE); } - public static void createBinding(DurableConfigurationStore store, org.apache.qpid.server.binding.Binding binding) + public static void createBinding(DurableConfigurationStore store, BindingImpl binding) { Map<String, Object> attributesMap = new HashMap<String, Object>(); attributesMap.put(Binding.NAME, binding.getBindingKey()); - attributesMap.put(Binding.EXCHANGE, binding.getExchangeImpl().getId()); + attributesMap.put(Binding.EXCHANGE, binding.getExchange().getId()); attributesMap.put(Binding.QUEUE, binding.getAMQQueue().getId()); Map<String, Object> arguments = binding.getArguments(); if (arguments != null) @@ -122,7 +124,7 @@ public class DurableConfigurationStoreHelper } - public static void removeBinding(DurableConfigurationStore store, org.apache.qpid.server.binding.Binding binding) + public static void removeBinding(DurableConfigurationStore store, BindingImpl binding) { store.remove(binding.getId(), BINDING); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index e3e3719558..1f52638279 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -34,8 +34,10 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; +import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; -import org.apache.qpid.server.model.ExclusivityPolicy; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.configuration.ExchangeConfiguration; @@ -45,7 +47,6 @@ import org.apache.qpid.server.connection.ConnectionRegistry; import org.apache.qpid.server.connection.IConnectionRegistry; import org.apache.qpid.server.exchange.DefaultExchangeFactory; import org.apache.qpid.server.exchange.DefaultExchangeRegistry; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.ExchangeFactory; import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -54,6 +55,7 @@ import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageNode; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.model.adapter.VirtualHostAdapter; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.plugin.QpidServiceLoader; import org.apache.qpid.server.plugin.SystemNodeCreator; @@ -358,7 +360,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg attributes.put(org.apache.qpid.server.model.Exchange.LIFETIME_POLICY, autodelete ? LifetimePolicy.DELETE_ON_NO_LINKS : LifetimePolicy.PERMANENT); attributes.put(org.apache.qpid.server.model.Exchange.ALTERNATE_EXCHANGE, null); - Exchange newExchange = createExchange(attributes); + ExchangeImpl newExchange = createExchange(attributes); } catch(ExchangeExistsException e) { @@ -381,13 +383,13 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg //get the exchange name (returns default exchange name if none was specified) String exchangeName = queueConfiguration.getExchange(); - Exchange exchange = _exchangeRegistry.getExchange(exchangeName); + ExchangeImpl exchange = _exchangeRegistry.getExchange(exchangeName); if (exchange == null) { throw new ConfigurationException("Attempt to bind queue '" + queueName + "' to unknown exchange:" + exchangeName); } - Exchange defaultExchange = _exchangeRegistry.getDefaultExchange(); + ExchangeImpl defaultExchange = _exchangeRegistry.getDefaultExchange(); //get routing keys in configuration (returns empty list if none are defined) List<?> routingKeys = queueConfiguration.getRoutingKeys(); @@ -418,7 +420,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } - private void configureBinding(AMQQueue queue, Exchange exchange, String routingKey, Map<String,Object> arguments) + private void configureBinding(AMQQueue queue, ExchangeImpl exchange, String routingKey, Map<String,Object> arguments) { if (_logger.isInfoEnabled()) { @@ -458,13 +460,13 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg _exchangeRegistry.addRegistryChangeListener(new ExchangeRegistry.RegistryChangeListener() { @Override - public void exchangeRegistered(Exchange exchange) + public void exchangeRegistered(ExchangeImpl exchange) { listener.exchangeRegistered(exchange); } @Override - public void exchangeUnregistered(Exchange exchange) + public void exchangeUnregistered(ExchangeImpl exchange) { listener.exchangeUnregistered(exchange); } @@ -591,37 +593,43 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } @Override - public Exchange getExchange(String name) + public ExchangeImpl getExchange(String name) { return _exchangeRegistry.getExchange(name); } @Override - public Exchange getExchange(UUID id) + public ExchangeImpl getExchange(UUID id) { return _exchangeRegistry.getExchange(id); } @Override - public Exchange getDefaultExchange() + public ExchangeImpl getDefaultExchange() { return _exchangeRegistry.getDefaultExchange(); } @Override - public Collection<Exchange> getExchanges() + public Collection<ExchangeImpl> getExchanges() { return Collections.unmodifiableCollection(_exchangeRegistry.getExchanges()); } @Override - public Collection<ExchangeType<? extends Exchange>> getExchangeTypes() + public Collection<NonDefaultExchange> getExchangesExceptDefault() + { + return Collections.unmodifiableCollection(_exchangeRegistry.getExchangesExceptDefault()); + } + + @Override + public Collection<ExchangeType<? extends ExchangeImpl>> getExchangeTypes() { return _exchangeFactory.getRegisteredTypes(); } @Override - public Exchange createExchange(Map<String,Object> attributes) + public NonDefaultExchange createExchange(Map<String,Object> attributes) throws ExchangeExistsException, ReservedExchangeNameException, UnknownExchangeException, AMQUnknownExchangeType { @@ -632,7 +640,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg synchronized (_exchangeRegistry) { - Exchange existing; + ExchangeImpl existing; if((existing = _exchangeRegistry.getExchange(name)) !=null) { throw new ExchangeExistsException(name,existing); @@ -650,7 +658,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg UUIDGenerator.generateExchangeUUID(name, getName())); } - Exchange exchange = _exchangeFactory.createExchange(attributes); + NonDefaultExchange exchange = _exchangeFactory.createExchange(attributes); _exchangeRegistry.registerExchange(exchange); if(durable) @@ -662,7 +670,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } @Override - public void removeExchange(Exchange exchange, boolean force) + public void removeExchange(ExchangeImpl exchange, boolean force) throws ExchangeIsAlternateException, RequiredExchangeException { if(exchange.hasReferrers()) @@ -1073,4 +1081,17 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg { return getConfiguration().getMaxDeliveryCount(); } + + @Override + public TaskExecutor getTaskExecutor() + { + // todo - remove this once virtualhost is a configured object itself + return _model.getTaskExecutor(); + } + + @Override + public org.apache.qpid.server.model.VirtualHost getModel() + { + return _model; + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java index 02a6ed75fb..a682079de1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java @@ -25,16 +25,17 @@ import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.ExchangeRegistry; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer; import org.apache.qpid.server.store.UnresolvedDependency; import org.apache.qpid.server.store.UnresolvedObject; -public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<Binding> +public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<BindingImpl> { private static final Logger _logger = Logger.getLogger(BindingRecoverer.class); @@ -49,7 +50,7 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B } @Override - public UnresolvedObject<Binding> createUnresolvedObject(final UUID id, + public UnresolvedObject<BindingImpl> createUnresolvedObject(final UUID id, final String type, final Map<String, Object> attributes) { @@ -62,7 +63,7 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B return org.apache.qpid.server.model.Binding.class.getSimpleName(); } - private class UnresolvedBinding implements UnresolvedObject<Binding> + private class UnresolvedBinding implements UnresolvedObject<BindingImpl> { private final Map<String, Object> _bindingArgumentsMap; private final String _bindingName; @@ -73,7 +74,7 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B private List<UnresolvedDependency> _unresolvedDependencies = new ArrayList<UnresolvedDependency>(); - private Exchange _exchange; + private ExchangeImpl _exchange; private AMQQueue _queue; public UnresolvedBinding(final UUID id, @@ -104,16 +105,16 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B } @Override - public Binding resolve() + public BindingImpl resolve() { - if(_exchange.getBinding(_bindingName, _queue) == null) + if(!_exchange.hasBinding(_bindingName, _queue)) { _logger.info("Restoring binding: (Exchange: " + _exchange.getName() + ", Queue: " + _queue.getName() + ", Routing Key: " + _bindingName + ", Arguments: " + _bindingArgumentsMap + ")"); _exchange.restoreBinding(_bindingId, _bindingName, _queue, _bindingArgumentsMap); } - return _exchange.getBinding(_bindingName, _queue); + return ((NonDefaultExchange)_exchange).getBinding(_bindingName, _queue); } private class QueueDependency implements UnresolvedDependency<AMQQueue> @@ -140,7 +141,7 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B } - private class ExchangeDependency implements UnresolvedDependency<Exchange> + private class ExchangeDependency implements UnresolvedDependency<ExchangeImpl> { @Override @@ -156,7 +157,7 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer<B } @Override - public void resolve(final Exchange dependency) + public void resolve(final ExchangeImpl dependency) { _exchange = dependency; _unresolvedDependencies.remove(this); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java index 4e0e46e57b..0f57123c19 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java @@ -19,19 +19,19 @@ package org.apache.qpid.server.virtualhost;/* * */ -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; public class ExchangeExistsException extends Exception { - private final Exchange _existing; + private final ExchangeImpl _existing; - public ExchangeExistsException(String name, Exchange existing) + public ExchangeExistsException(String name, ExchangeImpl existing) { super(name); _existing = existing; } - public Exchange getExistingExchange() + public ExchangeImpl getExistingExchange() { return _existing; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java index b800734231..bc65ece87e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java @@ -24,16 +24,15 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.ExchangeFactory; import org.apache.qpid.server.exchange.ExchangeRegistry; -import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer; import org.apache.qpid.server.store.UnresolvedDependency; import org.apache.qpid.server.store.UnresolvedObject; import org.apache.qpid.server.util.ServerScopedRuntimeException; -public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer<Exchange> +public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer<ExchangeImpl> { private final ExchangeRegistry _exchangeRegistry; private final ExchangeFactory _exchangeFactory; @@ -51,16 +50,16 @@ public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer< } @Override - public UnresolvedObject<Exchange> createUnresolvedObject(final UUID id, + public UnresolvedObject<ExchangeImpl> createUnresolvedObject(final UUID id, final String type, final Map<String, Object> attributes) { return new UnresolvedExchange(id, attributes); } - private class UnresolvedExchange implements UnresolvedObject<Exchange> + private class UnresolvedExchange implements UnresolvedObject<ExchangeImpl> { - private Exchange _exchange; + private ExchangeImpl _exchange; public UnresolvedExchange(final UUID id, final Map<String, Object> attributeMap) @@ -101,7 +100,7 @@ public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer< } @Override - public Exchange resolve() + public ExchangeImpl resolve() { return _exchange; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java index 77ca1b1d4e..385f4e219e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java @@ -26,7 +26,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.log4j.Logger; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.queue.AMQQueue; @@ -72,7 +72,7 @@ public class QueueRecoverer extends AbstractDurableConfiguredObjectRecoverer<AMQ private final UUID _id; private AMQQueue _queue; private List<UnresolvedDependency> _dependencies = new ArrayList<UnresolvedDependency>(); - private Exchange _alternateExchange; + private ExchangeImpl _alternateExchange; public UnresolvedQueue(final UUID id, final String type, @@ -136,7 +136,7 @@ public class QueueRecoverer extends AbstractDurableConfiguredObjectRecoverer<AMQ @Override public void resolve(final Object dependency) { - _alternateExchange = (Exchange) dependency; + _alternateExchange = (ExchangeImpl) dependency; _dependencies.remove(this); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java index 304001cdd0..fd30119d7b 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java @@ -25,15 +25,16 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ScheduledFuture; +import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; import org.apache.qpid.common.Closeable; import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.connection.IConnectionRegistry; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.plugin.ExchangeType; -import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.protocol.LinkRegistry; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.SecurityManager; @@ -61,24 +62,24 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable AMQQueue createQueue(Map<String, Object> arguments) throws QueueExistsException; - Exchange createExchange(Map<String,Object> attributes) + NonDefaultExchange createExchange(Map<String,Object> attributes) throws ExchangeExistsException, ReservedExchangeNameException, UnknownExchangeException, AMQUnknownExchangeType; - void removeExchange(Exchange exchange, boolean force) throws ExchangeIsAlternateException, + void removeExchange(ExchangeImpl exchange, boolean force) throws ExchangeIsAlternateException, RequiredExchangeException; MessageDestination getMessageDestination(String name); - Exchange getExchange(String name); - Exchange getExchange(UUID id); + ExchangeImpl getExchange(String name); + ExchangeImpl getExchange(UUID id); - Exchange getDefaultExchange(); + ExchangeImpl getDefaultExchange(); - Collection<Exchange> getExchanges(); + Collection<ExchangeImpl> getExchanges(); - Collection<ExchangeType<? extends Exchange>> getExchangeTypes(); + Collection<ExchangeType<? extends ExchangeImpl>> getExchangeTypes(); DurableConfigurationStore getDurableConfigurationStore(); @@ -133,4 +134,10 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable long getDefaultQueueFlowResumeSizeBytes(); int getDefaultMaximumDeliveryAttempts(); + + TaskExecutor getTaskExecutor(); + + Collection<NonDefaultExchange> getExchangesExceptDefault(); + + org.apache.qpid.server.model.VirtualHost getModel(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostListener.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostListener.java index 8527435eea..af8b0c8f29 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostListener.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostListener.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.virtualhost; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.queue.AMQQueue; @@ -35,7 +35,7 @@ public interface VirtualHostListener public void connectionUnregistered(AMQConnectionModel connection); - public void exchangeRegistered(Exchange exchange); + public void exchangeRegistered(ExchangeImpl exchange); - public void exchangeUnregistered(Exchange exchange); + public void exchangeUnregistered(ExchangeImpl exchange); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java index 4dd9831454..ee90d71028 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java @@ -146,15 +146,15 @@ public class VirtualHostConfigurationTest extends QpidTestCase // Check specifically configured values AMQQueue aTest = vhost.getQueue("atest"); - assertEquals(4, aTest.getMaximumQueueDepth()); - assertEquals(5, aTest.getMaximumMessageSize()); - assertEquals(6, aTest.getMaximumMessageAge()); + assertEquals(4, aTest.getAlertThresholdQueueDepthBytes()); + assertEquals(5, aTest.getAlertThresholdMessageSize()); + assertEquals(6, aTest.getAlertThresholdMessageAge()); // Check default values AMQQueue bTest = vhost.getQueue("btest"); - assertEquals(1, bTest.getMaximumQueueDepth()); - assertEquals(2, bTest.getMaximumMessageSize()); - assertEquals(3, bTest.getMaximumMessageAge()); + assertEquals(1, bTest.getAlertThresholdQueueDepthBytes()); + assertEquals(2, bTest.getAlertThresholdMessageSize()); + assertEquals(3, bTest.getAlertThresholdMessageAge()); } public void testMaxDeliveryCount() throws Exception diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/DefaultExchangeFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/DefaultExchangeFactoryTest.java index 276e098efe..5ec9a7762d 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/DefaultExchangeFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/DefaultExchangeFactoryTest.java @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.UUID; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -60,7 +59,7 @@ public class DefaultExchangeFactoryTest extends QpidTestCase DefaultExchangeFactory factory = new TestExchangeFactory(); - Collection<ExchangeType<? extends Exchange>> registeredTypes = factory.getRegisteredTypes(); + Collection<ExchangeType<? extends ExchangeImpl>> registeredTypes = factory.getRegisteredTypes(); assertEquals("Unexpected number of exchange types", _stubbedExchangeTypes.size(), registeredTypes.size()); assertTrue("Direct exchange type is not found", registeredTypes.contains(_directExchangeType)); assertTrue("Fanout exchange type is not found", registeredTypes.contains(_fanoutExchangeType)); @@ -169,7 +168,7 @@ public class DefaultExchangeFactoryTest extends QpidTestCase public void testCreateDefaultExchangeFactoryWithCustomExchangeType() { - ExchangeType<?> customExchangeType = new ExchangeType<Exchange>() + ExchangeType<?> customExchangeType = new ExchangeType<NonDefaultExchange>() { @Override public String getType() @@ -178,7 +177,7 @@ public class DefaultExchangeFactoryTest extends QpidTestCase } @Override - public Exchange newInstance(VirtualHost host, Map<String,Object> attributes) + public NonDefaultExchange newInstance(VirtualHost host, Map<String,Object> attributes) { return null; } @@ -198,7 +197,7 @@ public class DefaultExchangeFactoryTest extends QpidTestCase DefaultExchangeFactory factory = new TestExchangeFactory(); - Collection<ExchangeType<? extends Exchange>> registeredTypes = factory.getRegisteredTypes(); + Collection<ExchangeType<? extends ExchangeImpl>> registeredTypes = factory.getRegisteredTypes(); assertEquals("Unexpected number of exchange types", _stubbedExchangeTypes.size(), registeredTypes.size()); assertTrue("Direct exchange type is not found", registeredTypes.contains(_directExchangeType)); assertTrue("Fanout exchange type is not found", registeredTypes.contains(_fanoutExchangeType)); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java index 487b512180..be0704aeaa 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java @@ -142,7 +142,7 @@ public class FanoutExchangeTest extends TestCase assertTrue("Expected queue1 to be routed to", result.contains(queue1)); assertTrue("Expected queue2 to be routed to", result.contains(queue2)); - _exchange.getBinding("key",queue2).delete(); + _exchange.deleteBinding("key",queue2); result = _exchange.route(mockMessage(true),InstanceProperties.EMPTY); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java index 05569994d7..453a1b8e7d 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java @@ -23,13 +23,12 @@ package org.apache.qpid.server.exchange; import java.util.Collection; import junit.framework.TestCase; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.security.*; import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.HashMap; @@ -140,7 +139,7 @@ public class HeadersBindingTest extends TestCase private MockHeader matchHeaders = new MockHeader(); private int _count = 0; private AMQQueue _queue; - private Exchange _exchange; + private NonDefaultExchange _exchange; protected void setUp() { @@ -150,7 +149,7 @@ public class HeadersBindingTest extends TestCase when(_queue.getVirtualHost()).thenReturn(vhost); when(vhost.getSecurityManager()).thenReturn(mock(org.apache.qpid.server.security.SecurityManager.class)); CurrentActor.set(mock(LogActor.class)); - _exchange = mock(Exchange.class); + _exchange = mock(NonDefaultExchange.class); when(_exchange.getExchangeType()).thenReturn(mock(ExchangeType.class)); } @@ -165,7 +164,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -176,7 +175,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); matchHeaders.setString("B", "Value of B"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -186,7 +185,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Altered value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertFalse(new HeadersBinding(b).matches(matchHeaders)); } @@ -197,7 +196,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -209,7 +208,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertFalse(new HeadersBinding(b).matches(matchHeaders)); } @@ -222,7 +221,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); matchHeaders.setString("B", "Value of B"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -236,7 +235,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("B", "Value of B"); matchHeaders.setString("C", "Value of C"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -250,7 +249,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("B", "Altered value of B"); matchHeaders.setString("C", "Value of C"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertFalse(new HeadersBinding(b).matches(matchHeaders)); } @@ -261,7 +260,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -273,7 +272,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -286,7 +285,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("A", "Value of A"); matchHeaders.setString("B", "Value of B"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -300,7 +299,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("B", "Value of B"); matchHeaders.setString("C", "Value of C"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -314,7 +313,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("B", "Altered value of B"); matchHeaders.setString("C", "Value of C"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertTrue(new HeadersBinding(b).matches(matchHeaders)); } @@ -328,7 +327,7 @@ public class HeadersBindingTest extends TestCase matchHeaders.setString("B", "Altered value of B"); matchHeaders.setString("C", "Value of C"); - Binding b = new Binding(null, getQueueName(), _queue, _exchange, bindHeaders); + BindingImpl b = new BindingImpl(null, getQueueName(), _queue, _exchange, bindHeaders); assertFalse(new HeadersBinding(b).matches(matchHeaders)); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java index 420b26a756..e4e07813c7 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java @@ -178,7 +178,7 @@ public class HeadersExchangeTest extends TestCase routeAndTest(mockMessage(getArgsMapFromStrings("F0000=Aardvark")), q1, q2); routeAndTest(mockMessage(getArgsMapFromStrings("F0001")), q3); - _exchange.getBinding("Q1",q1).delete(); + _exchange.deleteBinding("Q1",q1); routeAndTest(mockMessage(getArgsMapFromStrings("F0000"))); routeAndTest(mockMessage(getArgsMapFromStrings("F0000=Aardvark")), q2); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java index 2faefa1525..1c191b7b2e 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java @@ -27,7 +27,7 @@ import java.util.UUID; import junit.framework.Assert; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; @@ -81,7 +81,7 @@ public class TopicExchangeTest extends QpidTestCase } } - private AMQQueue<?,?,?> createQueue(String name) throws QueueExistsException + private AMQQueue<?> createQueue(String name) throws QueueExistsException { Map<String,Object> attributes = new HashMap<String, Object>(); attributes.put(Queue.ID, UUIDGenerator.generateRandomUUID()); @@ -91,233 +91,233 @@ public class TopicExchangeTest extends QpidTestCase public void testNoRoute() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a*#b"); - _exchange.registerQueue(new Binding(null, "a.*.#.b",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a*#b"); + _exchange.registerQueue(new BindingImpl(null, "a.*.#.b",queue, _exchange, null)); routeMessage("a.b", 0l); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testDirectMatch() throws Exception { - AMQQueue<?,?,?> queue = createQueue("ab"); - _exchange.registerQueue(new Binding(null, "a.b",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("ab"); + _exchange.registerQueue(new BindingImpl(null, "a.b",queue, _exchange, null)); routeMessage("a.b",0l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 0l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); int queueCount = routeMessage("a.c",1l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testStarMatch() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a*"); - _exchange.registerQueue(new Binding(null, "a.*",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a*"); + _exchange.registerQueue(new BindingImpl(null, "a.*",queue, _exchange, null)); routeMessage("a.b",0l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 0l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.c",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); int queueCount = routeMessage("a",2l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testHashMatch() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a#"); - _exchange.registerQueue(new Binding(null, "a.#",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a#"); + _exchange.registerQueue(new BindingImpl(null, "a.#",queue, _exchange, null)); routeMessage("a.b.c",0l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 0l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.b",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.c",2l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 2l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a",3l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 3l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); int queueCount = routeMessage("b", 4l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testMidHash() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a"); - _exchange.registerQueue(new Binding(null, "a.*.#.b",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a"); + _exchange.registerQueue(new BindingImpl(null, "a.*.#.b",queue, _exchange, null)); routeMessage("a.c.d.b",0l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 0l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.c.b",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testMatchAfterHash() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a#"); - _exchange.registerQueue(new Binding(null, "a.*.#.b.c",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a#"); + _exchange.registerQueue(new BindingImpl(null, "a.*.#.b.c",queue, _exchange, null)); int queueCount = routeMessage("a.c.b.b",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.a.b.c",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); queueCount = routeMessage("a.b.c.b",2l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.b.c.b.c",3l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 3l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testHashAfterHash() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a#"); - _exchange.registerQueue(new Binding(null, "a.*.#.b.c.#.d",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a#"); + _exchange.registerQueue(new BindingImpl(null, "a.*.#.b.c.#.d",queue, _exchange, null)); int queueCount = routeMessage("a.c.b.b.c",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.a.b.c.d",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testHashHash() throws Exception { - AMQQueue<?,?,?> queue = createQueue("a#"); - _exchange.registerQueue(new Binding(null, "a.#.*.#.d",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a#"); + _exchange.registerQueue(new BindingImpl(null, "a.#.*.#.d",queue, _exchange, null)); int queueCount = routeMessage("a.c.b.b.c",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); routeMessage("a.a.b.c.d",1l); - Assert.assertEquals(1, queue.getMessageCount()); + Assert.assertEquals(1, queue.getQueueDepthMessages()); Assert.assertEquals("Wrong message received", 1l, queue.getMessagesOnTheQueue().get(0).getMessage().getMessageNumber()); queue.clearQueue(); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testSubMatchFails() throws Exception { - AMQQueue queue = createQueue("a"); - _exchange.registerQueue(new Binding(null, "a.b.c.d",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a"); + _exchange.registerQueue(new BindingImpl(null, "a.b.c.d",queue, _exchange, null)); int queueCount = routeMessage("a.b.c",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } @@ -340,27 +340,27 @@ public class TopicExchangeTest extends QpidTestCase public void testMoreRouting() throws Exception { - AMQQueue queue = createQueue("a"); - _exchange.registerQueue(new Binding(null, "a.b",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a"); + _exchange.registerQueue(new BindingImpl(null, "a.b",queue, _exchange, null)); int queueCount = routeMessage("a.b.c",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } public void testMoreQueue() throws Exception { - AMQQueue queue = createQueue("a"); - _exchange.registerQueue(new Binding(null, "a.b",queue, _exchange, null)); + AMQQueue<?> queue = createQueue("a"); + _exchange.registerQueue(new BindingImpl(null, "a.b",queue, _exchange, null)); int queueCount = routeMessage("a",0l); Assert.assertEquals("Message should not route to any queues", 0, queueCount); - Assert.assertEquals(0, queue.getMessageCount()); + Assert.assertEquals(0, queue.getQueueDepthMessages()); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/ExchangeMessagesTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/ExchangeMessagesTest.java index f1452b8b88..d970a1f732 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/ExchangeMessagesTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/ExchangeMessagesTest.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.logging.messages; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.util.BrokerTestHelper; import java.util.List; @@ -32,7 +32,7 @@ public class ExchangeMessagesTest extends AbstractTestMessages { public void testExchangeCreated_Transient() throws Exception { - Exchange exchange = BrokerTestHelper.createExchange("test"); + ExchangeImpl exchange = BrokerTestHelper.createExchange("test"); String type = exchange.getTypeName(); String name = exchange.getName(); @@ -47,7 +47,7 @@ public class ExchangeMessagesTest extends AbstractTestMessages public void testExchangeCreated_Persistent() throws Exception { - Exchange exchange = BrokerTestHelper.createExchange("test"); + ExchangeImpl exchange = BrokerTestHelper.createExchange("test"); String type = exchange.getTypeName(); String name = exchange.getName(); @@ -72,7 +72,7 @@ public class ExchangeMessagesTest extends AbstractTestMessages public void testExchangeDiscardedMessage() throws Exception { - Exchange exchange = BrokerTestHelper.createExchange("test"); + ExchangeImpl exchange = BrokerTestHelper.createExchange("test"); final String name = exchange.getName(); final String routingKey = "routingKey"; diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/AbstractTestLogSubject.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/AbstractTestLogSubject.java index 0d4f2b2227..e7366dfe65 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/AbstractTestLogSubject.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/AbstractTestLogSubject.java @@ -21,7 +21,7 @@ package org.apache.qpid.server.logging.subjects; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.LogMessage; import org.apache.qpid.server.logging.LogSubject; @@ -178,7 +178,7 @@ public abstract class AbstractTestLogSubject extends QpidTestCase * @param message The message to check * @param exchange the exchange to check against */ - protected void verifyExchange(String message, Exchange exchange) + protected void verifyExchange(String message, ExchangeImpl exchange) { String exchangeSlice = getSlice("ex", message); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/BindingLogSubjectTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/BindingLogSubjectTest.java index f083d2ba5d..14e193cc86 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/BindingLogSubjectTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/BindingLogSubjectTest.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.logging.subjects; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -36,7 +36,7 @@ public class BindingLogSubjectTest extends AbstractTestLogSubject private AMQQueue _queue; private String _routingKey; - private Exchange _exchange; + private ExchangeImpl _exchange; private VirtualHost _testVhost; @Override diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubjectTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubjectTest.java index 40188f9354..a16e7b2936 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubjectTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ExchangeLogSubjectTest.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.logging.subjects; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -30,7 +30,7 @@ import org.apache.qpid.server.virtualhost.VirtualHost; */ public class ExchangeLogSubjectTest extends AbstractTestLogSubject { - private Exchange _exchange; + private ExchangeImpl _exchange; private VirtualHost _testVhost; @Override diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java index e05a9d43da..d32f8bcf49 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java @@ -36,7 +36,8 @@ import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.QueueConfiguration; import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.exchange.DefaultExchangeFactory; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.RootMessageLogger; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -140,16 +141,16 @@ public class AMQQueueFactoryTest extends QpidTestCase when(_virtualHost.createExchange(attributes.capture())).then( - new Answer<Exchange>() + new Answer<ExchangeImpl>() { @Override - public Exchange answer(InvocationOnMock invocation) throws Throwable + public ExchangeImpl answer(InvocationOnMock invocation) throws Throwable { Map attributeValues = attributes.getValue(); final String name = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Exchange.NAME, attributeValues); final UUID id = MapValueConverter.getUUIDAttribute(org.apache.qpid.server.model.Exchange.ID, attributeValues); - final Exchange exchange = mock(Exchange.class); + final NonDefaultExchange exchange = mock(NonDefaultExchange.class); ExchangeType exType = mock(ExchangeType.class); when(exchange.getName()).thenReturn(name); @@ -260,7 +261,7 @@ public class AMQQueueFactoryTest extends QpidTestCase AMQQueue queue = _queueFactory.createQueue(attributes); - Exchange altExchange = queue.getAlternateExchange(); + ExchangeImpl altExchange = queue.getAlternateExchange(); assertNotNull("Queue should have an alternate exchange as DLQ is enabled", altExchange); assertEquals("Alternate exchange name was not as expected", dlExchangeName, altExchange.getName()); assertEquals("Alternate exchange type was not as expected", ExchangeDefaults.FANOUT_EXCHANGE_CLASS, altExchange.getTypeName()); @@ -272,7 +273,7 @@ public class AMQQueueFactoryTest extends QpidTestCase assertNotNull("The DLQ was not registered as expected", dlQueue); assertTrue("DLQ should have been bound to the alternate exchange", altExchange.isBound(dlQueue)); assertNull("DLQ should have no alternate exchange", dlQueue.getAlternateExchange()); - assertEquals("DLQ should have a zero maximum delivery count", 0, dlQueue.getMaximumDeliveryCount()); + assertEquals("DLQ should have a zero maximum delivery count", 0, dlQueue.getMaximumDeliveryAttempts()); //2 queues should have been registered verifyRegisteredQueueCount(2); @@ -301,8 +302,8 @@ public class AMQQueueFactoryTest extends QpidTestCase AMQQueue queue = _queueFactory.createQueue(attributes); - assertEquals("Unexpected maximum delivery count", 5, queue.getMaximumDeliveryCount()); - Exchange altExchange = queue.getAlternateExchange(); + assertEquals("Unexpected maximum delivery count", 5, queue.getMaximumDeliveryAttempts()); + ExchangeImpl altExchange = queue.getAlternateExchange(); assertNotNull("Queue should have an alternate exchange as DLQ is enabled", altExchange); assertEquals("Alternate exchange name was not as expected", dlExchangeName, altExchange.getName()); assertEquals("Alternate exchange type was not as expected", ExchangeDefaults.FANOUT_EXCHANGE_CLASS, altExchange.getTypeName()); @@ -314,7 +315,7 @@ public class AMQQueueFactoryTest extends QpidTestCase assertNotNull("The DLQ was not registered as expected", dlQueue); assertTrue("DLQ should have been bound to the alternate exchange", altExchange.isBound(dlQueue)); assertNull("DLQ should have no alternate exchange", dlQueue.getAlternateExchange()); - assertEquals("DLQ should have a zero maximum delivery count", 0, dlQueue.getMaximumDeliveryCount()); + assertEquals("DLQ should have a zero maximum delivery count", 0, dlQueue.getMaximumDeliveryAttempts()); //2 queues should have been registered verifyRegisteredQueueCount(2); @@ -403,7 +404,7 @@ public class AMQQueueFactoryTest extends QpidTestCase final AMQQueue queue = _queueFactory.createQueue(attributes); assertNotNull("The queue was not registered as expected ", queue); - assertEquals("Maximum delivery count not as expected", 5, queue.getMaximumDeliveryCount()); + assertEquals("Maximum delivery count not as expected", 5, queue.getMaximumDeliveryAttempts()); verifyRegisteredQueueCount(1); } @@ -421,7 +422,7 @@ public class AMQQueueFactoryTest extends QpidTestCase final AMQQueue queue = _queueFactory.createQueue(attributes); assertNotNull("The queue was not registered as expected ", queue); - assertEquals("Maximum delivery count not as expected", 0, queue.getMaximumDeliveryCount()); + assertEquals("Maximum delivery count not as expected", 0, queue.getMaximumDeliveryAttempts()); verifyRegisteredQueueCount(1); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java index 5b4950c5ba..97365479fa 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java @@ -32,6 +32,7 @@ import static org.mockito.Mockito.when; import java.util.*; import org.apache.log4j.Logger; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; @@ -41,6 +42,7 @@ import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.QueueNotificationListener; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.queue.AbstractQueue.QueueEntryFilter; import org.apache.qpid.server.consumer.MockConsumer; @@ -50,19 +52,19 @@ import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.test.utils.QpidTestCase; -abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends AbstractQueue<E,Q,L>, L extends QueueEntryListBase<E,Q,L>> extends QpidTestCase +abstract class AbstractQueueTestBase extends QpidTestCase { private static final Logger _logger = Logger.getLogger(AbstractQueueTestBase.class); - private Q _queue; + private AMQQueue<?> _queue; private VirtualHost _virtualHost; private String _qname = "qname"; private String _owner = "owner"; private String _routingKey = "routing key"; private DirectExchange _exchange; private MockConsumer _consumerTarget = new MockConsumer(); - private QueueConsumer _consumer; + private QueueConsumer<?> _consumer; private Map<String,Object> _arguments = Collections.emptyMap(); @Override @@ -78,7 +80,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends attributes.put(Queue.NAME, _qname); attributes.put(Queue.OWNER, _owner); - _queue = (Q) _virtualHost.createQueue(attributes); + _queue = _virtualHost.createQueue(attributes); _exchange = (DirectExchange) _virtualHost.getExchange(ExchangeDefaults.DIRECT_EXCHANGE_NAME); } @@ -106,7 +108,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends Map<String,Object> attributes = new HashMap<String, Object>(_arguments); attributes.put(Queue.ID, UUIDGenerator.generateRandomUUID()); - _queue = (Q) _virtualHost.createQueue(attributes); + _queue = _virtualHost.createQueue(attributes); assertNull("Queue was created", _queue); } catch (IllegalArgumentException e) @@ -118,7 +120,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends Map<String,Object> attributes = new HashMap<String, Object>(_arguments); attributes.put(Queue.ID, UUIDGenerator.generateRandomUUID()); attributes.put(Queue.NAME, "differentName"); - _queue = (Q) _virtualHost.createQueue(attributes); + _queue = _virtualHost.createQueue(attributes); assertNotNull("Queue was not created", _queue); } @@ -138,12 +140,13 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends _exchange.isBound(_routingKey,_queue)); assertEquals("Exchange binding count", 1, _queue.getBindings().size()); + final BindingImpl firstBinding = _queue.getBindings().iterator().next(); assertEquals("Wrong exchange bound", _routingKey, - _queue.getBindings().get(0).getBindingKey()); + firstBinding.getBindingKey()); assertEquals("Wrong exchange bound", _exchange, - _queue.getBindings().get(0).getExchangeImpl()); + firstBinding.getExchange()); - _exchange.getBinding(_routingKey, _queue).delete(); + _exchange.deleteBinding(_routingKey, _queue); assertFalse("Routing key was still bound", _exchange.isBound(_routingKey)); @@ -154,13 +157,13 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends ServerMessage messageA = createMessage(new Long(24)); // Check adding a consumer adds it to the queue - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); assertEquals("Queue does not have consumer", 1, _queue.getConsumerCount()); assertEquals("Queue does not have active consumer", 1, - _queue.getActiveConsumerCount()); + _queue.getConsumerCountWithCredit()); // Check sending a message ends up with the subscriber _queue.enqueue(messageA, null); @@ -179,7 +182,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends assertTrue("Consumer still had queue", _consumerTarget.isClosed()); assertFalse("Queue still has consumer", 1 == _queue.getConsumerCount()); assertFalse("Queue still has active consumer", - 1 == _queue.getActiveConsumerCount()); + 1 == _queue.getConsumerCountWithCredit()); ServerMessage messageB = createMessage(new Long (25)); _queue.enqueue(messageB, null); @@ -191,7 +194,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends { ServerMessage messageA = createMessage(new Long(24)); _queue.enqueue(messageA, null); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); Thread.sleep(150); @@ -209,7 +212,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends ServerMessage messageB = createMessage(new Long(25)); _queue.enqueue(messageA, null); _queue.enqueue(messageB, null); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); Thread.sleep(150); @@ -230,7 +233,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends ServerMessage messageC = createMessage(new Long(26)); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); @@ -270,14 +273,14 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends /** * Tests that a released message that becomes expired is not resent to the subscriber. - * This tests ensures that SimpleAMQQueueEntry.getNextAvailableEntry avoids expired entries. + * This tests ensures that SimpleAMQQueue<?>Entry.getNextAvailableEntry avoids expired entries. * Verifies also that the QueueContext._releasedEntry is reset to null after the entry has been reset. */ public void testReleaseMessageThatBecomesExpiredIsNotRedelivered() throws Exception { ServerMessage messageA = createMessage(new Long(24)); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.SEES_REQUEUES, Consumer.Option.ACQUIRES)); @@ -329,7 +332,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends ServerMessage messageB = createMessage(new Long(25)); ServerMessage messageC = createMessage(new Long(26)); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); @@ -382,11 +385,11 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends MockConsumer target2 = new MockConsumer(); - QueueConsumer consumer1 = _queue.addConsumer(target1, null, messageA.getClass(), "test", + QueueConsumer consumer1 = (QueueConsumer) _queue.addConsumer(target1, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); - QueueConsumer consumer2 = _queue.addConsumer(target2, null, messageA.getClass(), "test", + QueueConsumer consumer2 = (QueueConsumer) _queue.addConsumer(target2, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); @@ -424,14 +427,14 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends ServerMessage messageA = createMessage(new Long(24)); // Check adding an exclusive consumer adds it to the queue - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.EXCLUSIVE, Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); assertEquals("Queue does not have consumer", 1, _queue.getConsumerCount()); assertEquals("Queue does not have active consumer", 1, - _queue.getActiveConsumerCount()); + _queue.getConsumerCountWithCredit()); // Check sending a message ends up with the subscriber _queue.enqueue(messageA, null); @@ -464,14 +467,14 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends // Check we cannot add an exclusive subscriber to a queue with an // existing consumer _consumer.close(); - _consumer = _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); try { - _consumer = _queue.addConsumer(subB, null, messageA.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(subB, null, messageA.getClass(), "test", EnumSet.of(Consumer.Option.EXCLUSIVE)); } @@ -488,13 +491,13 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends Long id = new Long(26); ServerMessage message = createMessage(id); - _consumer = _queue.addConsumer(_consumerTarget, null, message.getClass(), "test", + _consumer = (QueueConsumer<?>) _queue.addConsumer(_consumerTarget, null, message.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); - _queue.enqueue(message, new Action<MessageInstance<?,? extends Consumer>>() + _queue.enqueue(message, new Action<MessageInstance>() { @Override - public void performAction(final MessageInstance<?,? extends Consumer> object) + public void performAction(final MessageInstance object) { QueueEntryImpl entry = (QueueEntryImpl) object; entry.setRedelivered(); @@ -577,7 +580,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends // Get non-existent 0th QueueEntry & check returned list was empty // (the position parameters in this method are indexed from 1) - List<E> entries = _queue.getMessagesRangeOnTheQueue(0, 0); + List<? extends QueueEntry> entries = _queue.getMessagesRangeOnTheQueue(0, 0); assertTrue(entries.size() == 0); // Check that when 'from' is 0 it is ignored and the range continues from 1 @@ -725,7 +728,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends dequeueMessage(_queue, dequeueMessageIndex); // get messages on the queue - List<E> entries = _queue.getMessagesOnTheQueue(); + List<? extends QueueEntry> entries = _queue.getMessagesOnTheQueue(); // assert queue entries assertEquals(messageNumber - 1, entries.size()); @@ -762,9 +765,9 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends dequeueMessage(_queue, dequeueMessageIndex); // get messages on the queue with filter accepting all available messages - List<E> entries = _queue.getMessagesOnTheQueue(new QueueEntryFilter<E>() + List<? extends QueueEntry> entries = ((AbstractQueue)_queue).getMessagesOnTheQueue(new QueueEntryFilter() { - public boolean accept(E entry) + public boolean accept(QueueEntry entry) { return true; } @@ -813,7 +816,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends _queue.clearQueue(); // get queue entries - List<E> entries = _queue.getMessagesOnTheQueue(); + List<? extends QueueEntry> entries = _queue.getMessagesOnTheQueue(); // assert queue entries assertNotNull(entries); @@ -823,7 +826,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends public void testNotificationFiredOnEnqueue() throws Exception { - AMQQueue.NotificationListener listener = mock(AMQQueue.NotificationListener.class); + QueueNotificationListener listener = mock(QueueNotificationListener .class); _queue.setNotificationListener(listener); _queue.setMaximumMessageCount(2); @@ -838,7 +841,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends public void testNotificationFiredAsync() throws Exception { - AMQQueue.NotificationListener listener = mock(AMQQueue.NotificationListener.class); + QueueNotificationListener listener = mock(QueueNotificationListener .class); _queue.enqueue(createMessage(new Long(24)), null); _queue.enqueue(createMessage(new Long(25)), null); @@ -864,12 +867,12 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends * @param messageNumber * number of messages to put into queue */ - protected List<E> enqueueGivenNumberOfMessages(Q queue, int messageNumber) + protected List<? extends QueueEntry> enqueueGivenNumberOfMessages(AMQQueue<?> queue, int messageNumber) { putGivenNumberOfMessages(queue, messageNumber); // make sure that all enqueued messages are on the queue - List<E> entries = queue.getMessagesOnTheQueue(); + List<? extends QueueEntry> entries = queue.getMessagesOnTheQueue(); assertEquals(messageNumber, entries.size()); for (int i = 0; i < messageNumber; i++) { @@ -890,7 +893,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends * @param queue * @param messageNumber */ - protected <T extends AbstractQueue> void putGivenNumberOfMessages(T queue, int messageNumber) + protected void putGivenNumberOfMessages(AMQQueue<?> queue, int messageNumber) { for (int i = 0; i < messageNumber; i++) { @@ -920,9 +923,9 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends * @param dequeueMessageIndex * entry index to dequeue. */ - protected QueueEntry dequeueMessage(AMQQueue queue, int dequeueMessageIndex) + protected QueueEntry dequeueMessage(AMQQueue<?> queue, int dequeueMessageIndex) { - List<QueueEntry> entries = queue.getMessagesOnTheQueue(); + List<? extends QueueEntry> entries = queue.getMessagesOnTheQueue(); QueueEntry entry = entries.get(dequeueMessageIndex); entry.acquire(); entry.delete(); @@ -953,12 +956,12 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends } } - public Q getQueue() + public AMQQueue<?> getQueue() { return _queue; } - protected void setQueue(Q queue) + protected void setQueue(AMQQueue<?> queue) { _queue = queue; } @@ -996,7 +999,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends return message; } - private static class EntryListAddingAction implements Action<MessageInstance<?,? extends Consumer>> + private static class EntryListAddingAction implements Action<MessageInstance> { private final ArrayList<QueueEntry> _queueEntries; @@ -1005,7 +1008,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends _queueEntries = queueEntries; } - public void performAction(MessageInstance<?,? extends Consumer> entry) + public void performAction(MessageInstance entry) { _queueEntries.add((QueueEntry) entry); } @@ -1043,17 +1046,17 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends } - static class TestSimpleQueueEntryListFactory implements QueueEntryListFactory<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList> + static class TestSimpleQueueEntryListFactory implements QueueEntryListFactory { @Override - public NonAsyncDeliverList createQueueEntryList(final NonAsyncDeliverQueue queue) + public NonAsyncDeliverList createQueueEntryList(final AMQQueue<?> queue) { - return new NonAsyncDeliverList(queue); + return new NonAsyncDeliverList((NonAsyncDeliverQueue) queue); } } - private static class NonAsyncDeliverEntry extends OrderedQueueEntry<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList> + private static class NonAsyncDeliverEntry extends OrderedQueueEntry { public NonAsyncDeliverEntry(final NonAsyncDeliverList queueEntryList) @@ -1074,17 +1077,17 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends } } - private static class NonAsyncDeliverList extends OrderedQueueEntryList<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList> + private static class NonAsyncDeliverList extends OrderedQueueEntryList { - private static final HeadCreator<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList> HEAD_CREATOR = - new HeadCreator<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList>() + private static final HeadCreator HEAD_CREATOR = + new HeadCreator() { @Override - public NonAsyncDeliverEntry createHead(final NonAsyncDeliverList list) + public NonAsyncDeliverEntry createHead(final QueueEntryList list) { - return new NonAsyncDeliverEntry(list); + return new NonAsyncDeliverEntry((NonAsyncDeliverList) list); } }; @@ -1101,7 +1104,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends } - private static class NonAsyncDeliverQueue extends AbstractQueue<NonAsyncDeliverEntry, NonAsyncDeliverQueue, NonAsyncDeliverList> + private static class NonAsyncDeliverQueue extends AbstractQueue { public NonAsyncDeliverQueue(final TestSimpleQueueEntryListFactory factory, VirtualHost vhost) { @@ -1119,7 +1122,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends } @Override - public void deliverAsync(QueueConsumer sub) + public void deliverAsync(QueueConsumer<?> sub) { // do nothing, i.e prevent deliveries by the SubFlushRunner // when registering the new consumers diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConflationQueueListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConflationQueueListTest.java index e77125bb0e..54a25dd0e9 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConflationQueueListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConflationQueueListTest.java @@ -58,7 +58,7 @@ public class ConflationQueueListTest extends TestCase when(virtualHost.getSecurityManager()).thenReturn(mock(SecurityManager.class)); _queue = new ConflationQueue(virtualHost, queueAttributes); - _list = _queue.getEntries(); + _list = (ConflationQueueList) _queue.getEntries(); } public void testListHasNoEntries() @@ -190,7 +190,7 @@ public class ConflationQueueListTest extends TestCase private int countEntries(ConflationQueueList list) { - QueueEntryIterator<ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList,QueueConsumer<?,ConflationQueueList.ConflationQueueEntry, ConflationQueue, ConflationQueueList>> iterator = + QueueEntryIterator iterator = list.iterator(); int count = 0; while(iterator.advance()) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConsumerListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConsumerListTest.java index dc920bf555..4a762afbdb 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConsumerListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/ConsumerListTest.java @@ -22,9 +22,7 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.message.MessageInstance; -import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.consumer.Consumer; -import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.test.utils.QpidTestCase; import static org.mockito.Mockito.mock; diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockMessageInstance.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockMessageInstance.java index 4df8f91ede..7c89f9855c 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockMessageInstance.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockMessageInstance.java @@ -31,7 +31,7 @@ import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.StateChangeListener; -public class MockMessageInstance implements MessageInstance<MockMessageInstance,Consumer> +public class MockMessageInstance implements MessageInstance { private ServerMessage _message; @@ -48,7 +48,7 @@ public class MockMessageInstance implements MessageInstance<MockMessageInstance, } @Override - public int routeToAlternate(final Action<? super MessageInstance<?, ? extends Consumer>> action, + public int routeToAlternate(final Action<? super MessageInstance> action, final ServerTransaction txn) { return 0; @@ -178,13 +178,13 @@ public class MockMessageInstance implements MessageInstance<MockMessageInstance, } @Override - public void addStateChangeListener(final StateChangeListener<? super MockMessageInstance, State> listener) + public void addStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { } @Override - public boolean removeStateChangeListener(final StateChangeListener<? super MockMessageInstance, State> listener) + public boolean removeStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { return false; } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/NotificationCheckTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/NotificationCheckTest.java index 3834fac2d0..9d4af86022 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/NotificationCheckTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/NotificationCheckTest.java @@ -36,19 +36,19 @@ import static org.apache.qpid.server.queue.NotificationCheck.QUEUE_DEPTH_ALERT; import junit.framework.TestCase; import org.apache.qpid.server.message.ServerMessage; -import org.apache.qpid.server.queue.AMQQueue.NotificationListener; +import org.apache.qpid.server.model.QueueNotificationListener; public class NotificationCheckTest extends TestCase { private ServerMessage<?> _message = mock(ServerMessage.class); private AMQQueue _queue = mock(AMQQueue.class); - private NotificationListener _listener = mock(NotificationListener.class); + private QueueNotificationListener _listener = mock(QueueNotificationListener .class); public void testMessageCountAlertFires() throws Exception { - when(_queue.getMaximumMessageCount()).thenReturn(1000l); - when(_queue.getMessageCount()).thenReturn(999, 1000, 1001); + when(_queue.getAlertThresholdQueueDepthMessages()).thenReturn(1000l); + when(_queue.getQueueDepthMessages()).thenReturn(999, 1000, 1001); MESSAGE_COUNT_ALERT.notifyIfNecessary(_message, _queue, _listener); verifyZeroInteractions(_listener); @@ -62,7 +62,7 @@ public class NotificationCheckTest extends TestCase public void testMessageSizeAlertFires() throws Exception { - when(_queue.getMaximumMessageSize()).thenReturn(1024l); + when(_queue.getAlertThresholdMessageSize()).thenReturn(1024l); when(_message.getSize()).thenReturn(1023l, 1024l, 1025l); MESSAGE_SIZE_ALERT.notifyIfNecessary(_message, _queue, _listener); @@ -78,7 +78,7 @@ public class NotificationCheckTest extends TestCase public void testMessageAgeAlertFires() throws Exception { long now = System.currentTimeMillis(); - when(_queue.getMaximumMessageAge()).thenReturn(1000l); + when(_queue.getAlertThresholdMessageAge()).thenReturn(1000l); when(_queue.getOldestMessageArrivalTime()).thenReturn(now, now - 15000); MESSAGE_AGE_ALERT.notifyIfNecessary(_message, _queue, _listener); @@ -91,8 +91,8 @@ public class NotificationCheckTest extends TestCase public void testQueueDepthAlertFires() throws Exception { - when(_queue.getMaximumQueueDepth()).thenReturn(1024l); - when(_queue.getQueueDepth()).thenReturn(1023l, 1024l, 2048l); + when(_queue.getAlertThresholdQueueDepthBytes()).thenReturn(1024l); + when(_queue.getQueueDepthBytes()).thenReturn(1023l, 1024l, 2048l); QUEUE_DEPTH_ALERT.notifyIfNecessary(_message, _queue, _listener); verifyZeroInteractions(_listener); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java index 44d12f2763..6e444419a4 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java @@ -56,7 +56,7 @@ public class PriorityQueueListTest extends QpidTestCase final VirtualHost virtualHost = mock(VirtualHost.class); when(virtualHost.getSecurityManager()).thenReturn(mock(SecurityManager.class)); PriorityQueue queue = new PriorityQueue(virtualHost, queueAttributes); - _list = queue.getEntries(); + _list = (PriorityQueueList) queue.getEntries(); for (int i = 0; i < PRIORITIES.length; i++) { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java index f6c700f959..9c8449ce5f 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java @@ -49,7 +49,7 @@ public class PriorityQueueTest extends AbstractQueueTestBase { // Enqueue messages in order - AbstractQueue queue = getQueue(); + AbstractQueue queue = (AbstractQueue) getQueue(); queue.enqueue(createMessage(1L, (byte) 10), null); queue.enqueue(createMessage(2L, (byte) 4), null); queue.enqueue(createMessage(3L, (byte) 0), null); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java index fbebdb6008..0657c8cdad 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java @@ -20,7 +20,6 @@ package org.apache.qpid.server.queue; import junit.framework.TestCase; -import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.RootMessageLogger; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -29,8 +28,6 @@ import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.message.MessageInstance.EntryState; import org.apache.qpid.server.model.Queue; -import org.apache.qpid.server.protocol.AMQSessionModel; -import org.apache.qpid.server.security.*; import org.apache.qpid.server.virtualhost.VirtualHost; import java.lang.reflect.Field; @@ -143,7 +140,7 @@ public abstract class QueueEntryImplTestBase extends TestCase MessageInstance.ConsumerAcquiredState owningState = new QueueEntryImpl.ConsumerAcquiredState(consumer); when(consumer.getOwningState()).thenReturn(owningState); - when(consumer.getId()).thenReturn(_consumerId++); + when(consumer.getConsumerNumber()).thenReturn(_consumerId++); return consumer; } @@ -213,7 +210,7 @@ public abstract class QueueEntryImplTestBase extends TestCase when(virtualHost.getSecurityManager()).thenReturn(mock(org.apache.qpid.server.security.SecurityManager.class)); StandardQueue queue = new StandardQueue(virtualHost, queueAttributes); - OrderedQueueEntryList queueEntryList = queue.getEntries(); + OrderedQueueEntryList queueEntryList = (OrderedQueueEntryList) queue.getEntries(); // create test entries for(int i = 0; i < numberOfEntries ; i++) @@ -223,7 +220,7 @@ public abstract class QueueEntryImplTestBase extends TestCase final MessageReference reference = mock(MessageReference.class); when(reference.getMessage()).thenReturn(message); when(message.newReference()).thenReturn(reference); - QueueEntryImpl entry = queueEntryList.add(message); + QueueEntryImpl entry = (QueueEntryImpl) queueEntryList.add(message); entries[i] = entry; } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java index 07d00daba5..39d53637e4 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java @@ -32,10 +32,10 @@ import static org.mockito.Mockito.when; /** * Abstract test class for QueueEntryList implementations. */ -public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, L extends QueueEntryList<E,Q,L,C>, C extends Consumer> extends TestCase +public abstract class QueueEntryListTestBase extends TestCase { - public abstract L getTestList(); - public abstract L getTestList(boolean newList); + public abstract QueueEntryList getTestList(); + public abstract QueueEntryList getTestList(boolean newList); public abstract long getExpectedFirstMsgId(); public abstract int getExpectedListLength(); public abstract ServerMessage getTestMessageToAdd(); @@ -45,7 +45,7 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte assertEquals("Unexpected head entry returned by getHead()", getTestList().getQueue(), getTestQueue()); } - protected abstract Q getTestQueue(); + protected abstract AMQQueue getTestQueue(); /** * Test to add a message with properties specific to the queue type. @@ -54,10 +54,10 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testAddSpecificMessage() { - final L list = getTestList(); + final QueueEntryList list = getTestList(); list.add(getTestMessageToAdd()); - final QueueEntryIterator<E,Q,L,C> iter = list.iterator(); + final QueueEntryIterator iter = list.iterator(); int count = 0; while(iter.advance()) { @@ -74,11 +74,11 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testAddGenericMessage() { - final L list = getTestList(); + final QueueEntryList list = getTestList(); final ServerMessage message = createServerMessage(666l); list.add(message); - final QueueEntryIterator<E,Q,L,C> iter = list.iterator(); + final QueueEntryIterator iter = list.iterator(); int count = 0; while(iter.advance()) { @@ -108,8 +108,8 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testListNext() { - final L entryList = getTestList(); - E entry = entryList.getHead(); + final QueueEntryList entryList = getTestList(); + QueueEntry entry = entryList.getHead(); int count = 0; while(entryList.next(entry) != null) { @@ -126,7 +126,7 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testIterator() { - final QueueEntryIterator<E,Q,L,C> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count = 0; while(iter.advance()) { @@ -144,10 +144,10 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte public void testDequeuedMessagedNotPresentInIterator() throws Exception { final int numberOfMessages = getExpectedListLength(); - final L entryList = getTestList(); + final QueueEntryList entryList = getTestList(); // dequeue all even messages - final QueueEntryIterator<E,Q,L,C> it1 = entryList.iterator(); + final QueueEntryIterator it1 = entryList.iterator(); int counter = 0; while (it1.advance()) { @@ -160,7 +160,7 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte } // iterate and check that dequeued messages are not returned by iterator - final QueueEntryIterator<E,Q,L,C> it2 = entryList.iterator(); + final QueueEntryIterator it2 = entryList.iterator(); int counter2 = 0; while(it2.advance()) { @@ -179,7 +179,7 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testGetHead() { - final E head = getTestList().getHead(); + final QueueEntry head = getTestList().getHead(); assertNull("Head entry should not contain an actual message", head.getMessage()); assertEquals("Unexpected message id for first list entry", getExpectedFirstMsgId(), getTestList().next(head) .getMessage().getMessageNumber()); @@ -191,16 +191,16 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testEntryDeleted() { - final E head = getTestList().getHead(); + final QueueEntry head = getTestList().getHead(); - final E first = getTestList().next(head); + final QueueEntry first = getTestList().next(head); first.delete(); - final E second = getTestList().next(head); + final QueueEntry second = getTestList().next(head); assertNotSame("After deletion the next entry should be different", first.getMessage().getMessageNumber(), second .getMessage().getMessageNumber()); - final E third = getTestList().next(first); + final QueueEntry third = getTestList().next(first); assertEquals("After deletion the deleted nodes next node should be the same as the next from head", second .getMessage().getMessageNumber(), third.getMessage().getMessageNumber()); } @@ -214,11 +214,11 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte */ public void testIteratorIgnoresDeletedFinalNode() throws Exception { - L list = getTestList(true); + QueueEntryList list = getTestList(true); int i = 0; - E queueEntry1 = list.add(createServerMessage(i++)); - E queueEntry2 = list.add(createServerMessage(i++)); + QueueEntry queueEntry1 = list.add(createServerMessage(i++)); + QueueEntry queueEntry2 = list.add(createServerMessage(i++)); assertSame(queueEntry2, list.next(queueEntry1)); assertNull(list.next(queueEntry2)); @@ -227,7 +227,7 @@ public abstract class QueueEntryListTestBase<E extends QueueEntry<E,Q,C>, Q exte queueEntry2.delete(); assertTrue("Deleting node should have succeeded", queueEntry2.isDeleted()); - QueueEntryIterator<E,Q,L,C> iter = list.iterator(); + QueueEntryIterator iter = list.iterator(); //verify the iterator isn't 'atTail', can advance, and returns the 1st QueueEntry assertFalse("Iterator should not have been 'atTail'", iter.atTail()); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SelfValidatingSortedQueueEntryList.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SelfValidatingSortedQueueEntryList.java index 87182dc8dc..0ea4ee930d 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SelfValidatingSortedQueueEntryList.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SelfValidatingSortedQueueEntryList.java @@ -51,7 +51,7 @@ public class SelfValidatingSortedQueueEntryList extends SortedQueueEntryList } @Override /** Overridden to automatically check queue properties before and after. */ - public void entryDeleted(SortedQueueEntry entry) + public void entryDeleted(QueueEntry entry) { assertQueueProperties(); //before delete super.entryDeleted(entry); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java index 87cda34cc9..9039654c15 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java @@ -50,7 +50,7 @@ public class SimpleQueueEntryImplTest extends QueueEntryImplTestBase StandardQueue queue = new StandardQueue(virtualHost, queueAttributes); - queueEntryList = queue.getEntries(); + queueEntryList = (OrderedQueueEntryList) queue.getEntries(); super.setUp(); } @@ -63,7 +63,7 @@ public class SimpleQueueEntryImplTest extends QueueEntryImplTestBase final MessageReference reference = mock(MessageReference.class); when(reference.getMessage()).thenReturn(message); when(message.newReference()).thenReturn(reference); - return queueEntryList.add(message); + return (QueueEntryImpl) queueEntryList.add(message); } public void testCompareTo() diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryListTest.java index 6dfc067db7..ef64226048 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryListTest.java @@ -40,7 +40,7 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> +public class SortedQueueEntryListTest extends QueueEntryListTestBase { private static SelfValidatingSortedQueueEntryList _sqel; @@ -90,13 +90,13 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue final VirtualHost virtualHost = mock(VirtualHost.class); when(virtualHost.getSecurityManager()).thenReturn(mock(org.apache.qpid.server.security.SecurityManager.class)); - _testQueue = new SortedQueue(virtualHost, attributes, new QueueEntryListFactory<SortedQueueEntry,SortedQueue,SortedQueueEntryList>() + _testQueue = new SortedQueue(virtualHost, attributes, new QueueEntryListFactory() { @Override - public SortedQueueEntryList createQueueEntryList(final SortedQueue queue) + public SortedQueueEntryList createQueueEntryList(final AMQQueue queue) { - return new SelfValidatingSortedQueueEntryList(queue, "KEY"); + return new SelfValidatingSortedQueueEntryList((SortedQueue) queue, "KEY"); } }); _sqel = (SelfValidatingSortedQueueEntryList) _testQueue.getEntries(); @@ -186,7 +186,7 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue super.testIterator(); // Test sorted order of list - final QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count = 0; while(iter.advance()) { @@ -195,12 +195,12 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue } } - private Object getSortedKeyValue(QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter) + private Object getSortedKeyValue(QueueEntryIterator iter) { return (iter.getNode()).getMessage().getMessageHeader().getHeader("KEY"); } - private Long getMessageId(QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter) + private Long getMessageId(QueueEntryIterator iter) { return (iter.getNode()).getMessage().getMessageNumber(); } @@ -217,7 +217,7 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue _sqel.add(msg); } - final QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count=0; while(iter.advance()) { @@ -238,7 +238,7 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue _sqel.add(msg); } - final QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count=0; while(iter.advance()) { @@ -260,7 +260,7 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue _sqel.add(msg); } - final QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count=0; while(iter.advance()) { @@ -283,7 +283,7 @@ public class SortedQueueEntryListTest extends QueueEntryListTestBase<SortedQueue _sqel.add(msg); } - final QueueEntryIterator<SortedQueueEntry, SortedQueue, SortedQueueEntryList, QueueConsumer<?,SortedQueueEntry, SortedQueue, SortedQueueEntryList>> iter = getTestList().iterator(); + final QueueEntryIterator iter = getTestList().iterator(); int count=0; while(iter.advance()) { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java index c6bc126510..c1d5a9e9fe 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java @@ -58,13 +58,13 @@ public class SortedQueueEntryTest extends QueueEntryImplTestBase final VirtualHost virtualHost = mock(VirtualHost.class); when(virtualHost.getSecurityManager()).thenReturn(mock(org.apache.qpid.server.security.SecurityManager.class)); - SortedQueue queue = new SortedQueue(virtualHost, attributes, new QueueEntryListFactory<SortedQueueEntry,SortedQueue,SortedQueueEntryList>() + SortedQueue queue = new SortedQueue(virtualHost, attributes, new QueueEntryListFactory() { @Override - public SortedQueueEntryList createQueueEntryList(final SortedQueue queue) + public SortedQueueEntryList createQueueEntryList(final AMQQueue queue) { - return new SelfValidatingSortedQueueEntryList(queue, "KEY"); + return new SelfValidatingSortedQueueEntryList((SortedQueue) queue, "KEY"); } }); _queueEntryList = (SelfValidatingSortedQueueEntryList) queue.getEntries(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java index 302c1f1870..c03727087a 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java @@ -38,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class StandardQueueEntryListTest extends QueueEntryListTestBase<StandardQueueEntry, StandardQueue, StandardQueueEntryList, QueueConsumer<?,StandardQueueEntry, StandardQueue, StandardQueueEntryList>> +public class StandardQueueEntryListTest extends QueueEntryListTestBase { private StandardQueue _testQueue; @@ -62,7 +62,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase<StandardQ CurrentActor.set(logActor); _testQueue = new StandardQueue(virtualHost, queueAttributes); - _sqel = _testQueue.getEntries(); + _sqel = (StandardQueueEntryList) _testQueue.getEntries(); for(int i = 1; i <= 100; i++) { final ServerMessage message = mock(ServerMessage.class); @@ -107,7 +107,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase<StandardQ when(virtualHost.getSecurityManager()).thenReturn(mock(SecurityManager.class)); StandardQueue queue = new StandardQueue(virtualHost, queueAttributes); - return queue.getEntries(); + return (StandardQueueEntryList) queue.getEntries(); } else { @@ -160,7 +160,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase<StandardQ entriesMap.put(i,bleh); } - OrderedQueueEntry head = sqel.getHead(); + OrderedQueueEntry head = (OrderedQueueEntry) sqel.getHead(); //We shall now delete some specific messages mid-queue that will lead to //requiring a scavenge once the requested threshold of 9 deletes is passed @@ -256,7 +256,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase<StandardQ final MessageReference reference = mock(MessageReference.class); when(reference.getMessage()).thenReturn(message); when(message.newReference()).thenReturn(reference); - entries[i] = queueEntryList.add(message); + entries[i] = (OrderedQueueEntry) queueEntryList.add(message); } // test getNext for not acquired entries diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java index da69700f6b..12ae494fc8 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java @@ -40,7 +40,7 @@ import java.util.concurrent.TimeUnit; import static org.mockito.Mockito.mock; -public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, StandardQueue, StandardQueueEntryList> +public class StandardQueueTest extends AbstractQueueTestBase { public void testCreationFailsWithNoVhost() @@ -60,6 +60,10 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, assertTrue("Exception was not about missing vhost", e.getMessage().contains("Host")); } + catch(NullPointerException e) + { + + } } @@ -76,7 +80,7 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, ServerMessage message = createMessage(25l); QueueConsumer consumer = - getQueue().addConsumer(getConsumerTarget(), null, message.getClass(), "test", + (QueueConsumer) getQueue().addConsumer(getConsumerTarget(), null, message.getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); @@ -99,59 +103,59 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, final MockConsumer consumer1 = new MockConsumer(); consumer1.setActive(true); consumer1.setState(ConsumerTarget.State.ACTIVE); - assertEquals("Unexpected active consumer count", 0, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 0, queue.getConsumerCountWithCredit()); queue.addConsumer(consumer1, null, createMessage(-1l).getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); //verify adding an inactive consumer doesn't increase the count final MockConsumer consumer2 = new MockConsumer(); consumer2.setActive(false); consumer2.setState(ConsumerTarget.State.SUSPENDED); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); queue.addConsumer(consumer2, null, createMessage(-1l).getClass(), "test", EnumSet.of(Consumer.Option.ACQUIRES, Consumer.Option.SEES_REQUEUES)); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); //verify behaviour in face of expected state changes: //verify a consumer going suspended->active increases the count consumer2.setState(ConsumerTarget.State.ACTIVE); - assertEquals("Unexpected active consumer count", 2, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 2, queue.getConsumerCountWithCredit()); //verify a consumer going active->suspended decreases the count consumer2.setState(ConsumerTarget.State.SUSPENDED); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); //verify a consumer going suspended->closed doesn't change the count consumer2.setState(ConsumerTarget.State.CLOSED); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); //verify a consumer going active->active doesn't change the count consumer1.setState(ConsumerTarget.State.ACTIVE); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); consumer1.setState(ConsumerTarget.State.SUSPENDED); - assertEquals("Unexpected active consumer count", 0, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 0, queue.getConsumerCountWithCredit()); //verify a consumer going suspended->suspended doesn't change the count consumer1.setState(ConsumerTarget.State.SUSPENDED); - assertEquals("Unexpected active consumer count", 0, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 0, queue.getConsumerCountWithCredit()); consumer1.setState(ConsumerTarget.State.ACTIVE); - assertEquals("Unexpected active consumer count", 1, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 1, queue.getConsumerCountWithCredit()); //verify a consumer going active->closed decreases the count consumer1.setState(ConsumerTarget.State.CLOSED); - assertEquals("Unexpected active consumer count", 0, queue.getActiveConsumerCount()); + assertEquals("Unexpected active consumer count", 0, queue.getConsumerCountWithCredit()); } @@ -210,7 +214,8 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, }; // put messages - List<StandardQueueEntry> entries = enqueueGivenNumberOfMessages(testQueue, messageNumber); + List<StandardQueueEntry> entries = + (List<StandardQueueEntry>) enqueueGivenNumberOfMessages(testQueue, messageNumber); // dequeue message dequeueMessage(testQueue, dequeueMessageIndex); @@ -264,7 +269,7 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, } - private static class DequeuedQueue extends AbstractQueue<DequeuedQueueEntry, DequeuedQueue, DequeuedQueueEntryList> + private static class DequeuedQueue extends AbstractQueue { public DequeuedQueue(VirtualHost virtualHost) @@ -282,30 +287,30 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, return attributes; } } - private static class DequeuedQueueEntryListFactory implements QueueEntryListFactory<DequeuedQueueEntry, DequeuedQueue, DequeuedQueueEntryList> + private static class DequeuedQueueEntryListFactory implements QueueEntryListFactory { - public DequeuedQueueEntryList createQueueEntryList(DequeuedQueue queue) + public DequeuedQueueEntryList createQueueEntryList(AMQQueue queue) { /** * Override SimpleQueueEntryList to create a dequeued * entries for messages with even id */ - return new DequeuedQueueEntryList(queue); + return new DequeuedQueueEntryList((DequeuedQueue) queue); } } - private static class DequeuedQueueEntryList extends OrderedQueueEntryList<DequeuedQueueEntry, DequeuedQueue, DequeuedQueueEntryList> + private static class DequeuedQueueEntryList extends OrderedQueueEntryList { - private static final HeadCreator<DequeuedQueueEntry,DequeuedQueue,DequeuedQueueEntryList> HEAD_CREATOR = - new HeadCreator<DequeuedQueueEntry,DequeuedQueue,DequeuedQueueEntryList>() + private static final HeadCreator HEAD_CREATOR = + new HeadCreator() { @Override - public DequeuedQueueEntry createHead(final DequeuedQueueEntryList list) + public DequeuedQueueEntry createHead(final QueueEntryList list) { - return new DequeuedQueueEntry(list); + return new DequeuedQueueEntry((DequeuedQueueEntryList) list); } }; @@ -326,7 +331,7 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, } - private static class DequeuedQueueEntry extends OrderedQueueEntry<DequeuedQueueEntry,DequeuedQueue,DequeuedQueueEntryList> + private static class DequeuedQueueEntry extends OrderedQueueEntry { private final ServerMessage _message; @@ -354,7 +359,7 @@ public class StandardQueueTest extends AbstractQueueTestBase<StandardQueueEntry, } @Override - public boolean acquire(QueueConsumer<?,DequeuedQueueEntry,DequeuedQueue,DequeuedQueueEntryList> sub) + public boolean acquire(Consumer sub) { if(_message.getMessageNumber() % 2 == 0) { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java index 4cbe385fed..56b931f37e 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java @@ -38,8 +38,9 @@ import java.util.UUID; import org.apache.commons.configuration.Configuration; import org.apache.qpid.common.AMQPFilterTypes; -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.message.EnqueueableMessage; @@ -80,7 +81,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest private TransactionLogRecoveryHandler.QueueEntryRecoveryHandler _queueEntryRecoveryHandler; private TransactionLogRecoveryHandler.DtxRecordRecoveryHandler _dtxRecordRecoveryHandler; - private Exchange _exchange = mock(Exchange.class); + private NonDefaultExchange _exchange = mock(NonDefaultExchange.class); private static final String ROUTING_KEY = "routingKey"; private static final String QUEUE_NAME = "queueName"; private Map<String,Object> _bindingArgs; @@ -145,7 +146,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest public void testCreateExchange() throws Exception { - Exchange exchange = createTestExchange(); + ExchangeImpl exchange = createTestExchange(); DurableConfigurationStoreHelper.createExchange(_configStore, exchange); reopenStore(); @@ -177,7 +178,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest public void testRemoveExchange() throws Exception { - Exchange exchange = createTestExchange(); + ExchangeImpl exchange = createTestExchange(); DurableConfigurationStoreHelper.createExchange(_configStore, exchange); DurableConfigurationStoreHelper.removeExchange(_configStore, exchange); @@ -189,7 +190,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest public void testBindQueue() throws Exception { AMQQueue queue = createTestQueue(QUEUE_NAME, "queueOwner", false, null); - Binding binding = new Binding(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue, + BindingImpl binding = new BindingImpl(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue, _exchange, _bindingArgs); DurableConfigurationStoreHelper.createBinding(_configStore, binding); @@ -208,7 +209,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest public void testUnbindQueue() throws Exception { AMQQueue queue = createTestQueue(QUEUE_NAME, "queueOwner", false, null); - Binding binding = new Binding(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue, + BindingImpl binding = new BindingImpl(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue, _exchange, _bindingArgs); DurableConfigurationStoreHelper.createBinding(_configStore, binding); @@ -257,7 +258,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest public void testCreateQueueAMQQueueWithAlternateExchange() throws Exception { - Exchange alternateExchange = createTestAlternateExchange(); + NonDefaultExchange alternateExchange = createTestAlternateExchange(); AMQQueue queue = createTestQueue(getName(), getName() + "Owner", true, alternateExchange, null); DurableConfigurationStoreHelper.createQueue(_configStore, queue); @@ -273,10 +274,10 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest verify(_recoveryHandler).configuredObject(eq(_queueId), eq(QUEUE), eq(queueAttributes)); } - private Exchange createTestAlternateExchange() + private NonDefaultExchange createTestAlternateExchange() { UUID exchUuid = UUID.randomUUID(); - Exchange alternateExchange = mock(Exchange.class); + NonDefaultExchange alternateExchange = mock(NonDefaultExchange.class); when(alternateExchange.getId()).thenReturn(exchUuid); return alternateExchange; } @@ -317,7 +318,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest DurableConfigurationStoreHelper.createQueue(_configStore, queue); // update the queue to have exclusive=false - Exchange alternateExchange = createTestAlternateExchange(); + NonDefaultExchange alternateExchange = createTestAlternateExchange(); queue = createTestQueue(getName(), getName() + "Owner", false, alternateExchange, attributes); DurableConfigurationStoreHelper.updateQueue(_configStore, queue); @@ -361,10 +362,10 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest private AMQQueue createTestQueue(String queueName, String queueOwner, boolean exclusive, - Exchange alternateExchange, + NonDefaultExchange alternateExchange, final Map<String, Object> arguments) throws StoreException { - AMQQueue queue = mock(AMQQueue.class); + AMQQueue<?> queue = mock(AMQQueue.class); when(queue.getName()).thenReturn(queueName); when(queue.isExclusive()).thenReturn(exclusive); when(queue.getId()).thenReturn(_queueId); @@ -398,9 +399,9 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest return queue; } - private Exchange createTestExchange() + private ExchangeImpl createTestExchange() { - Exchange exchange = mock(Exchange.class); + ExchangeImpl exchange = mock(ExchangeImpl.class); when(exchange.getName()).thenReturn(getName()); when(exchange.getTypeName()).thenReturn(getName() + "Type"); when(exchange.isAutoDelete()).thenReturn(true); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java index 1a7dfe9ca0..ea8b492552 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java @@ -22,7 +22,6 @@ package org.apache.qpid.server.util; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.only; import static org.mockito.Mockito.when; import java.net.SocketAddress; @@ -32,13 +31,13 @@ import java.util.UUID; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore; import org.apache.qpid.server.exchange.DefaultExchangeFactory; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.logging.RootMessageLogger; import org.apache.qpid.server.logging.SystemOutMessageLogger; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -171,7 +170,7 @@ public class BrokerTestHelper return connection; } - public static Exchange createExchange(String hostName) throws Exception + public static ExchangeImpl createExchange(String hostName) throws Exception { SecurityManager securityManager = new SecurityManager(mock(Broker.class), false); VirtualHost virtualHost = mock(VirtualHost.class); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java index 324a0a809e..90ba03a789 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java @@ -27,10 +27,11 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; + +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.exchange.DirectExchange; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.ExchangeFactory; import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.exchange.HeadersExchange; @@ -69,8 +70,8 @@ public class DurableConfigurationRecovererTest extends QpidTestCase private static final String CUSTOM_EXCHANGE_NAME = "customExchange"; private DurableConfigurationRecoverer _durableConfigurationRecoverer; - private Exchange _directExchange; - private Exchange _topicExchange; + private NonDefaultExchange _directExchange; + private NonDefaultExchange _topicExchange; private VirtualHost _vhost; private DurableConfigurationStore _store; private ExchangeFactory _exchangeFactory; @@ -83,11 +84,11 @@ public class DurableConfigurationRecovererTest extends QpidTestCase super.setUp(); - _directExchange = mock(Exchange.class); + _directExchange = mock(NonDefaultExchange.class); when(_directExchange.getExchangeType()).thenReturn(DirectExchange.TYPE); - _topicExchange = mock(Exchange.class); + _topicExchange = mock(NonDefaultExchange.class); when(_topicExchange.getExchangeType()).thenReturn(TopicExchange.TYPE); AMQQueue queue = mock(AMQQueue.class); @@ -100,14 +101,14 @@ public class DurableConfigurationRecovererTest extends QpidTestCase when(_vhost.getQueue(eq(QUEUE_ID))).thenReturn(queue); - final ArgumentCaptor<Exchange> registeredExchange = ArgumentCaptor.forClass(Exchange.class); + final ArgumentCaptor<NonDefaultExchange> registeredExchange = ArgumentCaptor.forClass(NonDefaultExchange.class); doAnswer(new Answer() { @Override public Object answer(final InvocationOnMock invocation) throws Throwable { - Exchange exchange = registeredExchange.getValue(); + NonDefaultExchange exchange = registeredExchange.getValue(); when(_exchangeRegistry.getExchange(eq(exchange.getId()))).thenReturn(exchange); when(_exchangeRegistry.getExchange(eq(exchange.getName()))).thenReturn(exchange); return null; @@ -138,14 +139,14 @@ public class DurableConfigurationRecovererTest extends QpidTestCase when(_vhost.getQueue(eq(queueName))).thenReturn(queue); when(_vhost.getQueue(eq(queueId))).thenReturn(queue); - final ArgumentCaptor<Exchange> altExchangeArg = ArgumentCaptor.forClass(Exchange.class); + final ArgumentCaptor<NonDefaultExchange> altExchangeArg = ArgumentCaptor.forClass(NonDefaultExchange.class); doAnswer( new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { - final Exchange value = altExchangeArg.getValue(); + final NonDefaultExchange value = altExchangeArg.getValue(); when(queue.getAlternateExchange()).thenReturn(value); return null; } @@ -156,7 +157,8 @@ public class DurableConfigurationRecovererTest extends QpidTestCase if (args.containsKey(Queue.ALTERNATE_EXCHANGE)) { final UUID exchangeId = UUID.fromString(args.get(Queue.ALTERNATE_EXCHANGE).toString()); - final Exchange exchange = _exchangeRegistry.getExchange(exchangeId); + final NonDefaultExchange exchange = + (NonDefaultExchange) _exchangeRegistry.getExchange(exchangeId); queue.setAlternateExchange(exchange); } return queue; @@ -265,13 +267,13 @@ public class DurableConfigurationRecovererTest extends QpidTestCase "org.apache.qpid.server.model.Exchange", createExchange(CUSTOM_EXCHANGE_NAME, HeadersExchange.TYPE)); - final Exchange customExchange = mock(Exchange.class); + final NonDefaultExchange customExchange = mock(NonDefaultExchange.class); final ArgumentCaptor<Map> attributesCaptor = ArgumentCaptor.forClass(Map.class); - when(_exchangeFactory.restoreExchange(attributesCaptor.capture())).thenAnswer(new Answer<Exchange>() + when(_exchangeFactory.restoreExchange(attributesCaptor.capture())).thenAnswer(new Answer<NonDefaultExchange>() { @Override - public Exchange answer(final InvocationOnMock invocation) throws Throwable + public NonDefaultExchange answer(final InvocationOnMock invocation) throws Throwable { Map arguments = attributesCaptor.getValue(); if(CUSTOM_EXCHANGE_NAME.equals(arguments.get(org.apache.qpid.server.model.Exchange.NAME)) @@ -395,17 +397,17 @@ public class DurableConfigurationRecovererTest extends QpidTestCase final UUID queueId = new UUID(1, 0); final UUID exchangeId = new UUID(2, 0); - final Exchange customExchange = mock(Exchange.class); + final NonDefaultExchange customExchange = mock(NonDefaultExchange.class); when(customExchange.getId()).thenReturn(exchangeId); when(customExchange.getName()).thenReturn(CUSTOM_EXCHANGE_NAME); final ArgumentCaptor<Map> attributesCaptor = ArgumentCaptor.forClass(Map.class); - when(_exchangeFactory.restoreExchange(attributesCaptor.capture())).thenAnswer(new Answer<Exchange>() + when(_exchangeFactory.restoreExchange(attributesCaptor.capture())).thenAnswer(new Answer<NonDefaultExchange>() { @Override - public Exchange answer(final InvocationOnMock invocation) throws Throwable + public NonDefaultExchange answer(final InvocationOnMock invocation) throws Throwable { Map arguments = attributesCaptor.getValue(); if(CUSTOM_EXCHANGE_NAME.equals(arguments.get(org.apache.qpid.server.model.Exchange.NAME)) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java index 8c6725ea14..baa62b8ea2 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java @@ -24,8 +24,10 @@ import java.util.Collection; import java.util.Map; import java.util.concurrent.ScheduledFuture; import org.apache.qpid.server.configuration.VirtualHostConfiguration; +import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.connection.IConnectionRegistry; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.exchange.NonDefaultExchange; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.plugin.ExchangeType; @@ -158,13 +160,13 @@ public class MockVirtualHost implements VirtualHost } @Override - public Exchange createExchange(Map<String,Object> attributes) + public NonDefaultExchange createExchange(Map<String,Object> attributes) { return null; } @Override - public void removeExchange(Exchange exchange, boolean force) + public void removeExchange(ExchangeImpl exchange, boolean force) { } @@ -175,31 +177,31 @@ public class MockVirtualHost implements VirtualHost } @Override - public Exchange getExchange(String name) + public ExchangeImpl getExchange(String name) { return null; } @Override - public Exchange getExchange(UUID id) + public ExchangeImpl getExchange(UUID id) { return null; } @Override - public Exchange getDefaultExchange() + public ExchangeImpl getDefaultExchange() { return null; } @Override - public Collection<Exchange> getExchanges() + public Collection<ExchangeImpl> getExchanges() { return null; } @Override - public Collection<ExchangeType<? extends Exchange>> getExchangeTypes() + public Collection<ExchangeType<? extends ExchangeImpl>> getExchangeTypes() { return null; } @@ -350,4 +352,22 @@ public class MockVirtualHost implements VirtualHost { return 0; } + + @Override + public TaskExecutor getTaskExecutor() + { + return null; + } + + @Override + public Collection<NonDefaultExchange> getExchangesExceptDefault() + { + return null; + } + + @Override + public org.apache.qpid.server.model.VirtualHost getModel() + { + return null; + } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java index 5a808c87d8..61569cc3e7 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java @@ -28,10 +28,11 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.configuration.VirtualHostConfiguration; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.AbstractExchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.SecurityManager; @@ -207,14 +208,14 @@ public class StandardVirtualHostTest extends QpidTestCase File config = writeConfigFile(vhostName, queueName, exchangeName, false, new String[]{"ping","pong"}, bindingArguments); VirtualHost vhost = createVirtualHost(vhostName, config); - Exchange exch = vhost.getExchange(getName() +".direct"); - Collection<Binding> bindings = exch.getBindings(); + ExchangeImpl exch = vhost.getExchange(getName() +".direct"); + Collection<BindingImpl> bindings = ((AbstractExchange)exch).getBindings(); assertNotNull("Bindings cannot be null", bindings); assertEquals("Unexpected number of bindings", 3, bindings.size()); boolean foundPong = false; boolean foundPing = false; - for (Binding binding : bindings) + for (BindingImpl binding : bindings) { String qn = binding.getAMQQueue().getName(); assertEquals("Unexpected queue name", getName(), qn); @@ -252,10 +253,10 @@ public class StandardVirtualHostTest extends QpidTestCase AMQQueue queue = vhost.getQueue(queueName); assertNotNull("queue should exist", queue); - Exchange defaultExch = vhost.getDefaultExchange(); + ExchangeImpl defaultExch = vhost.getDefaultExchange(); assertTrue("queue should have been bound to default exchange with its name", defaultExch.isBound(queueName, queue)); - Exchange exch = vhost.getExchange(exchangeName); + ExchangeImpl exch = vhost.getExchange(exchangeName); assertTrue("queue should have been bound to " + exchangeName + " with its name", exch.isBound(queueName, queue)); for(String key: routingKeys) diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java index ff4bd1dc2e..69c625d41d 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.protocol.v0_10; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.flow.FlowCreditManager; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -406,7 +406,7 @@ public class ConsumerTarget_0_10 extends AbstractConsumerTarget implements FlowC if(owningResource instanceof AMQQueue) { final AMQQueue queue = (AMQQueue)owningResource; - final Exchange alternateExchange = queue.getAlternateExchange(); + final ExchangeImpl alternateExchange = queue.getAlternateExchange(); if(alternateExchange != null) { diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java index 12c10240bb..236a955ea9 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java @@ -936,10 +936,10 @@ public class ServerSession extends Session return getId().compareTo(o.getId()); } - private class CheckCapacityAction<C extends Consumer> implements Action<MessageInstance<?,C>> + private class CheckCapacityAction implements Action<MessageInstance> { @Override - public void performAction(final MessageInstance<?,C> entry) + public void performAction(final MessageInstance entry) { TransactionLogResource queue = entry.getOwningResource(); if(queue instanceof CapacityChecker) diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java index e70b34a426..1fb82efd2d 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java @@ -27,13 +27,11 @@ import java.util.LinkedHashMap; import java.util.UUID; import org.apache.log4j.Logger; -import org.apache.qpid.server.binding.*; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.HeadersExchange; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterManager; @@ -688,7 +686,7 @@ public class ServerSessionDelegate extends SessionDelegate if(method.getPassive()) { - Exchange exchange = getExchange(session, exchangeName); + ExchangeImpl exchange = getExchange(session, exchangeName); if(exchange == null) { @@ -736,7 +734,7 @@ public class ServerSessionDelegate extends SessionDelegate } catch(ExchangeExistsException e) { - Exchange exchange = e.getExistingExchange(); + ExchangeImpl exchange = e.getExistingExchange(); if(!exchange.getTypeName().equals(method.getType())) { exception(session, method, ExecutionErrorCode.NOT_ALLOWED, @@ -776,7 +774,7 @@ public class ServerSessionDelegate extends SessionDelegate ((ServerSession)session).close(errorCode.getValue(), description); } - private Exchange getExchange(Session session, String exchangeName) + private ExchangeImpl getExchange(Session session, String exchangeName) { return getVirtualHost(session).getExchange(exchangeName); } @@ -827,7 +825,7 @@ public class ServerSessionDelegate extends SessionDelegate return; } - Exchange exchange = getExchange(session, method.getExchange()); + ExchangeImpl exchange = getExchange(session, method.getExchange()); if(exchange == null) { @@ -862,7 +860,7 @@ public class ServerSessionDelegate extends SessionDelegate return false; } - private boolean isStandardExchange(Exchange exchange, Collection<ExchangeType<? extends Exchange>> registeredTypes) + private boolean isStandardExchange(ExchangeImpl exchange, Collection<ExchangeType<? extends ExchangeImpl>> registeredTypes) { for(ExchangeType type : registeredTypes) { @@ -880,7 +878,7 @@ public class ServerSessionDelegate extends SessionDelegate ExchangeQueryResult result = new ExchangeQueryResult(); - Exchange exchange = getExchange(session, method.getName()); + ExchangeImpl exchange = getExchange(session, method.getName()); if(exchange != null) { @@ -919,7 +917,7 @@ public class ServerSessionDelegate extends SessionDelegate method.setBindingKey(method.getQueue()); } AMQQueue queue = virtualHost.getQueue(method.getQueue()); - Exchange exchange = virtualHost.getExchange(method.getExchange()); + ExchangeImpl exchange = virtualHost.getExchange(method.getExchange()); if(queue == null) { exception(session, method, ExecutionErrorCode.NOT_FOUND, "Queue: '" + method.getQueue() + "' not found"); @@ -978,7 +976,7 @@ public class ServerSessionDelegate extends SessionDelegate else { AMQQueue queue = virtualHost.getQueue(method.getQueue()); - Exchange exchange = virtualHost.getExchange(method.getExchange()); + ExchangeImpl exchange = virtualHost.getExchange(method.getExchange()); if(queue == null) { exception(session, method, ExecutionErrorCode.NOT_FOUND, "Queue: '" + method.getQueue() + "' not found"); @@ -991,10 +989,9 @@ public class ServerSessionDelegate extends SessionDelegate { try { - Binding binding = exchange.getBinding(method.getBindingKey(), queue); - if(binding != null) + if(exchange.hasBinding(method.getBindingKey(), queue)) { - binding.delete(); + exchange.deleteBinding(method.getBindingKey(), queue); } } catch (AccessControlException e) @@ -1011,7 +1008,7 @@ public class ServerSessionDelegate extends SessionDelegate ExchangeBoundResult result = new ExchangeBoundResult(); VirtualHost virtualHost = getVirtualHost(session); - Exchange exchange; + ExchangeImpl exchange; AMQQueue queue; if(method.hasExchange()) { @@ -1378,7 +1375,7 @@ public class ServerSessionDelegate extends SessionDelegate arguments.put(attrName, queue.getAttribute(attrName)); } result.setArguments(QueueArgumentsConverter.convertModelArgsToWire(arguments)); - result.setMessageCount(queue.getMessageCount()); + result.setMessageCount(queue.getQueueDepthMessages()); result.setSubscriberCount(queue.getConsumerCount()); } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java index 453f3035e1..9e0c5b6be6 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java @@ -32,6 +32,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; import org.apache.qpid.server.connection.SessionPrincipal; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; @@ -48,7 +49,6 @@ import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.TransactionTimeoutHelper; import org.apache.qpid.server.TransactionTimeoutHelper.CloseAction; import org.apache.qpid.server.configuration.BrokerProperties; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.filter.FilterManagerFactory; import org.apache.qpid.server.filter.SimpleFilterManager; @@ -1267,14 +1267,14 @@ public class AMQChannel<T extends AMQProtocolSession<T>> } - private class ImmediateAction<C extends Consumer> implements Action<MessageInstance<?,C>> + private class ImmediateAction implements Action<MessageInstance> { public ImmediateAction() { } - public void performAction(MessageInstance<?,C> entry) + public void performAction(MessageInstance entry) { TransactionLogResource queue = entry.getOwningResource(); @@ -1332,10 +1332,10 @@ public class AMQChannel<T extends AMQProtocolSession<T>> } } - private final class CapacityCheckAction<C extends Consumer> implements Action<MessageInstance<?,C>> + private final class CapacityCheckAction implements Action<MessageInstance> { @Override - public void performAction(final MessageInstance<?,C> entry) + public void performAction(final MessageInstance entry) { TransactionLogResource queue = entry.getOwningResource(); if(queue instanceof CapacityChecker) @@ -1569,7 +1569,7 @@ public class AMQChannel<T extends AMQProtocolSession<T>> { final AMQQueue queue = (AMQQueue) owningResource; - final Exchange altExchange = queue.getAlternateExchange(); + final ExchangeImpl altExchange = queue.getAlternateExchange(); if (altExchange == null) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicGetMethodHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicGetMethodHandler.java index 611999d8c6..f620abf30f 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicGetMethodHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicGetMethodHandler.java @@ -210,7 +210,7 @@ public class BasicGetMethodHandler implements StateAwareMethodListener<BasicGetB props, _channel.getChannelId(), deliveryTag, - _queue.getMessageCount()); + _queue.getQueueDepthMessages()); _deliveredMessage = true; } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeBoundHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeBoundHandler.java index 4ebddb0f68..27837844ff 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeBoundHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeBoundHandler.java @@ -25,8 +25,8 @@ import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.ExchangeBoundBody; import org.apache.qpid.framing.ExchangeBoundOkBody; import org.apache.qpid.framing.MethodRegistry; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.protocol.v0_8.AMQChannel; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; @@ -82,7 +82,7 @@ public class ExchangeBoundHandler implements StateAwareMethodListener<ExchangeBo AMQShortString exchangeName = body.getExchange() == null ? AMQShortString.EMPTY_STRING : body.getExchange(); AMQShortString queueName = body.getQueue(); AMQShortString routingKey = body.getRoutingKey(); - Exchange exchange = virtualHost.getExchange(exchangeName.toString()); + ExchangeImpl exchange = virtualHost.getExchange(exchangeName.toString()); ExchangeBoundOkBody response; if (exchange == null) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java index 9446f53188..3b630c684c 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java @@ -30,13 +30,12 @@ import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.ExchangeDeclareBody; import org.apache.qpid.framing.MethodRegistry; import org.apache.qpid.protocol.AMQConstant; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.protocol.v0_8.AMQChannel; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener; -import org.apache.qpid.server.virtualhost.AbstractVirtualHost; import org.apache.qpid.server.virtualhost.ExchangeExistsException; import org.apache.qpid.server.virtualhost.ReservedExchangeNameException; import org.apache.qpid.server.virtualhost.UnknownExchangeException; @@ -77,7 +76,7 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange _logger.debug("Request to declare exchange of type " + body.getType() + " with name " + exchangeName); } - Exchange exchange; + ExchangeImpl exchange; if (body.getPassive()) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeleteHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeleteHandler.java index bbe6028a63..720677064b 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeleteHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeleteHandler.java @@ -24,8 +24,8 @@ import org.apache.qpid.AMQException; import org.apache.qpid.framing.ExchangeDeleteBody; import org.apache.qpid.framing.ExchangeDeleteOkBody; import org.apache.qpid.protocol.AMQConstant; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.protocol.v0_8.AMQChannel; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener; @@ -62,7 +62,7 @@ public class ExchangeDeleteHandler implements StateAwareMethodListener<ExchangeD { final String exchangeName = body.getExchange() == null ? null : body.getExchange().toString(); - final Exchange exchange = virtualHost.getExchange(exchangeName); + final ExchangeImpl exchange = virtualHost.getExchange(exchangeName); if(exchange == null) { throw body.getChannelException(AMQConstant.NOT_FOUND, "No such exchange: " + body.getExchange()); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java index 7ac71babf3..1e0382f456 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java @@ -29,10 +29,9 @@ import org.apache.qpid.framing.FieldTable; import org.apache.qpid.framing.MethodRegistry; import org.apache.qpid.framing.QueueBindBody; import org.apache.qpid.protocol.AMQConstant; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.protocol.v0_8.AMQChannel; -import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; @@ -103,7 +102,7 @@ public class QueueBindHandler implements StateAwareMethodListener<QueueBindBody> throw body.getChannelException(AMQConstant.NOT_FOUND, "Queue " + queueName + " does not exist."); } final String exchangeName = body.getExchange() == null ? null : body.getExchange().toString(); - final Exchange exch = virtualHost.getExchange(exchangeName); + final ExchangeImpl exch = virtualHost.getExchange(exchangeName); if (exch == null) { throw body.getChannelException(AMQConstant.NOT_FOUND, "Exchange " + exchangeName + " does not exist."); @@ -121,13 +120,7 @@ public class QueueBindHandler implements StateAwareMethodListener<QueueBindBody> if(!exch.addBinding(bindingKey, queue, arguments) && TopicExchange.TYPE.equals(exch.getExchangeType())) { - Binding oldBinding = exch.getBinding(bindingKey, queue); - - Map<String, Object> oldArgs = oldBinding.getArguments(); - if((oldArgs == null && !arguments.isEmpty()) || (oldArgs != null && !oldArgs.equals(arguments))) - { - exch.replaceBinding(oldBinding.getId(), bindingKey, queue, arguments); - } + exch.replaceBinding(bindingKey, queue, arguments); } } } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java index 4a3bd1e921..97aac8424a 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java @@ -163,7 +163,7 @@ public class QueueDeclareHandler implements StateAwareMethodListener<QueueDeclar MethodRegistry methodRegistry = protocolConnection.getMethodRegistry(); QueueDeclareOkBody responseBody = methodRegistry.createQueueDeclareOkBody(queueName, - queue.getMessageCount(), + queue.getQueueDepthMessages(), queue.getConsumerCount()); protocolConnection.writeFrame(responseBody.generateFrame(channelId)); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueUnbindHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueUnbindHandler.java index f6dbd0cee0..a828ca323d 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueUnbindHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueUnbindHandler.java @@ -30,9 +30,8 @@ import org.apache.qpid.framing.QueueUnbindBody; import org.apache.qpid.framing.amqp_0_9.MethodRegistry_0_9; import org.apache.qpid.framing.amqp_0_91.MethodRegistry_0_91; import org.apache.qpid.protocol.AMQConstant; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.protocol.v0_8.AMQChannel; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; @@ -94,13 +93,13 @@ public class QueueUnbindHandler implements StateAwareMethodListener<QueueUnbindB { throw body.getChannelException(AMQConstant.NOT_FOUND, "Queue " + body.getQueue() + " does not exist."); } - final Exchange exch = virtualHost.getExchange(body.getExchange() == null ? null : body.getExchange().toString()); + final ExchangeImpl exch = virtualHost.getExchange(body.getExchange() == null ? null : body.getExchange().toString()); if (exch == null) { throw body.getChannelException(AMQConstant.NOT_FOUND, "Exchange " + body.getExchange() + " does not exist."); } - if(exch.getBinding(String.valueOf(routingKey), queue) == null) + if(!exch.hasBinding(String.valueOf(routingKey), queue)) { throw body.getChannelException(AMQConstant.NOT_FOUND,"No such binding"); } @@ -108,11 +107,7 @@ public class QueueUnbindHandler implements StateAwareMethodListener<QueueUnbindB { try { - Binding binding = exch.getBinding(String.valueOf(routingKey), queue); - if(binding != null) - { - binding.delete(); - } + exch.deleteBinding(String.valueOf(routingKey), queue); } catch (AccessControlException e) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQChannelTest.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQChannelTest.java index 317a544b6c..face730195 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQChannelTest.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQChannelTest.java @@ -26,13 +26,12 @@ import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; -import org.apache.qpid.AMQException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicContentHeaderProperties; import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.server.configuration.BrokerProperties; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.message.MessageContentSource; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.util.BrokerTestHelper; @@ -100,7 +99,7 @@ public class AMQChannelTest extends QpidTestCase channel.setLocalTransactional(); MessagePublishInfo info = mock(MessagePublishInfo.class); - Exchange e = mock(Exchange.class); + ExchangeImpl e = mock(ExchangeImpl.class); ContentHeaderBody contentHeaderBody= mock(ContentHeaderBody.class); BasicContentHeaderProperties properties = mock(BasicContentHeaderProperties.class); @@ -123,7 +122,7 @@ public class AMQChannelTest extends QpidTestCase channel.setLocalTransactional(); MessagePublishInfo info = mock(MessagePublishInfo.class); - Exchange e = mock(Exchange.class); + ExchangeImpl e = mock(ExchangeImpl.class); ContentHeaderBody contentHeaderBody= mock(ContentHeaderBody.class); BasicContentHeaderProperties properties = mock(BasicContentHeaderProperties.class); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/BrokerTestHelper_0_8.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/BrokerTestHelper_0_8.java index e5a3475feb..86adc585c3 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/BrokerTestHelper_0_8.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/BrokerTestHelper_0_8.java @@ -25,7 +25,7 @@ import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicContentHeaderProperties; import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.abstraction.MessagePublishInfo; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -73,7 +73,7 @@ public class BrokerTestHelper_0_8 extends BrokerTestHelper when(info.getExchange()).thenReturn(exchangeNameAsShortString); when(info.getRoutingKey()).thenReturn(routingKey); - Exchange exchange = channel.getVirtualHost().getExchange(exchangeName); + ExchangeImpl exchange = channel.getVirtualHost().getExchange(exchangeName); for (int count = 0; count < numberOfMessages; count++) { channel.setPublishFrame(info, exchange); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ExtractResendAndRequeueTest.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ExtractResendAndRequeueTest.java index aa5a75396a..f18da87d09 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ExtractResendAndRequeueTest.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ExtractResendAndRequeueTest.java @@ -75,7 +75,7 @@ public class ExtractResendAndRequeueTest extends TestCase when(_queue.getName()).thenReturn(getName()); when(_queue.isDeleted()).thenReturn(_queueDeleted); _consumer = mock(Consumer.class); - when(_consumer.getId()).thenReturn(Consumer.SUB_ID_GENERATOR.getAndIncrement()); + when(_consumer.getConsumerNumber()).thenReturn(Consumer.CONSUMER_NUMBER_GENERATOR.getAndIncrement()); long id = 0; diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java index 5356a6e6a3..d83665ad39 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java @@ -25,7 +25,7 @@ import org.apache.qpid.amqp_1_0.type.messaging.Accepted; import org.apache.qpid.amqp_1_0.type.messaging.Rejected; import org.apache.qpid.amqp_1_0.type.messaging.TerminusDurability; import org.apache.qpid.amqp_1_0.type.messaging.TerminusExpiryPolicy; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.txn.ServerTransaction; @@ -35,11 +35,11 @@ public class ExchangeDestination implements ReceivingDestination, SendingDestina public static final Rejected REJECTED = new Rejected(); private static final Outcome[] OUTCOMES = { ACCEPTED, REJECTED}; - private Exchange _exchange; + private ExchangeImpl _exchange; private TerminusDurability _durability; private TerminusExpiryPolicy _expiryPolicy; - public ExchangeDestination(Exchange exchange, TerminusDurability durable, TerminusExpiryPolicy expiryPolicy) + public ExchangeDestination(ExchangeImpl exchange, TerminusDurability durable, TerminusExpiryPolicy expiryPolicy) { _exchange = exchange; _durability = durable; @@ -98,7 +98,7 @@ public class ExchangeDestination implements ReceivingDestination, SendingDestina return 20000; } - public Exchange getExchange() + public ExchangeImpl getExchange() { return _exchange; } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/NodeReceivingDestination.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/NodeReceivingDestination.java index 70f659b546..f7f049831e 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/NodeReceivingDestination.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/NodeReceivingDestination.java @@ -25,7 +25,6 @@ import org.apache.qpid.amqp_1_0.type.messaging.Accepted; import org.apache.qpid.amqp_1_0.type.messaging.Rejected; import org.apache.qpid.amqp_1_0.type.messaging.TerminusDurability; import org.apache.qpid.amqp_1_0.type.messaging.TerminusExpiryPolicy; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.txn.ServerTransaction; diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java index 94120371fb..394ab69990 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java @@ -21,16 +21,12 @@ package org.apache.qpid.server.protocol.v1_0; import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; @@ -51,9 +47,7 @@ import org.apache.qpid.amqp_1_0.type.transport.Error; import org.apache.qpid.amqp_1_0.type.transport.Transfer; import org.apache.qpid.filter.SelectorParsingException; import org.apache.qpid.filter.selector.ParseException; -import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.exchange.DirectExchange; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.filter.JMSSelectorFilter; import org.apache.qpid.server.filter.SimpleFilterManager; @@ -205,7 +199,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } AMQQueue queue = _vhost.getQueue(name); - Exchange exchange = exchangeDestination.getExchange(); + ExchangeImpl exchange = exchangeDestination.getExchange(); if(queue == null) { @@ -220,17 +214,16 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } else { - List<Binding> bindings = queue.getBindings(); - List<Binding> bindingsToRemove = new ArrayList<Binding>(); - for(Binding existingBinding : bindings) + Collection<BindingImpl> bindings = queue.getBindings(); + List<BindingImpl> bindingsToRemove = new ArrayList<BindingImpl>(); + for(BindingImpl existingBinding : bindings) { - if(existingBinding.getExchangeImpl() != _vhost.getDefaultExchange() - && existingBinding.getExchangeImpl() != exchange) + if(existingBinding.getExchange() != exchange) { bindingsToRemove.add(existingBinding); } } - for(Binding existingBinding : bindingsToRemove) + for(BindingImpl existingBinding : bindingsToRemove) { existingBinding.delete(); } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java index ac1517aaf5..6132b48722 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java @@ -43,9 +43,9 @@ import org.apache.qpid.amqp_1_0.type.transport.*; import org.apache.qpid.amqp_1_0.type.transport.Error; import org.apache.qpid.server.connection.SessionPrincipal; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.*; import org.apache.qpid.protocol.AMQConstant; -import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageSource; @@ -138,7 +138,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio } else { - Exchange exchg = getVirtualHost().getExchange(addr); + ExchangeImpl exchg = getVirtualHost().getExchange(addr); if(exchg != null) { destination = new ExchangeDestination(exchg, source.getDurable(), source.getExpiryPolicy()); diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java index 0c83c31ad4..d385f684ea 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java @@ -30,7 +30,7 @@ import org.apache.qpid.framing.BasicContentHeaderProperties; import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.FieldTable; import org.apache.qpid.framing.abstraction.MessagePublishInfo; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage; import org.apache.qpid.server.protocol.v0_8.AMQMessage; @@ -110,7 +110,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra exchangeName = ""; } - Exchange exchange = vhost.getExchange(exchangeName); + ExchangeImpl exchange = vhost.getExchange(exchangeName); String exchangeClass = exchange == null ? ExchangeDefaults.DIRECT_EXCHANGE_CLASS : exchange.getTypeName(); diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java index c163bfa238..6029b09466 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java @@ -56,7 +56,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; -class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementNode>, MessageDestination +class ManagementNode implements MessageSource, MessageDestination { public static final String NAME_ATTRIBUTE = "name"; @@ -93,8 +93,8 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN private final UUID _id; - private final CopyOnWriteArrayList<ConsumerRegistrationListener<ManagementNode>> _consumerRegistrationListeners = - new CopyOnWriteArrayList<ConsumerRegistrationListener<ManagementNode>>(); + private final CopyOnWriteArrayList<ConsumerRegistrationListener<? super MessageSource>> _consumerRegistrationListeners = + new CopyOnWriteArrayList<ConsumerRegistrationListener<? super MessageSource>>(); private final SystemNodeCreator.SystemNodeRegistry _registry; private final ConfiguredObject<?> _managedObject; @@ -139,18 +139,41 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN private Class getManagementClass(Class objectClass) { - List<Class> allClasses = new ArrayList<Class>(); - allClasses.add(objectClass); - allClasses.addAll(Arrays.asList(objectClass.getInterfaces())); - allClasses.add(objectClass.getSuperclass()); - for(Class clazz : allClasses) + + if(objectClass.getAnnotation(ManagedObject.class)!=null) { - ManagedObject annotation = (ManagedObject) clazz.getAnnotation(ManagedObject.class); - if(annotation != null) + return objectClass; + } + List<Class> allClasses = Collections.singletonList(objectClass); + List<Class> testedClasses = new ArrayList<Class>(); + do + { + testedClasses.addAll( allClasses ); + allClasses = new ArrayList<Class>(); + for(Class c : testedClasses) { - return clazz; + for(Class i : c.getInterfaces()) + { + if(!allClasses.contains(i)) + { + allClasses.add(i); + } + } + if(c.getSuperclass() != null && !allClasses.contains(c.getSuperclass())) + { + allClasses.add(c.getSuperclass()); + } + } + allClasses.removeAll(testedClasses); + for(Class c : allClasses) + { + if(c.getAnnotation(ManagedObject.class) != null) + { + return c; + } } } + while(!allClasses.isEmpty()); return null; } @@ -240,7 +263,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN public <M extends ServerMessage<? extends StorableMessageMetaData>> int send(final M message, final InstanceProperties instanceProperties, final ServerTransaction txn, - final Action<? super MessageInstance<?, ? extends Consumer>> postEnqueueAction) + final Action<? super MessageInstance> postEnqueueAction) { @SuppressWarnings("unchecked") @@ -286,7 +309,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN return header.containsHeader(name) && header.getHeader(name) instanceof String; } - synchronized void enqueue(InternalMessage message, InstanceProperties properties, Action<? super MessageInstance<?, ? extends Consumer>> postEnqueueAction) + synchronized void enqueue(InternalMessage message, InstanceProperties properties, Action<? super MessageInstance> postEnqueueAction) { if(postEnqueueAction != null) { @@ -925,7 +948,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN } @Override - public synchronized <T extends ConsumerTarget> ManagementNodeConsumer addConsumer(final T target, + public synchronized ManagementNodeConsumer addConsumer(final ConsumerTarget target, final FilterManager filters, final Class<? extends ServerMessage> messageClass, final String consumerName, @@ -935,7 +958,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN final ManagementNodeConsumer managementNodeConsumer = new ManagementNodeConsumer(consumerName,this, target); target.consumerAdded(managementNodeConsumer); _consumers.put(consumerName, managementNodeConsumer); - for(ConsumerRegistrationListener<ManagementNode> listener : _consumerRegistrationListeners) + for(ConsumerRegistrationListener<? super MessageSource> listener : _consumerRegistrationListeners) { listener.consumerAdded(this, managementNodeConsumer); } @@ -949,7 +972,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN } @Override - public void addConsumerRegistrationListener(final ConsumerRegistrationListener<ManagementNode> listener) + public void addConsumerRegistrationListener(final ConsumerRegistrationListener<? super MessageSource> listener) { _consumerRegistrationListeners.add(listener); } @@ -984,7 +1007,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN return false; } - private class ConsumedMessageInstance implements MessageInstance<ConsumedMessageInstance,Consumer> + private class ConsumedMessageInstance implements MessageInstance { private final ServerMessage _message; private final InstanceProperties _properties; @@ -1015,13 +1038,13 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN } @Override - public void addStateChangeListener(final StateChangeListener<? super ConsumedMessageInstance, State> listener) + public void addStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { } @Override - public boolean removeStateChangeListener(final StateChangeListener<? super ConsumedMessageInstance, State> listener) + public boolean removeStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { return false; } @@ -1094,7 +1117,7 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN } @Override - public int routeToAlternate(final Action<? super MessageInstance<?, ? extends Consumer>> action, + public int routeToAlternate(final Action<? super MessageInstance> action, final ServerTransaction txn) { return 0; @@ -1182,7 +1205,8 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN @Override public void childAdded(final ConfiguredObject object, final ConfiguredObject child) { - final ManagedEntityType entityType = _entityTypes.get(getManagementClass(child.getClass()).getName()); + final Class managementClass = getManagementClass(child.getClass()); + final ManagedEntityType entityType = _entityTypes.get(managementClass.getName()); if(entityType != null) { _entities.get(entityType).put(child.getName(), child); diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java index 1e2c7b0652..8a1f39fdfe 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java @@ -35,7 +35,7 @@ import java.util.concurrent.locks.ReentrantLock; class ManagementNodeConsumer implements Consumer { - private final long _id = Consumer.SUB_ID_GENERATOR.getAndIncrement(); + private final long _id = Consumer.CONSUMER_NUMBER_GENERATOR.getAndIncrement(); private final ManagementNode _managementNode; private final List<ManagementResponse> _queue = Collections.synchronizedList(new ArrayList<ManagementResponse>()); private final ConsumerTarget _target; @@ -95,7 +95,7 @@ class ManagementNodeConsumer implements Consumer } @Override - public long getId() + public long getConsumerNumber() { return _id; } diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementResponse.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementResponse.java index 59ab849848..18c68bd198 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementResponse.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementResponse.java @@ -31,7 +31,7 @@ import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.StateChangeListener; -class ManagementResponse implements MessageInstance<ManagementResponse,ManagementNodeConsumer> +class ManagementResponse implements MessageInstance { private final ManagementNodeConsumer _consumer; private int _deliveryCount; @@ -65,13 +65,13 @@ class ManagementResponse implements MessageInstance<ManagementResponse,Managemen } @Override - public void addStateChangeListener(final StateChangeListener<? super ManagementResponse, State> listener) + public void addStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { } @Override - public boolean removeStateChangeListener(final StateChangeListener<? super ManagementResponse, State> listener) + public boolean removeStateChangeListener(final StateChangeListener<? super MessageInstance, State> listener) { return false; } @@ -84,7 +84,7 @@ class ManagementResponse implements MessageInstance<ManagementResponse,Managemen } @Override - public boolean isAcquiredBy(final ManagementNodeConsumer consumer) + public boolean isAcquiredBy(final Consumer consumer) { return consumer == _consumer && !isDeleted(); } @@ -114,7 +114,7 @@ class ManagementResponse implements MessageInstance<ManagementResponse,Managemen } @Override - public boolean isRejectedBy(final ManagementNodeConsumer consumer) + public boolean isRejectedBy(final Consumer consumer) { return false; } @@ -132,7 +132,7 @@ class ManagementResponse implements MessageInstance<ManagementResponse,Managemen } @Override - public boolean acquire(final ManagementNodeConsumer sub) + public boolean acquire(final Consumer sub) { return false; } @@ -144,7 +144,7 @@ class ManagementResponse implements MessageInstance<ManagementResponse,Managemen } @Override - public int routeToAlternate(final Action<? super MessageInstance<?, ? extends Consumer>> action, + public int routeToAlternate(final Action<? super MessageInstance> action, final ServerTransaction txn) { return 0; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java index d28338b354..baf92e8522 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java @@ -328,7 +328,7 @@ public class MessageServlet extends AbstractServlet ? "Acquired" : ""); final Consumer deliveredConsumer = entry.getDeliveredConsumer(); - object.put("deliveredTo", deliveredConsumer == null ? null : deliveredConsumer.getId()); + object.put("deliveredTo", deliveredConsumer == null ? null : deliveredConsumer.getConsumerNumber()); ServerMessage message = entry.getMessage(); if(message != null) diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBean.java index 27901bfbf7..8b247ef5fa 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBean.java @@ -22,6 +22,8 @@ package org.apache.qpid.server.jmx.mbeans; import org.apache.qpid.management.common.mbeans.ManagedExchange; +import org.apache.qpid.server.binding.BindingImpl; +import org.apache.qpid.server.exchange.HeadersExchange; import org.apache.qpid.server.jmx.AMQManagedObject; import org.apache.qpid.server.jmx.ManagedObject; import org.apache.qpid.server.model.Binding; @@ -173,7 +175,7 @@ public class ExchangeMBean extends AMQManagedObject implements ManagedExchange { if(HEADERS_EXCHANGE_TYPE.equals(_exchange.getType())) { - return getHeadersBindings(_exchange.getBindings()); + return getHeadersBindings(_exchange.getBindings()); } else { @@ -181,7 +183,7 @@ public class ExchangeMBean extends AMQManagedObject implements ManagedExchange } } - private TabularData getHeadersBindings(Collection<Binding> bindings) throws OpenDataException + private TabularData getHeadersBindings(Collection<? extends Binding> bindings) throws OpenDataException { TabularType bindinglistDataType = new TabularType("Exchange Bindings", "List of exchange bindings for " + getName(), @@ -221,7 +223,7 @@ public class ExchangeMBean extends AMQManagedObject implements ManagedExchange } - private TabularData getNonHeadersBindings(Collection<Binding> bindings) throws OpenDataException + private TabularData getNonHeadersBindings(Collection<? extends Binding> bindings) throws OpenDataException { TabularType bindinglistDataType = diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java index 88d68cff9a..ca8cc7eb7d 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java @@ -166,7 +166,7 @@ public class VirtualHostManagerMBean extends AbstractStatisticsGatheringMBean<Vi try { getConfiguredObject().createExchange(name, State.ACTIVE, durable, - LifetimePolicy.PERMANENT, 0l, type, Collections.EMPTY_MAP); + LifetimePolicy.PERMANENT, type, Collections.EMPTY_MAP); } catch (IllegalArgumentException iae) { diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/QueueMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/QueueMBeanTest.java index 4a88884bf8..f2ca04f709 100644 --- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/QueueMBeanTest.java +++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/QueueMBeanTest.java @@ -87,7 +87,7 @@ public class QueueMBeanTest extends QpidTestCase public void testGetMessageCount() throws Exception { - when(_mockQueue.getQueueDepthMessages()).thenReturn(1000l); + when(_mockQueue.getQueueDepthMessages()).thenReturn(1000); assertStatistic("messageCount", 1000); } @@ -105,13 +105,13 @@ public class QueueMBeanTest extends QpidTestCase public void testActiveConsumerCount() throws Exception { - when(_mockQueue.getConsumerCountWithCredit()).thenReturn(3l); + when(_mockQueue.getConsumerCountWithCredit()).thenReturn(3); assertStatistic("activeConsumerCount", 3); } public void testConsumerCount() throws Exception { - when(_mockQueue.getConsumerCount()).thenReturn(3l); + when(_mockQueue.getConsumerCount()).thenReturn(3); assertStatistic("consumerCount", 3); } diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java index 2dc2cb8d3b..8d56e766fc 100644 --- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java +++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java @@ -146,7 +146,7 @@ public class VirtualHostManagerMBeanTest extends TestCase public void testCreateNewDurableExchange() throws Exception { _virtualHostManagerMBean.createNewExchange(TEST_EXCHANGE_NAME, TEST_EXCHANGE_TYPE, true); - verify(_mockVirtualHost).createExchange(TEST_EXCHANGE_NAME, State.ACTIVE, true, LifetimePolicy.PERMANENT, 0, TEST_EXCHANGE_TYPE, EMPTY_ARGUMENT_MAP); + verify(_mockVirtualHost).createExchange(TEST_EXCHANGE_NAME, State.ACTIVE, true, LifetimePolicy.PERMANENT, TEST_EXCHANGE_TYPE, EMPTY_ARGUMENT_MAP); } public void testCreateNewExchangeWithUnknownExchangeType() throws Exception @@ -161,7 +161,7 @@ public class VirtualHostManagerMBeanTest extends TestCase { // PASS } - verify(_mockVirtualHost, never()).createExchange(TEST_EXCHANGE_NAME, State.ACTIVE, true, LifetimePolicy.PERMANENT, 0, exchangeType, EMPTY_ARGUMENT_MAP); + verify(_mockVirtualHost, never()).createExchange(TEST_EXCHANGE_NAME, State.ACTIVE, true, LifetimePolicy.PERMANENT, exchangeType, EMPTY_ARGUMENT_MAP); } public void testUnregisterExchange() throws Exception diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java index 9657a49d98..60d48f02ef 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java @@ -1187,7 +1187,10 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic for (String key: source.keySet()) { match = target.containsKey(key) && - target.get(key).equals(source.get(key)); + (target.get(key).equals(source.get(key)) + || (target.get(key) instanceof Number) + && source.get(key) instanceof Number && + (((Number) target.get(key)).longValue()) == (((Number) source.get(key)).longValue())); if (!match) { diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java index eba5a6dd46..e6f9c46523 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java @@ -34,13 +34,14 @@ import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.FieldTable; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.framing.amqp_8_0.BasicConsumeBodyImpl; -import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.exchange.DirectExchange; -import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageSource; +import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; @@ -212,15 +213,15 @@ public class MessageStoreTest extends QpidTestCase createAllTopicQueues(); //Register Non-Durable DirectExchange - Exchange nonDurableExchange = createExchange(DirectExchange.TYPE, nonDurableExchangeName, false); + ExchangeImpl nonDurableExchange = createExchange(DirectExchange.TYPE, nonDurableExchangeName, false); bindAllQueuesToExchange(nonDurableExchange, directRouting); //Register DirectExchange - Exchange directExchange = createExchange(DirectExchange.TYPE, directExchangeName, true); + ExchangeImpl directExchange = createExchange(DirectExchange.TYPE, directExchangeName, true); bindAllQueuesToExchange(directExchange, directRouting); //Register TopicExchange - Exchange topicExchange = createExchange(TopicExchange.TYPE, topicExchangeName, true); + ExchangeImpl topicExchange = createExchange(TopicExchange.TYPE, topicExchangeName, true); bindAllTopicQueuesToExchange(topicExchange, topicRouting); //Send Message To NonDurable direct Exchange = persistent @@ -365,7 +366,7 @@ public class MessageStoreTest extends QpidTestCase { int origExchangeCount = getVirtualHost().getExchanges().size(); - Map<String, Exchange> oldExchanges = createExchanges(); + Map<String, ExchangeImpl> oldExchanges = createExchanges(); assertEquals("Incorrect number of exchanges registered before recovery", origExchangeCount + 3, getVirtualHost().getExchanges().size()); @@ -396,7 +397,7 @@ public class MessageStoreTest extends QpidTestCase origExchangeCount + 1, getVirtualHost().getExchanges().size()); //test that removing the exchange means it is not recovered next time - final Exchange exchange = getVirtualHost().getExchange(directExchangeName); + final ExchangeImpl exchange = getVirtualHost().getExchange(directExchangeName); DurableConfigurationStoreHelper.removeExchange(getVirtualHost().getDurableConfigurationStore(), exchange); reloadVirtualHost(); @@ -420,11 +421,11 @@ public class MessageStoreTest extends QpidTestCase createAllQueues(); createAllTopicQueues(); - Map<String, Exchange> exchanges = createExchanges(); + Map<String, ExchangeImpl> exchanges = createExchanges(); - Exchange nonDurableExchange = exchanges.get(nonDurableExchangeName); - Exchange directExchange = exchanges.get(directExchangeName); - Exchange topicExchange = exchanges.get(topicExchangeName); + ExchangeImpl nonDurableExchange = exchanges.get(nonDurableExchangeName); + ExchangeImpl directExchange = exchanges.get(directExchangeName); + ExchangeImpl topicExchange = exchanges.get(topicExchangeName); bindAllQueuesToExchange(nonDurableExchange, directRouting); bindAllQueuesToExchange(directExchange, directRouting); @@ -448,7 +449,7 @@ public class MessageStoreTest extends QpidTestCase public void testDurableBindingRemoval() throws Exception { //create durable queue and exchange, bind them - Exchange exch = createExchange(DirectExchange.TYPE, directExchangeName, true); + ExchangeImpl exch = createExchange(DirectExchange.TYPE, directExchangeName, true); createQueue(durableQueueName, false, true, false, false); bindQueueToExchange(exch, directRouting, getVirtualHost().getQueue(durableQueueName), false); @@ -478,11 +479,11 @@ public class MessageStoreTest extends QpidTestCase * and that the new exchanges are not the same objects as the provided list (i.e. that the * reload actually generated new exchange objects) */ - private void validateExchanges(int originalNumExchanges, Map<String, Exchange> oldExchanges) + private void validateExchanges(int originalNumExchanges, Map<String, ExchangeImpl> oldExchanges) { - Collection<Exchange> exchanges = getVirtualHost().getExchanges(); + Collection<ExchangeImpl> exchanges = getVirtualHost().getExchanges(); Collection<String> exchangeNames = new ArrayList(exchanges.size()); - for(Exchange exchange : exchanges) + for(ExchangeImpl exchange : exchanges) { exchangeNames.add(exchange.getName()); } @@ -525,11 +526,11 @@ public class MessageStoreTest extends QpidTestCase * @param bindings the set of bindings to validate * @param useSelectors if set, check the binding has a JMS_SELECTOR argument and the correct value for it */ - private void validateBindingProperties(List<Binding> bindings, boolean useSelectors) + private void validateBindingProperties(Collection<? extends Binding> bindings, boolean useSelectors) { assertEquals("Each queue should only be bound once.", 1, bindings.size()); - Binding binding = bindings.get(0); + Binding binding = bindings.iterator().next(); if (useSelectors) { @@ -605,7 +606,7 @@ public class MessageStoreTest extends QpidTestCase } } - private void sendMessageOnExchange(Exchange exchange, String routingKey, boolean deliveryMode) + private void sendMessageOnExchange(ExchangeImpl exchange, String routingKey, boolean deliveryMode) { //Set MessagePersistence BasicContentHeaderProperties properties = new BasicContentHeaderProperties(); @@ -708,9 +709,9 @@ public class MessageStoreTest extends QpidTestCase } - private Map<String, Exchange> createExchanges() throws Exception + private Map<String, ExchangeImpl> createExchanges() throws Exception { - Map<String, Exchange> exchanges = new HashMap<String, Exchange>(); + Map<String, ExchangeImpl> exchanges = new HashMap<String, ExchangeImpl>(); //Register non-durable DirectExchange exchanges.put(nonDurableExchangeName, createExchange(DirectExchange.TYPE, nonDurableExchangeName, false)); @@ -722,9 +723,9 @@ public class MessageStoreTest extends QpidTestCase return exchanges; } - private Exchange createExchange(ExchangeType<?> type, String name, boolean durable) throws Exception + private ExchangeImpl createExchange(ExchangeType<?> type, String name, boolean durable) throws Exception { - Exchange exchange = null; + ExchangeImpl exchange = null; Map<String,Object> attributes = new HashMap<String, Object>(); @@ -739,7 +740,7 @@ public class MessageStoreTest extends QpidTestCase return exchange; } - private void bindAllQueuesToExchange(Exchange exchange, String routingKey) + private void bindAllQueuesToExchange(ExchangeImpl exchange, String routingKey) { bindQueueToExchange(exchange, routingKey, getVirtualHost().getQueue(durablePriorityQueueName), false); bindQueueToExchange(exchange, routingKey, getVirtualHost().getQueue(durableQueueName), false); @@ -748,7 +749,7 @@ public class MessageStoreTest extends QpidTestCase bindQueueToExchange(exchange, routingKey, getVirtualHost().getQueue(durableExclusiveQueueName), false); } - private void bindAllTopicQueuesToExchange(Exchange exchange, String routingKey) + private void bindAllTopicQueuesToExchange(ExchangeImpl exchange, String routingKey) { bindQueueToExchange(exchange, routingKey, getVirtualHost().getQueue(durablePriorityTopicQueueName), true); @@ -758,7 +759,7 @@ public class MessageStoreTest extends QpidTestCase } - protected void bindQueueToExchange(Exchange exchange, + protected void bindQueueToExchange(ExchangeImpl exchange, String routingKey, AMQQueue queue, boolean useSelector) @@ -780,7 +781,7 @@ public class MessageStoreTest extends QpidTestCase } } - protected void unbindQueueFromExchange(Exchange exchange, + protected void unbindQueueFromExchange(ExchangeImpl exchange, String routingKey, AMQQueue queue, boolean useSelector) @@ -794,8 +795,7 @@ public class MessageStoreTest extends QpidTestCase try { - Binding b = exchange.getBinding(routingKey, queue); - b.delete(); + exchange.deleteBinding(routingKey, queue); } catch (Exception e) { @@ -833,18 +833,18 @@ public class MessageStoreTest extends QpidTestCase assertNotNull("Queue(" + queueName + ") not correctly registered:", queue); - assertEquals("Incorrect Message count on queue:" + queueName, messageCount, queue.getMessageCount()); + assertEquals("Incorrect Message count on queue:" + queueName, messageCount, queue.getQueueDepthMessages()); } private class TestMessagePublishInfo implements MessagePublishInfo { - Exchange _exchange; + ExchangeImpl _exchange; boolean _immediate; boolean _mandatory; String _routingKey; - TestMessagePublishInfo(Exchange exchange, boolean immediate, boolean mandatory, String routingKey) + TestMessagePublishInfo(ExchangeImpl exchange, boolean immediate, boolean mandatory, String routingKey) { _exchange = exchange; _immediate = immediate; diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java index 3bd21f8b77..c749318595 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java @@ -49,7 +49,6 @@ public class Asserts ConfiguredObject.LAST_UPDATED_BY, ConfiguredObject.LAST_UPDATED_TIME, ConfiguredObject.DESCRIPTION, - VirtualHost.TIME_TO_LIVE, VirtualHost.SUPPORTED_QUEUE_TYPES, VirtualHost.STORE_PATH, VirtualHost.CONFIG_PATH, @@ -102,7 +101,6 @@ public class Asserts Queue.LAST_UPDATED_TIME, Queue.TYPE, Queue.DESCRIPTION, - Queue.TIME_TO_LIVE, Queue.ALTERNATE_EXCHANGE, Queue.OWNER, Queue.NO_LOCAL, @@ -205,7 +203,6 @@ public class Asserts Connection.STATE, Connection.DURABLE, Connection.LIFETIME_POLICY, - Connection.TIME_TO_LIVE, Connection.INCOMING, Connection.REMOTE_PROCESS_NAME, Connection.REMOTE_PROCESS_PID, @@ -254,7 +251,6 @@ public class Asserts assertEquals("Unexpected value of attribute " + Port.LIFETIME_POLICY, LifetimePolicy.PERMANENT.name(), port.get(Broker.LIFETIME_POLICY)); assertEquals("Unexpected value of attribute " + Port.STATE, state.name(), port.get(Port.STATE)); - assertEquals("Unexpected value of attribute " + Port.TIME_TO_LIVE, 0, port.get(Port.TIME_TO_LIVE)); @SuppressWarnings("unchecked") Collection<String> protocols = (Collection<String>) port.get(Port.PROTOCOLS); @@ -322,7 +318,7 @@ public class Asserts { assertNotNull("Exchange " + exchangeName + " is not found!", exchangeData); assertAttributesPresent(exchangeData, AbstractConfiguredObject.getAttributeNames(Exchange.class), - Exchange.ALTERNATE_EXCHANGE, Exchange.TIME_TO_LIVE, + Exchange.ALTERNATE_EXCHANGE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, @@ -357,7 +353,6 @@ public class Asserts assertAttributesPresent(binding, AbstractConfiguredObject.getAttributeNames(Binding.class), Binding.STATE, - Binding.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java index 5e1489a640..d41e019c13 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java @@ -306,7 +306,7 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase { Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames( AuthenticationProvider.class), - AuthenticationProvider.DESCRIPTION, AuthenticationProvider.TIME_TO_LIVE, ConfiguredObject.CREATED_BY, + AuthenticationProvider.DESCRIPTION, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, ConfiguredObject.LAST_UPDATED_TIME); assertEquals("Unexpected value of provider attribute " + AuthenticationProvider.STATE, State.ACTIVE.name(), provider.get(AuthenticationProvider.STATE)); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java index a9705f73d5..ad789e6fa1 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java @@ -65,7 +65,7 @@ public class BrokerRestHttpsTest extends QpidRestTestCase Map<String, Object> brokerDetails = getRestTestHelper().getJsonAsSingletonList("/rest/broker"); Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), - Broker.PROCESS_PID, Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES, Broker.TIME_TO_LIVE, + Broker.PROCESS_PID, Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java index 178f365fa5..1ccd31a83a 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java @@ -236,7 +236,6 @@ public class BrokerRestTest extends QpidRestTestCase { Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), Broker.PROCESS_PID, - Broker.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java index 07f1627d94..d405a91ad4 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java @@ -183,7 +183,7 @@ public class ConnectionRestTest extends QpidRestTestCase ConfiguredObject.DESCRIPTION, Session.STATE, Session.DURABLE, - Session.LIFETIME_POLICY, Session.TIME_TO_LIVE); + Session.LIFETIME_POLICY); assertEquals("Unexpecte value of attribute " + Session.NAME, session.getChannelId() + "", sessionData.get(Session.NAME)); assertEquals("Unexpecte value of attribute " + Session.PRODUCER_FLOW_BLOCKED, Boolean.FALSE, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java index 11c0b7bc4a..e0a06d15a2 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java @@ -323,7 +323,6 @@ public class GroupProviderRestTest extends QpidRestTestCase private void assertProvider(String name, String type, Map<String, Object> provider) { Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames(GroupProvider.class), - GroupProvider.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java index d9ff53a351..94b088dbaf 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java @@ -169,7 +169,7 @@ public class PreferencesProviderRestTest extends QpidRestTestCase ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, ConfiguredObject.LAST_UPDATED_TIME, - ConfiguredObject.DESCRIPTION, PreferencesProvider.TIME_TO_LIVE); + ConfiguredObject.DESCRIPTION); assertEquals("Unexpected value of provider attribute " + PreferencesProvider.STATE, State.ACTIVE.name(), provider.get(PreferencesProvider.STATE)); assertEquals("Unexpected value of provider attribute " + PreferencesProvider.LIFETIME_POLICY, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java index fba319e907..faccca9e9d 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java @@ -212,7 +212,7 @@ public class QueueRestTest extends QpidRestTestCase { assertNotNull("Consumer map should not be null", consumer); Asserts.assertAttributesPresent(consumer, - AbstractConfiguredObject.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.TIME_TO_LIVE, + AbstractConfiguredObject.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.SETTLEMENT_MODE, Consumer.EXCLUSIVE, Consumer.SELECTOR, Consumer.NO_LOCAL, ConfiguredObject.TYPE, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java index bd826259bc..324b101b89 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java @@ -53,6 +53,8 @@ public class AddressBasedDestinationTest extends QpidBrokerTestCase @Override public void setUp() throws Exception { + setVirtualHostConfigurationProperty("virtualhosts.virtualhost.test.queues.maximumDeliveryCount", + "0"); super.setUp(); _connection = getConnection() ; _connection.start(); |
