diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-02-25 01:19:43 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-02-25 01:19:43 +0000 |
| commit | ddba94d2538db03bdca182ab29309ebf83cd81c9 (patch) | |
| tree | 4b0ef0435ddd2c4106af2b35982967b300082802 /qpid/java | |
| parent | 2c02e80ee4907c42764d76018e8bfa9a71641822 (diff) | |
| download | qpid-python-ddba94d2538db03bdca182ab29309ebf83cd81c9.tar.gz | |
QPID-5579 : Use annotations to generate statistics values
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1571510 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
70 files changed, 1572 insertions, 1558 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/Binding.java index bde4cbac2b..13cbd0d544 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/Binding.java @@ -24,11 +24,18 @@ import org.apache.qpid.server.exchange.Exchange; 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.ConfiguredObject; +import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.util.StateChangeListener; +import java.security.AccessControlException; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; @@ -44,8 +51,7 @@ public class Binding private final UUID _id; private final AtomicLong _matches = new AtomicLong(); private final BindingLogSubject _logSubject; - //TODO : persist creation time - private long _createTime = System.currentTimeMillis(); + final AtomicBoolean _deleted = new AtomicBoolean(); final CopyOnWriteArrayList<StateChangeListener<Binding,State>> _stateChangeListeners = new CopyOnWriteArrayList<StateChangeListener<Binding, State>>(); @@ -57,15 +63,32 @@ public class Binding final Exchange exchange, final Map<String, Object> arguments) { + this(id, convertToAttributes(bindingKey, arguments), queue, exchange); + } + + private static Map<String, Object> convertToAttributes(final String bindingKey, final Map<String, Object> arguments) + { + Map<String, Object> attributes = new HashMap<String, Object>(); + attributes.put(org.apache.qpid.server.model.Binding.NAME,bindingKey); + if(arguments != null) + { + attributes.put(org.apache.qpid.server.model.Binding.ARGUMENTS, arguments); + } + return attributes; + } + + public Binding(UUID id, Map<String,Object> attributes, AMQQueue queue, Exchange exchange) + { _id = id; - _bindingKey = bindingKey; + _bindingKey = (String)attributes.get(org.apache.qpid.server.model.Binding.NAME); _queue = queue; _exchange = exchange; + Map<String,Object> arguments = (Map<String, Object>) attributes.get(org.apache.qpid.server.model.Binding.ARGUMENTS); _arguments = arguments == null ? Collections.EMPTY_MAP : Collections.unmodifiableMap(arguments); //Perform ACLs queue.getVirtualHost().getSecurityManager().authoriseCreateBinding(this); - _logSubject = new BindingLogSubject(bindingKey,exchange,queue); + _logSubject = new BindingLogSubject(_bindingKey,exchange,queue); CurrentActor.get().message(_logSubject, BindingMessages.CREATED(String.valueOf(getArguments()), getArguments() != null && !getArguments().isEmpty())); @@ -83,16 +106,17 @@ public class Binding return _bindingKey; } - public AMQQueue getQueue() + public AMQQueue getAMQQueue() { return _queue; } - public Exchange getExchange() + public Exchange getExchangeImpl() { return _exchange; } + public Map<String, Object> getArguments() { return _arguments; @@ -113,9 +137,10 @@ public class Binding return _queue.isDurable() && _exchange.isDurable(); } - public long getCreateTime() + + public LifetimePolicy getLifetimePolicy() { - return _createTime; + return LifetimePolicy.IN_USE; } @Override @@ -134,8 +159,8 @@ public class Binding final Binding binding = (Binding) o; return (_bindingKey == null ? binding.getBindingKey() == null : _bindingKey.equals(binding.getBindingKey())) - && (_exchange == null ? binding.getExchange() == null : _exchange.equals(binding.getExchange())) - && (_queue == null ? binding.getQueue() == null : _queue.equals(binding.getQueue())); + && (_exchange == null ? binding.getExchangeImpl() == null : _exchange.equals(binding.getExchangeImpl())) + && (_queue == null ? binding.getAMQQueue() == null : _queue.equals(binding.getAMQQueue())); } @Override @@ -147,6 +172,19 @@ public class Binding return result; } + protected boolean setState(final State currentState, final State desiredState) + { + if(desiredState == State.DELETED) + { + delete(); + return true; + } + else + { + return false; + } + } + public String toString() { return "Binding{bindingKey="+_bindingKey+", exchange="+_exchange+", queue="+_queue+", id= " + _id + " }"; @@ -164,6 +202,11 @@ public class Binding } } + public String getName() + { + return _bindingKey; + } + public State getState() { return _deleted.get() ? State.DELETED : State.ACTIVE; 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 303818d7cb..91bbdb1649 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 @@ -29,7 +29,6 @@ import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.ExchangeMessages; import org.apache.qpid.server.logging.subjects.ExchangeLogSubject; import org.apache.qpid.server.message.InstanceProperties; -import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; @@ -123,11 +122,11 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T } else if(alternateExchangeAttr instanceof UUID) { - setAlternateExchange(vhost.getExchange((UUID)alternateExchangeAttr)); + setAlternateExchange(vhost.getExchange((UUID) alternateExchangeAttr)); } else if(alternateExchangeAttr instanceof String) { - setAlternateExchange(vhost.getExchange((String)alternateExchangeAttr)); + setAlternateExchange(vhost.getExchange((String) alternateExchangeAttr)); if(_alternateExchange == null) { try @@ -221,7 +220,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T { for(Binding b : _bindings) { - if(bindingKey.equals(b.getBindingKey()) && queue == b.getQueue()) + if(bindingKey.equals(b.getBindingKey()) && queue == b.getAMQQueue()) { return (b.getArguments() == null || b.getArguments().isEmpty()) ? (arguments == null || arguments.isEmpty()) @@ -235,7 +234,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T { for(Binding b : _bindings) { - if(bindingKey.equals(b.getBindingKey()) && queue == b.getQueue()) + if(bindingKey.equals(b.getBindingKey()) && queue == b.getAMQQueue()) { return true; } @@ -259,7 +258,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T { for(Binding b : _bindings) { - if(queue == b.getQueue()) + if(queue == b.getAMQQueue()) { return true; } @@ -272,7 +271,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T { for(Binding b : _bindings) { - if(queue == b.getQueue() && + if(queue == b.getAMQQueue() && ((b.getArguments() == null || b.getArguments().isEmpty()) ? (arguments == null || arguments.isEmpty()) : b.getArguments().equals(arguments))) @@ -590,7 +589,7 @@ public abstract class AbstractExchange<T extends Exchange> implements Exchange<T private void removeBinding(final Binding binding) { String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); assert queue != null; 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 74eb063455..222f838df5 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 @@ -79,13 +79,13 @@ public class DirectExchange extends AbstractExchange<DirectExchange> { try { - MessageFilter filter = FilterSupport.createMessageFilter(b.getArguments(), b.getQueue()); - filteredQueues.put(b.getQueue(),filter); + MessageFilter filter = FilterSupport.createMessageFilter(b.getArguments(), b.getAMQQueue()); + filteredQueues.put(b.getAMQQueue(),filter); } catch (AMQInvalidArgumentException e) { - _logger.warn("Binding ignored: cannot parse filter on binding of queue '"+b.getQueue().getName() - + "' to exchange '" + b.getExchange().getName() + _logger.warn("Binding ignored: cannot parse filter on binding of queue '"+b.getAMQQueue().getName() + + "' to exchange '" + b.getExchangeImpl().getName() + "' with arguments: " + b.getArguments(), e); } @@ -93,9 +93,9 @@ public class DirectExchange extends AbstractExchange<DirectExchange> else { - if(!queues.contains(b.getQueue())) + if(!queues.contains(b.getAMQQueue())) { - queues.add(b.getQueue()); + queues.add(b.getAMQQueue()); } } } @@ -188,7 +188,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange> protected void onBind(final Binding binding) { String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); assert queue != null; assert bindingKey != null; 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 d302ed6041..46f4e3256b 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 @@ -124,7 +124,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> protected synchronized void onBind(final Binding binding) { - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); assert queue != null; if(binding.getArguments() == null || binding.getArguments().isEmpty() || !FilterSupport.argumentsContainFilter(binding.getArguments())) { @@ -151,10 +151,10 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> HashMap<AMQQueue,Map<Binding, MessageFilter>> filteredBindings = new HashMap<AMQQueue,Map<Binding, MessageFilter>>(_filteredBindings.get()); - Map<Binding, MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getQueue()); + Map<Binding, MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); final MessageFilter messageFilter = - FilterSupport.createMessageFilter(binding.getArguments(), binding.getQueue()); + FilterSupport.createMessageFilter(binding.getArguments(), binding.getAMQQueue()); if(bindingsForQueue != null) { @@ -170,7 +170,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> } } - filteredBindings.put(binding.getQueue(), bindingsForQueue); + filteredBindings.put(binding.getAMQQueue(), bindingsForQueue); _filteredBindings.set(filteredBindings); @@ -190,7 +190,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> protected synchronized void onUnbind(final Binding binding) { - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); if(binding.getArguments() == null || binding.getArguments().isEmpty() || !FilterSupport.argumentsContainFilter(binding.getArguments())) { Integer oldValue = _queues.remove(queue); @@ -213,12 +213,12 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange> HashMap<AMQQueue,Map<Binding, MessageFilter>> filteredBindings = new HashMap<AMQQueue,Map<Binding, MessageFilter>>(_filteredBindings.get()); - Map<Binding,MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getQueue()); + Map<Binding,MessageFilter> bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); if(bindingsForQueue.size()>1) { bindingsForQueue = new HashMap<Binding,MessageFilter>(bindingsForQueue); bindingsForQueue.remove(binding); - filteredBindings.put(binding.getQueue(),bindingsForQueue); + filteredBindings.put(binding.getAMQQueue(),bindingsForQueue); } else { 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 4780fae84e..23bd311d04 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 @@ -76,12 +76,12 @@ class HeadersBinding { try { - _filter = FilterSupport.createMessageFilter(_mappings,_binding.getQueue()); + _filter = FilterSupport.createMessageFilter(_mappings,_binding.getAMQQueue()); } catch (AMQInvalidArgumentException e) { - _logger.warn("Invalid filter in binding queue '"+_binding.getQueue().getName() - +"' to exchange '"+_binding.getExchange().getName() + _logger.warn("Invalid filter in binding queue '"+_binding.getAMQQueue().getName() + +"' to exchange '"+_binding.getExchangeImpl().getName() +"' with arguments: " + _binding.getArguments()); _filter = new MessageFilter() { 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 8c1ea48031..e1a314b394 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 @@ -113,9 +113,9 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> if (_logger.isDebugEnabled()) { _logger.debug("Exchange " + getName() + ": delivering message with headers " + - payload.getMessageHeader() + " to " + b.getQueue().getName()); + payload.getMessageHeader() + " to " + b.getAMQQueue().getName()); } - queues.add(b.getQueue()); + queues.add(b.getAMQQueue()); } } @@ -125,7 +125,7 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange> protected void onBind(final Binding binding) { String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); Map<String,Object> args = binding.getArguments(); assert queue != null; 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 7c8c7ccb88..e9bcfe91cc 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 @@ -73,7 +73,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> protected synchronized void registerQueue(final Binding binding) throws AMQInvalidArgumentException { final String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); Map<String,Object> args = binding.getArguments(); assert queue != null; @@ -202,8 +202,8 @@ public class TopicExchange extends AbstractExchange<TopicExchange> { try { - result.removeFilteredQueue(binding.getQueue(), FilterSupport.createMessageFilter(bindingArgs, - binding.getQueue())); + result.removeFilteredQueue(binding.getAMQQueue(), FilterSupport.createMessageFilter(bindingArgs, + binding.getAMQQueue())); } catch (AMQInvalidArgumentException e) { @@ -212,7 +212,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange> } else { - result.removeUnfilteredQueue(binding.getQueue()); + result.removeUnfilteredQueue(binding.getAMQQueue()); } return true; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java deleted file mode 100644 index 2a419585bd..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java +++ /dev/null @@ -1,587 +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; - -import java.lang.reflect.Method; -import java.util.*; - -public final class Attribute<C extends ConfiguredObject, T> -{ - private static Map<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> _allAttributes = - Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Collection<Attribute<?, ?>>>()); - - private final String _name; - private final Class<T> _type; - private final Converter<T> _converter; - private final Method _getter; - - private Attribute(Class<C> clazz, String name, Class<T> type, final Method getter) - { - _name = name; - _type = type; - _converter = getConverter(type); - _getter = getter; - addToAttributesSet(clazz, this); - } - - private static <X> Converter<X> getConverter(final Class<X> type) - { - if(type == String.class) - { - return (Converter<X>) STRING_CONVERTER; - } - else if(type == Integer.class) - { - return (Converter<X>) INT_CONVERTER; - } - else if(type == Long.class) - { - return (Converter<X>) LONG_CONVERTER; - } - else if(type == Boolean.class) - { - return (Converter<X>) BOOLEAN_CONVERTER; - } - else if(type == UUID.class) - { - return (Converter<X>) UUID_CONVERTER; - } - else if(Enum.class.isAssignableFrom(type)) - { - return (Converter<X>) new EnumConverter((Class<? extends Enum>)type); - } - else if(List.class.isAssignableFrom(type)) - { - return (Converter<X>) LIST_CONVERTER; - } - else if(Map.class.isAssignableFrom(type)) - { - return (Converter<X>) MAP_CONVERTER; - } - else if(Collection.class.isAssignableFrom(type)) - { - return (Converter<X>) COLLECTION_CONVERTER; - } - else if(ConfiguredObject.class.isAssignableFrom(type)) - { - return (Converter<X>) new ConfiguredObjectConverter(type); - } - throw new IllegalArgumentException("Cannot create attributes of type " + type.getName()); - } - - private static void addToAttributesSet(final Class<? extends ConfiguredObject> clazz, final Attribute<?, ?> attribute) - { - synchronized (_allAttributes) - { - Collection<Attribute<?,?>> classAttributes = _allAttributes.get(clazz); - if(classAttributes == null) - { - classAttributes = new ArrayList<Attribute<?, ?>>(); - for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet()) - { - if(entry.getKey().isAssignableFrom(clazz)) - { - classAttributes.addAll(entry.getValue()); - } - } - _allAttributes.put(clazz, classAttributes); - - } - for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet()) - { - if(clazz.isAssignableFrom(entry.getKey())) - { - entry.getValue().add(attribute); - } - } - - } - } - - public String getName() - { - return _name; - } - - public Class<T> getType() - { - return _type; - } - - public T getValue(C configuredObject) - { - Object o = configuredObject.getAttribute(_name); - return _converter.convert(o); - } - - - public T getValue(Map<String, Object> attributeMap) - { - Object o = attributeMap.get(_name); - return _converter.convert(o); - } - - - @Override - public String toString() - { - return _name; - } - - private static interface Converter<T> - { - T convert(Object o); - } - - private static final Converter<String> STRING_CONVERTER = new Converter<String>() - { - @Override - public String convert(final Object o) - { - return o == null ? null : o.toString(); - } - }; - - private static final Converter<UUID> UUID_CONVERTER = new Converter<UUID>() - { - @Override - public UUID convert(final Object o) - { - if(o instanceof UUID) - { - return (UUID)o; - } - else if(o instanceof String) - { - return UUID.fromString((String)o); - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a UUID"); - } - } - }; - - private static final Converter<Long> LONG_CONVERTER = new Converter<Long>() - { - - @Override - public Long convert(final Object o) - { - if(o instanceof Long) - { - return (Long)o; - } - else if(o instanceof Number) - { - return ((Number)o).longValue(); - } - else if(o instanceof String) - { - return Long.valueOf((String)o); - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Long"); - } - } - }; - - private static final Converter<Integer> INT_CONVERTER = new Converter<Integer>() - { - - @Override - public Integer convert(final Object o) - { - if(o instanceof Integer) - { - return (Integer)o; - } - else if(o instanceof Number) - { - return ((Number)o).intValue(); - } - else if(o instanceof String) - { - return Integer.valueOf((String)o); - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to an Integer"); - } - } - }; - - private static final Converter<Boolean> BOOLEAN_CONVERTER = new Converter<Boolean>() - { - - @Override - public Boolean convert(final Object o) - { - if(o instanceof Boolean) - { - return (Boolean)o; - } - else if(o instanceof String) - { - return Boolean.valueOf((String)o); - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Boolean"); - } - } - }; - - private static final Converter<List> LIST_CONVERTER = new Converter<List>() - { - @Override - public List convert(final Object o) - { - if(o instanceof List) - { - return (List)o; - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List"); - } - } - }; - - private static final Converter<Collection> COLLECTION_CONVERTER = new Converter<Collection>() - { - @Override - public Collection convert(final Object o) - { - if(o instanceof Collection) - { - return (Collection)o; - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List"); - } - } - }; - - private static final Converter<Map> MAP_CONVERTER = new Converter<Map>() - { - @Override - public Map convert(final Object o) - { - if(o instanceof Map) - { - return (Map)o; - } - else if(o == null) - { - return null; - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Map"); - } - } - }; - - private static final class EnumConverter<X extends Enum<X>> implements Converter<X> - { - private final Class<X> _klazz; - - private EnumConverter(final Class<X> klazz) - { - _klazz = klazz; - } - - @Override - public X convert(final Object o) - { - if(o == null) - { - return null; - } - else if(_klazz.isInstance(o)) - { - return (X) o; - } - else if(o instanceof String) - { - return Enum.valueOf(_klazz,(String)o); - } - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName()); - } - } - } - - private static final class ConfiguredObjectConverter<X extends ConfiguredObject<X>> implements Converter<X> - { - private final Class<X> _klazz; - - private ConfiguredObjectConverter(final Class<X> klazz) - { - _klazz = klazz; - } - - @Override - public X convert(final Object o) - { - if(o == null) - { - return null; - } - else if(_klazz.isInstance(o)) - { - return (X) o; - } - // TODO - traverse tree based on UUID - else - { - throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName()); - } - } - } - - - public static <X extends ConfiguredObject> Collection<String> getAttributeNames(Class<X> clazz) - { - final Collection<Attribute<? super X, ?>> attrs = getAttributes(clazz); - - return new AbstractCollection<String>() - { - @Override - public Iterator<String> iterator() - { - final Iterator<Attribute<? super X, ?>> underlyingIterator = attrs.iterator(); - return new Iterator<String>() - { - @Override - public boolean hasNext() - { - return underlyingIterator.hasNext(); - } - - @Override - public String next() - { - return underlyingIterator.next().getName(); - } - - @Override - public void remove() - { - throw new UnsupportedOperationException(); - } - }; - } - - @Override - public int size() - { - return attrs.size(); - } - }; - - } - - protected static <X extends ConfiguredObject> Collection<Attribute<? super X, ?>> getAttributes(final Class<X> clazz) - { - if(!_allAttributes.containsKey(clazz)) - { - processAttributes(clazz); - } - final Collection<Attribute<? super X, ?>> attributes = (Collection) _allAttributes.get(clazz); - return attributes; - } - - private static <X extends ConfiguredObject> void processAttributes(final Class<X> clazz) - { - if(_allAttributes.containsKey(clazz)) - { - return; - } - - - for(Class<?> parent : clazz.getInterfaces()) - { - if(ConfiguredObject.class.isAssignableFrom(parent)) - { - processAttributes((Class<? extends ConfiguredObject>)parent); - } - } - final Class<? super X> superclass = clazz.getSuperclass(); - if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) - { - processAttributes((Class<? extends ConfiguredObject>) superclass); - } - - final ArrayList<Attribute<?, ?>> attributeList = new ArrayList<Attribute<?, ?>>(); - _allAttributes.put(clazz, attributeList); - - for(Class<?> parent : clazz.getInterfaces()) - { - if(ConfiguredObject.class.isAssignableFrom(parent)) - { - Collection<Attribute<?, ?>> attrs = _allAttributes.get(parent); - for(Attribute<?,?> attr : attrs) - { - if(!attributeList.contains(attr)) - { - attributeList.add(attr); - } - } - } - } - if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) - { - Collection<Attribute<?, ?>> attrs = _allAttributes.get(superclass); - for(Attribute<?,?> attr : attrs) - { - if(!attributeList.contains(attr)) - { - attributeList.add(attr); - } - } - - } - - - for(Method m : clazz.getDeclaredMethods()) - { - ManagedAttribute annotation = m.getAnnotation(ManagedAttribute.class); - if(annotation != null) - { - if(m.getParameterTypes().length != 0) - { - throw new IllegalArgumentException("ManagedAttribute annotation should only be added to no-arg getters"); - } - Class<?> type = m.getReturnType(); - if(type.isPrimitive()) - { - if(type == Boolean.TYPE) - { - type = Boolean.class; - } - else if(type == Byte.TYPE) - { - type = Byte.class; - } - else if(type == Short.TYPE) - { - type = Short.class; - } - else if(type == Integer.TYPE) - { - type = Integer.class; - } - else if(type == Long.TYPE) - { - type = Long.class; - } - else if(type == Float.TYPE) - { - type = Float.class; - } - else if(type == Double.TYPE) - { - type = Double.class; - } - else if(type == Character.TYPE) - { - type = Character.class; - } - } - String methodName = m.getName(); - String baseName; - - if(type == Boolean.class ) - { - if((methodName.startsWith("get") || methodName.startsWith("has")) && methodName.length() >= 4) - { - baseName = methodName.substring(3); - } - else if(methodName.startsWith("is") && methodName.length() >= 3) - { - baseName = methodName.substring(2); - } - else - { - throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes"); - } - } - else - { - if(methodName.startsWith("get") && methodName.length() >= 4) - { - baseName = methodName.substring(3); - } - else - { - throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes"); - } - } - - String name = baseName.length() == 1 ? baseName.toLowerCase() : baseName.substring(0,1).toLowerCase() + baseName.substring(1); - name = name.replace('_','.'); - Attribute<X,?> newAttr = new Attribute(clazz,name,type,m); - - } - } - } - - public static void main(String[] args) - { - System.err.println(Attribute.getAttributeNames(KeyStore.class)); - System.err.println(Attribute.getAttributeNames(Binding.class)); - System.err.println(Attribute.getAttributeNames(Exchange.class)); - System.err.println(Attribute.getAttributeNames(Broker.class)); - - } - - -} 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 46ccb72f40..e9244cc0b7 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 @@ -57,5 +57,8 @@ public interface Binding<X extends Binding<X>> extends ConfiguredObject<X> @ManagedAttribute Map<String,Object> getArguments(); + @ManagedStatistic + long getMatches(); + void delete(); } 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 9a309c8bcd..78b1204fe6 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 @@ -177,6 +177,20 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X> long getVirtualhost_storeTransactionOpenTimeoutWarn(); + + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getBytesOut(); + + @ManagedStatistic + long getMessagesIn(); + + @ManagedStatistic + long getMessagesOut(); + + //children Collection < VirtualHost<?> > getVirtualHosts(); 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 4bd21c737b..5535e22e83 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 @@ -20,6 +20,8 @@ */ package org.apache.qpid.server.model; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; + import java.security.AccessControlException; import java.util.Collection; import java.util.Map; @@ -246,7 +248,7 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>> */ Object getAttribute(String name); - <T> T getAttribute(Attribute<? super X, T> attr); + <T> T getAttribute(AbstractConfiguredObject.Attribute<? super X, T> attr); /** * Return the map containing only explicitly set attributes @@ -272,11 +274,11 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>> /** - * Return the Statistics holder for the ConfiguredObject + * Return the statistics for the ConfiguredObject * - * @return the Statistics holder for the ConfiguredObject (or null if none exists) + * @return the current statistics for the ConfiguredObject */ - Statistics getStatistics(); + Map<String,Number> getStatistics(); /** * Return children of the ConfiguredObject of the given class 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 c3f75f02f0..335f4cf600 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 @@ -20,45 +20,13 @@ */ package org.apache.qpid.server.model; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; @ManagedObject( creatable = false ) public interface Connection<X extends Connection<X>> extends ConfiguredObject<X> { - // Statistics - - String BYTES_IN = "bytesIn"; - String BYTES_OUT = "bytesOut"; - String LAST_IO_TIME = "lastIoTime"; - String LOCAL_TRANSACTION_BEGINS = "localTransactionBegins"; - String LOCAL_TRANSACTION_ROLLBACKS = "localTransactionRollbacks"; - String MESSAGES_IN = "messagesIn"; - String MESSAGES_OUT = "messagesOut"; - String SESSION_COUNT = "sessionCount"; - String STATE_CHANGED = "stateChanged"; - String XA_TRANSACTION_BRANCH_ENDS = "xaTransactionBranchEnds"; - String XA_TRANSACTION_BRANCH_STARTS = "xaTransactionBranchStarts"; - String XA_TRANSACTION_BRANCH_SUSPENDS = "xaTransactionBranchSuspends"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableCollection( - Arrays.asList(BYTES_IN, - BYTES_OUT, - LAST_IO_TIME, - LOCAL_TRANSACTION_BEGINS, - LOCAL_TRANSACTION_ROLLBACKS, - MESSAGES_IN, - MESSAGES_OUT, - SESSION_COUNT, - STATE_CHANGED, - XA_TRANSACTION_BRANCH_ENDS, - XA_TRANSACTION_BRANCH_STARTS, - XA_TRANSACTION_BRANCH_SUSPENDS)); - - // Attributes + // Attributes public static final String STATE = "state"; public static final String DURABLE = "durable"; @@ -112,8 +80,28 @@ public interface Connection<X extends Connection<X>> extends ConfiguredObject<X> @ManagedAttribute Port getPort(); + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getBytesOut(); + + @ManagedStatistic + long getMessagesIn(); + + @ManagedStatistic + long getMessagesOut(); + + @ManagedStatistic + long getLastIoTime(); + + @ManagedStatistic + int getSessionCount(); + //children Collection<Session> getSessions(); void delete(); + + } 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 86860f5164..24711e6030 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 @@ -51,20 +51,16 @@ public interface Consumer<X extends Consumer<X>> extends ConfiguredObject<X> @ManagedAttribute String getSelector(); + @ManagedStatistic + long getBytesOut(); + @ManagedStatistic + long getMessagesOut(); - public String BYTES_OUT = "bytesOut"; - public String MESSAGES_OUT = "messagesOut"; - public String STATE_CHANGED = "stateChanged"; - public String UNACKNOWLEDGED_BYTES = "unacknowledgedBytes"; - public String UNACKNOWLEDGED_MESSAGES = "unacknowledgedMessages"; + @ManagedStatistic + long getUnacknowledgedBytes(); + + @ManagedStatistic + long getUnacknowledgedMessages(); - public Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableCollection( - Arrays.asList(BYTES_OUT, - MESSAGES_OUT, - STATE_CHANGED, - UNACKNOWLEDGED_BYTES, - UNACKNOWLEDGED_MESSAGES) - ); } 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 608397dd2b..61519ca3f9 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 @@ -29,24 +29,6 @@ import java.util.Map; public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X> { - String BINDING_COUNT = "bindingCount"; - String BYTES_DROPPED = "bytesDropped"; - String BYTES_IN = "bytesIn"; - String MESSAGES_DROPPED = "messagesDropped"; - String MESSAGES_IN = "messagesIn"; - String PRODUCER_COUNT = "producerCount"; - String STATE_CHANGED = "stateChanged"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableList( - Arrays.asList(BINDING_COUNT, - BYTES_DROPPED, - BYTES_IN, - MESSAGES_DROPPED, - MESSAGES_IN, - PRODUCER_COUNT, - STATE_CHANGED)); - String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; String STATE = "state"; @@ -61,7 +43,23 @@ public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X> //children Collection<Binding> getBindings(); Collection<Publisher> getPublishers(); - + + @ManagedStatistic + long getBindingCount(); + + @ManagedStatistic + long getBytesDropped(); + + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getMessagesDropped(); + + @ManagedStatistic + long getMessagesIn(); + + //operations Binding createBinding(String bindingKey, Queue queue, diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java new file mode 100644 index 0000000000..2e3fc481ac --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java @@ -0,0 +1,30 @@ +package org.apache.qpid.server.model; +/* + * + * 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. + * + */ + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) + +public @interface ManagedStatistic +{ +} 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 41b29aad08..2b4bea82ad 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 @@ -21,10 +21,7 @@ package org.apache.qpid.server.model; import java.security.AccessControlException; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; -import java.util.List; public interface Port<X extends Port<X>> extends ConfiguredObject<X> { 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 cf36178022..5855408ffb 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 @@ -21,9 +21,6 @@ package org.apache.qpid.server.model; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; import java.util.Map; import java.util.Set; 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 9a4f9d6af1..dc7f48aa9d 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 @@ -20,56 +20,13 @@ */ package org.apache.qpid.server.model; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import org.apache.qpid.server.queue.QueueEntryVisitor; @ManagedObject public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> { - public static final String BINDING_COUNT = "bindingCount"; - public static final String CONSUMER_COUNT = "consumerCount"; - public static final String CONSUMER_COUNT_WITH_CREDIT = "consumerCountWithCredit"; - public static final String DISCARDS_TTL_BYTES = "discardsTtlBytes"; - public static final String DISCARDS_TTL_MESSAGES = "discardsTtlMessages"; - public static final String PERSISTENT_DEQUEUED_BYTES = "persistentDequeuedBytes"; - public static final String PERSISTENT_DEQUEUED_MESSAGES = "persistentDequeuedMessages"; - public static final String PERSISTENT_ENQUEUED_BYTES = "persistentEnqueuedBytes"; - public static final String PERSISTENT_ENQUEUED_MESSAGES = "persistentEnqueuedMessages"; - public static final String QUEUE_DEPTH_BYTES = "queueDepthBytes"; - public static final String QUEUE_DEPTH_MESSAGES = "queueDepthMessages"; - public static final String STATE_CHANGED = "stateChanged"; - public static final String TOTAL_DEQUEUED_BYTES = "totalDequeuedBytes"; - public static final String TOTAL_DEQUEUED_MESSAGES = "totalDequeuedMessages"; - public static final String TOTAL_ENQUEUED_BYTES = "totalEnqueuedBytes"; - public static final String TOTAL_ENQUEUED_MESSAGES = "totalEnqueuedMessages"; - public static final String UNACKNOWLEDGED_BYTES = "unacknowledgedBytes"; - public static final String UNACKNOWLEDGED_MESSAGES = "unacknowledgedMessages"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableList( - Arrays.asList(BINDING_COUNT, - CONSUMER_COUNT, - CONSUMER_COUNT_WITH_CREDIT, - DISCARDS_TTL_BYTES, - DISCARDS_TTL_MESSAGES, - PERSISTENT_DEQUEUED_BYTES, - PERSISTENT_DEQUEUED_MESSAGES, - PERSISTENT_ENQUEUED_BYTES, - PERSISTENT_ENQUEUED_MESSAGES, - QUEUE_DEPTH_BYTES, - QUEUE_DEPTH_MESSAGES, - STATE_CHANGED, - TOTAL_DEQUEUED_BYTES, - TOTAL_DEQUEUED_MESSAGES, - TOTAL_ENQUEUED_BYTES, - TOTAL_ENQUEUED_MESSAGES, - UNACKNOWLEDGED_BYTES, - UNACKNOWLEDGED_MESSAGES)); - - public static final String STATE = "state"; public static final String DURABLE = "durable"; @@ -176,4 +133,62 @@ public interface Queue<X extends Queue<X>> extends ConfiguredObject<X> void delete(); void setNotificationListener(QueueNotificationListener listener); + + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getBytesOut(); + + @ManagedStatistic + long getMessagesIn(); + + @ManagedStatistic + long getMessagesOut(); + + @ManagedStatistic + long getBindingCount(); + + @ManagedStatistic + long getConsumerCount(); + + @ManagedStatistic + long getConsumerCountWithCredit(); + + @ManagedStatistic + long getPersistentDequeuedBytes(); + + @ManagedStatistic + long getPersistentDequeuedMessages(); + + @ManagedStatistic + long getPersistentEnqueuedBytes(); + + @ManagedStatistic + long getPersistentEnqueuedMessages(); + + @ManagedStatistic + long getQueueDepthBytes(); + + @ManagedStatistic + long getQueueDepthMessages(); + + @ManagedStatistic + long getTotalDequeuedBytes(); + + @ManagedStatistic + long getTotalDequeuedMessages(); + + @ManagedStatistic + long getTotalEnqueuedBytes(); + + @ManagedStatistic + long getTotalEnqueuedMessages(); + + @ManagedStatistic + long getUnacknowledgedBytes(); + + @ManagedStatistic + long getUnacknowledgedMessages(); + } 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 86ab4efdce..5dbec8cdd9 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 @@ -26,31 +26,6 @@ import java.util.Collections; public interface Session<X extends Session<X>> extends ConfiguredObject<X> { - // Statistics - - public static final String BYTES_IN = "bytesIn"; - public static final String BYTES_OUT = "bytesOut"; - public static final String CONSUMER_COUNT = "consumerCount"; - public static final String LOCAL_TRANSACTION_BEGINS = "localTransactionBegins"; - public static final String LOCAL_TRANSACTION_OPEN = "localTransactionOpen"; - public static final String LOCAL_TRANSACTION_ROLLBACKS = "localTransactionRollbacks"; - public static final String STATE_CHANGED = "stateChanged"; - public static final String UNACKNOWLEDGED_BYTES = "unacknowledgedBytes"; - public static final String UNACKNOWLEDGED_MESSAGES = "unacknowledgedMessages"; - public static final String XA_TRANSACTION_BRANCH_ENDS = "xaTransactionBranchEnds"; - public static final String XA_TRANSACTION_BRANCH_STARTS = "xaTransactionBranchStarts"; - public static final String XA_TRANSACTION_BRANCH_SUSPENDS = "xaTransactionBranchSuspends"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableCollection(Arrays.asList(BYTES_IN, BYTES_OUT, CONSUMER_COUNT, - LOCAL_TRANSACTION_BEGINS, - LOCAL_TRANSACTION_OPEN, - LOCAL_TRANSACTION_ROLLBACKS, STATE_CHANGED, - UNACKNOWLEDGED_BYTES, UNACKNOWLEDGED_MESSAGES, - XA_TRANSACTION_BRANCH_ENDS, XA_TRANSACTION_BRANCH_STARTS, - XA_TRANSACTION_BRANCH_SUSPENDS)); - - public static final String STATE = "state"; public static final String DURABLE = "durable"; public static final String LIFETIME_POLICY = "lifetimePolicy"; @@ -70,4 +45,19 @@ public interface Session<X extends Session<X>> extends ConfiguredObject<X> Collection<Consumer> getConsumers(); Collection<Publisher> getPublishers(); + + @ManagedStatistic + long getConsumerCount(); + + @ManagedStatistic + long getLocalTransactionBegins(); + + @ManagedStatistic + int getLocalTransactionOpen(); + + @ManagedStatistic + long getLocalTransactionRollbacks(); + + @ManagedStatistic + long getUnacknowledgedMessages(); } 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 46bcdf3ac1..bd3183a77a 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 @@ -25,39 +25,13 @@ import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.store.MessageStore; import java.security.AccessControlException; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.Map; @ManagedObject( managesChildren = true ) public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<X> { - // Statistics - - public static final String BYTES_IN = "bytesIn"; - public static final String BYTES_OUT = "bytesOut"; - public static final String BYTES_RETAINED = "bytesRetained"; - public static final String LOCAL_TRANSACTION_BEGINS = "localTransactionBegins"; - public static final String LOCAL_TRANSACTION_ROLLBACKS = "localTransactionRollbacks"; - public static final String MESSAGES_IN = "messagesIn"; - public static final String MESSAGES_OUT = "messagesOut"; - public static final String MESSAGES_RETAINED = "messagesRetained"; - public static final String STATE_CHANGED = "stateChanged"; - public static final String XA_TRANSACTION_BRANCH_ENDS = "xaTransactionBranchEnds"; - public static final String XA_TRANSACTION_BRANCH_STARTS = "xaTransactionBranchStarts"; - public static final String XA_TRANSACTION_BRANCH_SUSPENDS = "xaTransactionBranchSuspends"; - public static final String QUEUE_COUNT = "queueCount"; - public static final String EXCHANGE_COUNT = "exchangeCount"; - public static final String CONNECTION_COUNT = "connectionCount"; - - public static final Collection<String> AVAILABLE_STATISTICS = - Collections.unmodifiableList( - Arrays.asList(BYTES_IN, BYTES_OUT, BYTES_RETAINED, LOCAL_TRANSACTION_BEGINS, - LOCAL_TRANSACTION_ROLLBACKS, MESSAGES_IN, MESSAGES_OUT, MESSAGES_RETAINED, STATE_CHANGED, - XA_TRANSACTION_BRANCH_ENDS, XA_TRANSACTION_BRANCH_STARTS, XA_TRANSACTION_BRANCH_SUSPENDS, - QUEUE_COUNT, EXCHANGE_COUNT, CONNECTION_COUNT)); String QUEUE_ALERT_REPEAT_GAP = "queue.alertRepeatGap"; String QUEUE_ALERT_THRESHOLD_MESSAGE_AGE = "queue.alertThresholdMessageAge"; @@ -153,6 +127,27 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< @ManagedAttribute String getConfigPath(); + @ManagedStatistic + long getQueueCount(); + + @ManagedStatistic + long getExchangeCount(); + + @ManagedStatistic + long getConnectionCount(); + + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getBytesOut(); + + @ManagedStatistic + long getMessagesIn(); + + @ManagedStatistic + long getMessagesOut(); + //children Collection<VirtualHostAlias> getAliases(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java index bae890ecf6..e61250b455 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java @@ -20,18 +20,17 @@ */ package org.apache.qpid.server.model.adapter; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.apache.qpid.server.model.Attribute; +import java.security.AccessController; +import java.util.*; + import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.IllegalStateTransitionException; +import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.model.ManagedStatistic; import org.apache.qpid.server.model.State; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.updater.ChangeAttributesTask; @@ -39,10 +38,21 @@ import org.apache.qpid.server.configuration.updater.ChangeStateTask; import org.apache.qpid.server.configuration.updater.CreateChildTask; import org.apache.qpid.server.configuration.updater.SetAttributeTask; import org.apache.qpid.server.configuration.updater.TaskExecutor; +import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; +import org.apache.qpid.server.util.MapValueConverter; + +import javax.security.auth.Subject; public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> implements ConfiguredObject<X> { private static final Object ID = "id"; + + private static final Map<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> _allAttributes = + Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Collection<Attribute<?, ?>>>()); + + private static final Map<Class<? extends ConfiguredObject>, Collection<Statistic<?,?>>> _allStatistics = + Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Collection<Statistic<?, ?>>>()); + private final Map<String,Object> _attributes = new HashMap<String, Object>(); private final Map<Class<? extends ConfiguredObject>, ConfiguredObject> _parents = new HashMap<Class<? extends ConfiguredObject>, ConfiguredObject>(); @@ -52,6 +62,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im private final UUID _id; private final Map<String, Object> _defaultAttributes = new HashMap<String, Object>(); private final TaskExecutor _taskExecutor; + private final long _createdTime; + private final String _createdBy; protected AbstractConfiguredObject(UUID id, Map<String, Object> defaults, @@ -70,27 +82,30 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im if (attributes != null) { Collection<String> names = getAttributeNames(); - if(filterAttributes) + if(names!=null) { - for (String name : names) + if(filterAttributes) { - if (attributes.containsKey(name)) + for (String name : names) { - final Object value = attributes.get(name); - if(value != null) + if (attributes.containsKey(name)) { - _attributes.put(name, value); + final Object value = attributes.get(name); + if(value != null) + { + _attributes.put(name, value); + } } } } - } - else - { - for(Map.Entry<String, Object> entry : attributes.entrySet()) + else { - if(entry.getValue()!=null) + for(Map.Entry<String, Object> entry : attributes.entrySet()) { - _attributes.put(entry.getKey(),entry.getValue()); + if(entry.getValue()!=null) + { + _attributes.put(entry.getKey(),entry.getValue()); + } } } } @@ -99,11 +114,14 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { _defaultAttributes.putAll(defaults); } + _createdTime = MapValueConverter.getLongAttribute(CREATED_TIME, attributes, System.currentTimeMillis()); + _createdBy = MapValueConverter.getStringAttribute(CREATED_BY, attributes, getCurrentUserName()); + } protected AbstractConfiguredObject(UUID id, TaskExecutor taskExecutor) { - this(id, null, null, taskExecutor); + this(id, Collections.<String,Object>emptyMap(), Collections.<String,Object>emptyMap(), taskExecutor); } public final UUID getId() @@ -258,9 +276,20 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im private Object getActualAttribute(final String name) { - synchronized (_attributes) + if(CREATED_BY.equals(name)) { - return _attributes.get(name); + return getCreatedBy(); + } + else if(CREATED_TIME.equals(name)) + { + return getCreatedTime(); + } + else + { + synchronized (_attributes) + { + return _attributes.get(name); + } } } @@ -506,13 +535,28 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im @Override public String getCreatedBy() { - return null; + return _createdBy; + } + + protected String getCurrentUserName() + { + Subject currentSubject = Subject.getSubject(AccessController.getContext()); + Set<AuthenticatedPrincipal> principals = + currentSubject == null ? null : currentSubject.getPrincipals(AuthenticatedPrincipal.class); + if(principals == null || principals.isEmpty()) + { + return null; + } + else + { + return principals.iterator().next().getName(); + } } @Override public long getCreatedTime() { - return 0; + return _createdTime; } @Override @@ -520,4 +564,688 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { return (String)getAttribute(TYPE); } + + + @Override + public Map<String,Number> getStatistics() + { + Collection<Statistic> stats = getStatistics(getClass()); + Map<String,Number> map = new HashMap<String,Number>(); + for(Statistic stat : stats) + { + map.put(stat.getName(), (Number) stat.getValue(this)); + } + return map; + } + + //========================================================================================= + + private static abstract class AttributeOrStatistic<C extends ConfiguredObject, T> + { + + protected final String _name; + protected final Class<T> _type; + protected final Converter<T> _converter; + protected final Method _getter; + + private AttributeOrStatistic( + String name, final Method getter, Class<T> type) + { + _name = name; + _getter = getter; + _type = type; + _converter = getConverter(type); + + } + + public String getName() + { + return _name; + } + + public Class<T> getType() + { + return _type; + } + + public T getValue(C configuredObject) + { + try + { + return (T) _getter.invoke(configuredObject); + } + catch (IllegalAccessException e) + { + Object o = configuredObject.getAttribute(_name); + return _converter.convert(o); + } + catch (InvocationTargetException e) + { + Object o = configuredObject.getAttribute(_name); + return _converter.convert(o); + } + + } + + public T getValue(Map<String, Object> attributeMap) + { + Object o = attributeMap.get(_name); + return _converter.convert(o); + } + } + + private static final class Statistic<C extends ConfiguredObject, T extends Number> extends AttributeOrStatistic<C,T> + { + private Statistic(Class<C> clazz, String name, Class<T> type, final Method getter) + { + super(name, getter, type); + addToStatisticsSet(clazz, this); + } + } + + public static final class Attribute<C extends ConfiguredObject, T> extends AttributeOrStatistic<C,T> + { + + private Attribute(Class<C> clazz, String name, Class<T> type, final Method getter) + { + super(name, getter, type); + addToAttributesSet(clazz, this); + } + + + + } + + + private static interface Converter<T> + { + T convert(Object o); + } + + private static final Converter<String> STRING_CONVERTER = new Converter<String>() + { + @Override + public String convert(final Object o) + { + return o == null ? null : o.toString(); + } + }; + + private static final Converter<UUID> UUID_CONVERTER = new Converter<UUID>() + { + @Override + public UUID convert(final Object o) + { + if(o instanceof UUID) + { + return (UUID)o; + } + else if(o instanceof String) + { + return UUID.fromString((String)o); + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a UUID"); + } + } + }; + + private static final Converter<Long> LONG_CONVERTER = new Converter<Long>() + { + + @Override + public Long convert(final Object o) + { + if(o instanceof Long) + { + return (Long)o; + } + else if(o instanceof Number) + { + return ((Number)o).longValue(); + } + else if(o instanceof String) + { + return Long.valueOf((String)o); + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Long"); + } + } + }; + + private static final Converter<Integer> INT_CONVERTER = new Converter<Integer>() + { + + @Override + public Integer convert(final Object o) + { + if(o instanceof Integer) + { + return (Integer)o; + } + else if(o instanceof Number) + { + return ((Number)o).intValue(); + } + else if(o instanceof String) + { + return Integer.valueOf((String)o); + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to an Integer"); + } + } + }; + + private static final Converter<Boolean> BOOLEAN_CONVERTER = new Converter<Boolean>() + { + + @Override + public Boolean convert(final Object o) + { + if(o instanceof Boolean) + { + return (Boolean)o; + } + else if(o instanceof String) + { + return Boolean.valueOf((String)o); + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Boolean"); + } + } + }; + + private static final Converter<List> LIST_CONVERTER = new Converter<List>() + { + @Override + public List convert(final Object o) + { + if(o instanceof List) + { + return (List)o; + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List"); + } + } + }; + + private static final Converter<Collection> COLLECTION_CONVERTER = new Converter<Collection>() + { + @Override + public Collection convert(final Object o) + { + if(o instanceof Collection) + { + return (Collection)o; + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List"); + } + } + }; + + private static final Converter<Map> MAP_CONVERTER = new Converter<Map>() + { + @Override + public Map convert(final Object o) + { + if(o instanceof Map) + { + return (Map)o; + } + else if(o == null) + { + return null; + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Map"); + } + } + }; + + private static final class EnumConverter<X extends Enum<X>> implements Converter<X> + { + private final Class<X> _klazz; + + private EnumConverter(final Class<X> klazz) + { + _klazz = klazz; + } + + @Override + public X convert(final Object o) + { + if(o == null) + { + return null; + } + else if(_klazz.isInstance(o)) + { + return (X) o; + } + else if(o instanceof String) + { + return Enum.valueOf(_klazz,(String)o); + } + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName()); + } + } + } + + private static final class ConfiguredObjectConverter<X extends ConfiguredObject<X>> implements Converter<X> + { + private final Class<X> _klazz; + + private ConfiguredObjectConverter(final Class<X> klazz) + { + _klazz = klazz; + } + + @Override + public X convert(final Object o) + { + if(o == null) + { + return null; + } + else if(_klazz.isInstance(o)) + { + return (X) o; + } + // TODO - traverse tree based on UUID + else + { + throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName()); + } + } + } + + private static <X> Converter<X> getConverter(final Class<X> type) + { + if(type == String.class) + { + return (Converter<X>) STRING_CONVERTER; + } + else if(type == Integer.class) + { + return (Converter<X>) INT_CONVERTER; + } + else if(type == Long.class) + { + return (Converter<X>) LONG_CONVERTER; + } + else if(type == Boolean.class) + { + return (Converter<X>) BOOLEAN_CONVERTER; + } + else if(type == UUID.class) + { + return (Converter<X>) UUID_CONVERTER; + } + else if(Enum.class.isAssignableFrom(type)) + { + return (Converter<X>) new EnumConverter((Class<? extends Enum>)type); + } + else if(List.class.isAssignableFrom(type)) + { + return (Converter<X>) LIST_CONVERTER; + } + else if(Map.class.isAssignableFrom(type)) + { + return (Converter<X>) MAP_CONVERTER; + } + else if(Collection.class.isAssignableFrom(type)) + { + return (Converter<X>) COLLECTION_CONVERTER; + } + else if(ConfiguredObject.class.isAssignableFrom(type)) + { + return (Converter<X>) new ConfiguredObjectConverter(type); + } + throw new IllegalArgumentException("Cannot create attributes of type " + type.getName()); + } + + private static void addToAttributesSet(final Class<? extends ConfiguredObject> clazz, final Attribute<?, ?> attribute) + { + synchronized (_allAttributes) + { + Collection<Attribute<?,?>> classAttributes = _allAttributes.get(clazz); + if(classAttributes == null) + { + classAttributes = new ArrayList<Attribute<?, ?>>(); + for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet()) + { + if(entry.getKey().isAssignableFrom(clazz)) + { + classAttributes.addAll(entry.getValue()); + } + } + _allAttributes.put(clazz, classAttributes); + + } + for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet()) + { + if(clazz.isAssignableFrom(entry.getKey())) + { + entry.getValue().add(attribute); + } + } + + } + } + private static void addToStatisticsSet(final Class<? extends ConfiguredObject> clazz, final Statistic<?, ?> statistic) + { + synchronized (_allStatistics) + { + Collection<Statistic<?,?>> classAttributes = _allStatistics.get(clazz); + if(classAttributes == null) + { + classAttributes = new ArrayList<Statistic<?, ?>>(); + for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Statistic<?,?>>> entry : _allStatistics.entrySet()) + { + if(entry.getKey().isAssignableFrom(clazz)) + { + classAttributes.addAll(entry.getValue()); + } + } + _allStatistics.put(clazz, classAttributes); + + } + for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Statistic<?,?>>> entry : _allStatistics.entrySet()) + { + if(clazz.isAssignableFrom(entry.getKey())) + { + entry.getValue().add(statistic); + } + } + + } + } + + + private static <X extends ConfiguredObject> void processAttributes(final Class<X> clazz) + { + if(_allAttributes.containsKey(clazz)) + { + return; + } + + + for(Class<?> parent : clazz.getInterfaces()) + { + if(ConfiguredObject.class.isAssignableFrom(parent)) + { + processAttributes((Class<? extends ConfiguredObject>)parent); + } + } + final Class<? super X> superclass = clazz.getSuperclass(); + if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) + { + processAttributes((Class<? extends ConfiguredObject>) superclass); + } + + final ArrayList<Attribute<?, ?>> attributeList = new ArrayList<Attribute<?, ?>>(); + final ArrayList<Statistic<?, ?>> statisticList = new ArrayList<Statistic<?, ?>>(); + + _allAttributes.put(clazz, attributeList); + _allStatistics.put(clazz, statisticList); + + for(Class<?> parent : clazz.getInterfaces()) + { + if(ConfiguredObject.class.isAssignableFrom(parent)) + { + Collection<Attribute<?, ?>> attrs = _allAttributes.get(parent); + for(Attribute<?,?> attr : attrs) + { + if(!attributeList.contains(attr)) + { + attributeList.add(attr); + } + } + Collection<Statistic<?, ?>> stats = _allStatistics.get(parent); + for(Statistic<?,?> stat : stats) + { + if(!statisticList.contains(stat)) + { + statisticList.add(stat); + } + } + } + } + if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) + { + Collection<Attribute<?, ?>> attrs = _allAttributes.get(superclass); + Collection<Statistic<?, ?>> stats = _allStatistics.get(superclass); + for(Attribute<?,?> attr : attrs) + { + if(!attributeList.contains(attr)) + { + attributeList.add(attr); + } + } + for(Statistic<?,?> stat : stats) + { + if(!statisticList.contains(stat)) + { + statisticList.add(stat); + } + } + } + + + for(Method m : clazz.getDeclaredMethods()) + { + ManagedAttribute annotation = m.getAnnotation(ManagedAttribute.class); + if(annotation != null) + { + if(m.getParameterTypes().length != 0) + { + throw new IllegalArgumentException("ManagedAttribute annotation should only be added to no-arg getters"); + } + Class<?> type = getType(m); + String name = getName(m, type); + Attribute<X,?> newAttr = new Attribute(clazz,name,type,m); + + } + else + { + ManagedStatistic statAnnotation = m.getAnnotation(ManagedStatistic.class); + if(statAnnotation != null) + { + if(m.getParameterTypes().length != 0) + { + throw new IllegalArgumentException("ManagedStatistic annotation should only be added to no-arg getters"); + } + Class<?> type = getType(m); + if(!Number.class.isAssignableFrom(type)) + { + throw new IllegalArgumentException("ManagedStatistic annotation should only be added to getters returning a Number type"); + } + String name = getName(m, type); + Statistic<X,?> newStat = new Statistic(clazz,name,type,m); + } + } + } + } + + private static String getName(final Method m, final Class<?> type) + { + String methodName = m.getName(); + String baseName; + + if(type == Boolean.class ) + { + if((methodName.startsWith("get") || methodName.startsWith("has")) && methodName.length() >= 4) + { + baseName = methodName.substring(3); + } + else if(methodName.startsWith("is") && methodName.length() >= 3) + { + baseName = methodName.substring(2); + } + else + { + throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes"); + } + } + else + { + if(methodName.startsWith("get") && methodName.length() >= 4) + { + baseName = methodName.substring(3); + } + else + { + throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes"); + } + } + + String name = baseName.length() == 1 ? baseName.toLowerCase() : baseName.substring(0,1).toLowerCase() + baseName.substring(1); + name = name.replace('_','.'); + return name; + } + + private static Class<?> getType(final Method m) + { + Class<?> type = m.getReturnType(); + if(type.isPrimitive()) + { + if(type == Boolean.TYPE) + { + type = Boolean.class; + } + else if(type == Byte.TYPE) + { + type = Byte.class; + } + else if(type == Short.TYPE) + { + type = Short.class; + } + else if(type == Integer.TYPE) + { + type = Integer.class; + } + else if(type == Long.TYPE) + { + type = Long.class; + } + else if(type == Float.TYPE) + { + type = Float.class; + } + else if(type == Double.TYPE) + { + type = Double.class; + } + else if(type == Character.TYPE) + { + type = Character.class; + } + } + return type; + } + + public static <X extends ConfiguredObject> Collection<String> getAttributeNames(Class<X> clazz) + { + final Collection<Attribute<? super X, ?>> attrs = getAttributes(clazz); + + return new AbstractCollection<String>() + { + @Override + public Iterator<String> iterator() + { + final Iterator<Attribute<? super X, ?>> underlyingIterator = attrs.iterator(); + return new Iterator<String>() + { + @Override + public boolean hasNext() + { + return underlyingIterator.hasNext(); + } + + @Override + public String next() + { + return underlyingIterator.next().getName(); + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } + }; + } + + @Override + public int size() + { + return attrs.size(); + } + }; + + } + + protected static <X extends ConfiguredObject> Collection<Attribute<? super X, ?>> getAttributes(final Class<X> clazz) + { + if(!_allAttributes.containsKey(clazz)) + { + processAttributes(clazz); + } + final Collection<Attribute<? super X, ?>> attributes = (Collection) _allAttributes.get(clazz); + return attributes; + } + + + protected static Collection<Statistic> getStatistics(final Class<? extends ConfiguredObject> clazz) + { + if(!_allStatistics.containsKey(clazz)) + { + processAttributes(clazz); + } + final Collection<Statistic> statistics = (Collection) _allStatistics.get(clazz); + return statistics; + } + + + + } 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 51a5344c00..0b8d3e8e1d 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 @@ -32,9 +32,7 @@ import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.model.TrustStore; -import org.apache.qpid.server.security.*; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.util.MapValueConverter; @@ -115,12 +113,6 @@ public abstract class AbstractKeyStoreAdapter<X extends ConfiguredObject<X>> ext } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @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/model/adapter/AbstractPluginAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java index 269c615743..b70f93c1e3 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 @@ -26,13 +26,11 @@ import java.util.Collections; import java.util.Map; import java.util.UUID; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.security.access.Operation; public abstract class AbstractPluginAdapter<X extends Plugin<X>> extends AbstractConfiguredObject<X> implements Plugin<X> @@ -96,11 +94,6 @@ public abstract class AbstractPluginAdapter<X extends Plugin<X>> extends Abstrac throw new UnsupportedOperationException(); } - @Override - public Statistics getStatistics() - { - return null; - } @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) @@ -111,7 +104,7 @@ public abstract class AbstractPluginAdapter<X extends Plugin<X>> extends Abstrac @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Plugin.class); + return getAttributeNames(Plugin.class); } @Override 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 8bc8f2bc72..11128b45d3 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 @@ -49,7 +49,7 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject<Acces public AccessControlProviderAdapter(UUID id, Broker broker, AccessControl accessControl, Map<String, Object> attributes, Collection<String> attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.<String,Object>emptyMap(), Collections.<String,Object>emptyMap(), broker.getTaskExecutor()); if (accessControl == null) { @@ -79,7 +79,7 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject<Acces protected Collection<String> createSupportedAttributes(Collection<String> factoryAttributes) { - List<String> attributesNames = new ArrayList<String>(Attribute.getAttributeNames(AccessControlProvider.class)); + List<String> attributesNames = new ArrayList<String>(getAttributeNames(AccessControlProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -145,12 +145,6 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject<Acces } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; 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 f77db240a1..fe11b88ef5 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 @@ -66,7 +66,7 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv private AuthenticationProviderAdapter(UUID id, Broker broker, final T authManager, Map<String, Object> attributes, Collection<String> attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.<String,Object>emptyMap(), Collections.<String,Object>emptyMap(), broker.getTaskExecutor()); _authManager = authManager; _broker = broker; _supportedAttributes = createSupportedAttributes(attributeNames); @@ -157,12 +157,6 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; @@ -331,7 +325,7 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv protected Collection<String> createSupportedAttributes(Collection<String> factoryAttributes) { - List<String> attributesNames = new ArrayList<String>(Attribute.getAttributeNames(AuthenticationProvider.class)); + List<String> attributesNames = new ArrayList<String>(getAttributeNames(AuthenticationProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -663,12 +657,6 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { return null; @@ -685,7 +673,7 @@ public abstract class AuthenticationProviderAdapter<X extends AuthenticationProv @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(User.class); + return getAttributeNames(User.class); } @Override 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 index 813f4e63df..df9f4330cd 100644 --- 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 @@ -31,7 +31,6 @@ 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 Statistics _statistics = NoStatistics.getInstance(); private final ExchangeAdapter _exchange; private QueueAdapter _queue; @@ -107,11 +106,6 @@ final class BindingAdapter extends AbstractConfiguredObject<BindingAdapter> impl return 0; //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -129,6 +123,12 @@ final class BindingAdapter extends AbstractConfiguredObject<BindingAdapter> impl return new HashMap<String, Object> (_binding.getArguments()); } + @Override + public long getMatches() + { + return _binding.getMatches(); + } + public void delete() { _binding.delete(); @@ -180,7 +180,7 @@ final class BindingAdapter extends AbstractConfiguredObject<BindingAdapter> impl @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Binding.class); + return getAttributeNames(Binding.class); } @Override 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 c4b21bb067..74a7230d03 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 @@ -153,7 +153,6 @@ public class BrokerAdapter<X extends Broker<X>> extends AbstractConfiguredObject private final VirtualHostRegistry _virtualHostRegistry; private final LogRecorder _logRecorder; private final RootMessageLogger _rootMessageLogger; - private StatisticsAdapter _statistics; private final Map<String, VirtualHost<?>> _vhostAdapters = new HashMap<String, VirtualHost<?>>(); private final Map<UUID, Port<?>> _portAdapters = new HashMap<UUID, Port<?>>(); @@ -188,7 +187,6 @@ public class BrokerAdapter<X extends Broker<X>> extends AbstractConfiguredObject _virtualHostRegistry = virtualHostRegistry; _logRecorder = logRecorder; _rootMessageLogger = rootMessageLogger; - _statistics = new StatisticsAdapter(statisticsGatherer); _authenticationProviderFactory = authenticationProviderFactory; _groupProviderFactory = groupProviderFactory; _accessControlProviderFactory = accessControlProviderFactory; @@ -552,11 +550,30 @@ public class BrokerAdapter<X extends Broker<X>> extends AbstractConfiguredObject throw new IllegalStateException(); } - public Statistics getStatistics() + + @Override + public long getBytesIn() { - return _statistics; + return _statisticsGatherer.getDataReceiptStatistics().getTotal(); } + @Override + public long getBytesOut() + { + return _statisticsGatherer.getDataDeliveryStatistics().getTotal(); + } + + @Override + public long getMessagesIn() + { + return _statisticsGatherer.getMessageReceiptStatistics().getTotal(); + } + + @Override + public long getMessagesOut() + { + return _statisticsGatherer.getMessageDeliveryStatistics().getTotal(); + } @SuppressWarnings("unchecked") @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) @@ -889,7 +906,7 @@ public class BrokerAdapter<X extends Broker<X>> extends AbstractConfiguredObject @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Broker.class); + return getAttributeNames(Broker.class); } @Override diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java index 41510836db..f51fb30584 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java @@ -44,13 +44,11 @@ final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter private final Map<AMQSessionModel, SessionAdapter> _sessionAdapters = new HashMap<AMQSessionModel, SessionAdapter>(); - private final Statistics _statistics; public ConnectionAdapter(final AMQConnectionModel conn, TaskExecutor taskExecutor) { super(UUIDGenerator.generateRandomUUID(), taskExecutor); _connection = conn; - _statistics = new ConnectionStatisticsAdapter(conn); } @Override @@ -290,15 +288,11 @@ final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter @Override public Collection<String> getAttributeNames() { - final HashSet<String> attrNames = new HashSet<String>(Attribute.getAttributeNames(Connection.class)); + final HashSet<String> attrNames = new HashSet<String>(getAttributeNames(Connection.class)); return Collections.unmodifiableCollection(attrNames); } - public Statistics getStatistics() - { - return _statistics; - } @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) @@ -327,34 +321,6 @@ final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter } - private class ConnectionStatisticsAdapter extends StatisticsAdapter - { - public ConnectionStatisticsAdapter(StatisticsGatherer applicationRegistry) - { - super(applicationRegistry); - } - - @Override - public Collection<String> getStatisticNames() - { - return Connection.AVAILABLE_STATISTICS; - } - - @Override - public Object getStatistic(String name) - { - if(LAST_IO_TIME.equals(name)) - { - return _connection.getLastIoTime(); - } - else if(SESSION_COUNT.equals(name)) - { - return _connection.getSessionModels().size(); - } - return super.getStatistic(name); - } - } - @Override protected boolean setState(State currentState, State desiredState) { @@ -375,4 +341,40 @@ final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter { throw new UnsupportedOperationException("Changing attributes on connection is not supported."); } + + @Override + public long getBytesIn() + { + return _connection.getDataReceiptStatistics().getTotal(); + } + + @Override + public long getBytesOut() + { + return _connection.getDataDeliveryStatistics().getTotal(); + } + + @Override + public long getMessagesIn() + { + return _connection.getMessageReceiptStatistics().getTotal(); + } + + @Override + public long getMessagesOut() + { + return _connection.getMessageDeliveryStatistics().getTotal(); + } + + @Override + public long getLastIoTime() + { + return _connection.getLastIoTime(); + } + + @Override + public int getSessionCount() + { + return _connection.getSessionModels().size(); + } } 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 index 5150154c0a..a931624f30 100644 --- 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 @@ -22,11 +22,9 @@ package org.apache.qpid.server.model.adapter; import java.util.Map; -import org.apache.qpid.server.model.Attribute; 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.Statistics; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.consumer.Consumer; @@ -39,7 +37,6 @@ public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> i private final Consumer _consumer; private final QueueAdapter _queue; private final SessionAdapter _session; - private final ConsumerStatistics _statistics; public ConsumerAdapter(final QueueAdapter queueAdapter, final SessionAdapter sessionAdapter, final Consumer consumer) @@ -52,7 +49,6 @@ public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> i _consumer = consumer; _queue = queueAdapter; _session = sessionAdapter; - _statistics = new ConsumerStatistics(); //TODO } @@ -108,7 +104,7 @@ public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> i @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(org.apache.qpid.server.model.Consumer.class); + return getAttributeNames(org.apache.qpid.server.model.Consumer.class); } @Override @@ -161,11 +157,6 @@ public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> i return super.getAttribute(name); //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -208,38 +199,28 @@ public class ConsumerAdapter extends AbstractConfiguredObject<ConsumerAdapter> i return null; } - private class ConsumerStatistics implements Statistics + @Override + public long getBytesOut() { + return _consumer.getBytesOut(); + } - public Collection<String> getStatisticNames() - { - return AVAILABLE_STATISTICS; - } + @Override + public long getMessagesOut() + { + return _consumer.getMessagesOut(); + } - public Object getStatistic(String name) - { - if(name.equals(BYTES_OUT)) - { - return _consumer.getBytesOut(); - } - else if(name.equals(MESSAGES_OUT)) - { - return _consumer.getMessagesOut(); - } - else if(name.equals(STATE_CHANGED)) - { - - } - else if(name.equals(UNACKNOWLEDGED_BYTES)) - { - return _consumer.getUnacknowledgedBytes(); - } - else if(name.equals(UNACKNOWLEDGED_MESSAGES)) - { - return _consumer.getUnacknowledgedMessages(); - } - return null; // TODO - Implement - } + @Override + public long getUnacknowledgedBytes() + { + return _consumer.getUnacknowledgedBytes(); + } + + @Override + public long getUnacknowledgedMessages() + { + return _consumer.getUnacknowledgedMessages(); } @Override 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 index 50a28678e8..b1f97a213b 100644 --- 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 @@ -41,13 +41,11 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im private final Map<Binding, BindingAdapter> _bindingAdapters = new HashMap<Binding, BindingAdapter>(); private VirtualHostAdapter _vhost; - private final ExchangeStatistics _statistics; public ExchangeAdapter(final VirtualHostAdapter virtualHostAdapter, final org.apache.qpid.server.exchange.Exchange exchange) { super(exchange.getId(), virtualHostAdapter.getTaskExecutor()); - _statistics = new ExchangeStatistics(); _vhost = virtualHostAdapter; _exchange = exchange; addParent(org.apache.qpid.server.model.VirtualHost.class, virtualHostAdapter); @@ -65,7 +63,7 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im { if(!_bindingAdapters.containsKey(binding)) { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getQueue()); + QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); BindingAdapter adapter = new BindingAdapter(binding, this, queueAdapter); _bindingAdapters.put(binding, adapter); @@ -203,11 +201,6 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im return 0; //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -256,7 +249,7 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im { if(!_bindingAdapters.containsKey(binding)) { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getQueue()); + QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); adapter = new BindingAdapter(binding, this, queueAdapter); _bindingAdapters.put(binding,adapter); queueAdapter.bindingRegistered(binding,adapter); @@ -277,7 +270,7 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im } if(adapter != null) { - QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getQueue()); + QueueAdapter queueAdapter = _vhost.getQueueAdapter(binding.getAMQQueue()); if(queueAdapter != null) { queueAdapter.bindingUnregistered(binding); @@ -335,7 +328,7 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Exchange.class); + return getAttributeNames(Exchange.class); } @Override @@ -367,46 +360,34 @@ final class ExchangeAdapter extends AbstractConfiguredObject<ExchangeAdapter> im _vhost.getSecurityManager().authoriseUpdate(_exchange); } - private class ExchangeStatistics implements Statistics + @Override + public long getBindingCount() { + return _exchange.getBindingCount(); + } - public Collection<String> getStatisticNames() - { - return AVAILABLE_STATISTICS; - } + @Override + public long getBytesDropped() + { + return _exchange.getByteDrops(); + } - public Object getStatistic(String name) - { - if(BINDING_COUNT.equals(name)) - { - return _exchange.getBindingCount(); - } - else if(BYTES_DROPPED.equals(name)) - { - return _exchange.getByteDrops(); - } - else if(BYTES_IN.equals(name)) - { - return _exchange.getByteReceives(); - } - else if(MESSAGES_DROPPED.equals(name)) - { - return _exchange.getMsgDrops(); - } - else if(MESSAGES_IN.equals(name)) - { - return _exchange.getMsgReceives(); - } - else if(PRODUCER_COUNT.equals(name)) - { + @Override + public long getBytesIn() + { + return _exchange.getByteReceives(); + } - } - else if(STATE_CHANGED.equals(name)) - { + @Override + public long getMessagesDropped() + { + return _exchange.getMsgDrops(); + } - } - return null; // TODO - Implement - } + @Override + public long getMessagesIn() + { + return _exchange.getMsgReceives(); } @Override 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 b0aae6af77..b6af07dea4 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 @@ -31,7 +31,6 @@ import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.nio.channels.OverlappingFileLockException; import java.security.AccessControlException; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -93,7 +92,7 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(FileSystemPreferencesProvider.class); + return getAttributeNames(FileSystemPreferencesProvider.class); } @Override @@ -159,12 +158,6 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @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/model/adapter/GroupProviderAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java index 587840c00f..120e9a5123 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 @@ -49,7 +49,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider public GroupProviderAdapter(UUID id, Broker broker, GroupManager groupManager, Map<String, Object> attributes, Collection<String> attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.<String,Object>emptyMap(), Collections.<String,Object>emptyMap(), broker.getTaskExecutor()); if (groupManager == null) { @@ -77,7 +77,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider protected Collection<String> createSupportedAttributes(Collection<String> factoryAttributes) { - List<String> attributesNames = new ArrayList<String>(Attribute.getAttributeNames(GroupProvider.class)); + List<String> attributesNames = new ArrayList<String>(getAttributeNames(GroupProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -146,12 +146,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public Collection<String> getAttributeNames() { return _supportedAttributes; @@ -427,12 +421,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren( Class<C> clazz) { @@ -479,7 +467,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Group.class); + return getAttributeNames(Group.class); } @Override @@ -538,7 +526,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(GroupMember.class); + return getAttributeNames(GroupMember.class); } @Override @@ -616,12 +604,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject<GroupProvider } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @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/KeyStoreAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java index 9a00e4db37..5b9e9c89f6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java @@ -40,13 +40,11 @@ import javax.net.ssl.KeyManagerFactory; import javax.security.auth.Subject; import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.IntegrityViolationException; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.security.*; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.util.MapValueConverter; @@ -105,7 +103,7 @@ public class KeyStoreAdapter extends AbstractKeyStoreAdapter<KeyStoreAdapter> im @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(KeyStore.class); + return getAttributeNames(KeyStore.class); } @Override diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/NoStatistics.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/NoStatistics.java deleted file mode 100644 index 03fdbd1e85..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/NoStatistics.java +++ /dev/null @@ -1,46 +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 org.apache.qpid.server.model.Statistics; - -import java.util.Collection; -import java.util.Collections; - -public class NoStatistics implements Statistics -{ - private static final NoStatistics INSTANCE = new NoStatistics(); - - private NoStatistics() - { - } - - public Collection<String> getStatisticNames() - { - return Collections.emptyList(); - } - - public Object getStatistic(String name) - { - return null; - } - - public static NoStatistics getInstance() - { - return INSTANCE; - } -} 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 c1d501b5ad..6e97d735ea 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 @@ -226,12 +226,6 @@ abstract public class PortAdapter<X extends PortAdapter<X>> extends AbstractConf } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { if(clazz == Connection.class) @@ -279,7 +273,7 @@ abstract public class PortAdapter<X extends PortAdapter<X>> extends AbstractConf @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Port.class); + return getAttributeNames(Port.class); } @Override 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 index 80da77fe5f..c08ccd0839 100644 --- 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 @@ -65,7 +65,6 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredOb private final VirtualHostAdapter _vhost; - private QueueStatisticsAdapter _statistics; private QueueNotificationListener _queueNotificationListener; public QueueAdapter(final VirtualHostAdapter virtualHostAdapter, final AMQQueue<?,Q,?> queue) @@ -77,7 +76,6 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredOb _queue = queue; _queue.addConsumerRegistrationListener(this); populateConsumers(); - _statistics = new QueueStatisticsAdapter(queue); _queue.setNotificationListener(this); } @@ -333,7 +331,7 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredOb @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Queue.class); + return getAttributeNames(Queue.class); } @Override @@ -608,10 +606,6 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredOb return super.getAttribute(name); } - public Statistics getStatistics() - { - return _statistics; - } @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) @@ -748,101 +742,121 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractConfiguredOb } - private static class QueueStatisticsAdapter implements Statistics + @Override + public long getBytesIn() { + return _queue.getTotalEnqueueSize(); + } - private final AMQQueue _queue; + @Override + public long getBytesOut() + { + return _queue.getTotalDequeueSize(); + } - public QueueStatisticsAdapter(AMQQueue queue) - { - _queue = queue; - } + @Override + public long getMessagesIn() + { + return _queue.getTotalEnqueueCount(); + } - public Collection<String> getStatisticNames() - { - return Queue.AVAILABLE_STATISTICS; - } + @Override + public long getMessagesOut() + { + return _queue.getTotalDequeueCount(); + } + @Override + public long getBindingCount() + { + return _queue.getBindingCount(); + } - public Object getStatistic(String name) - { - if(BINDING_COUNT.equals(name)) - { - return _queue.getBindingCount(); - } - else if(CONSUMER_COUNT.equals(name)) - { - return _queue.getConsumerCount(); - } - else if(CONSUMER_COUNT_WITH_CREDIT.equals(name)) - { - return _queue.getActiveConsumerCount(); - } - else if(DISCARDS_TTL_BYTES.equals(name)) - { - return null; // TODO - } - else if(DISCARDS_TTL_MESSAGES.equals(name)) - { - return null; // TODO - } - else if(PERSISTENT_DEQUEUED_BYTES.equals(name)) - { - return _queue.getPersistentByteDequeues(); - } - else if(PERSISTENT_DEQUEUED_MESSAGES.equals(name)) - { - return _queue.getPersistentMsgDequeues(); - } - else if(PERSISTENT_ENQUEUED_BYTES.equals(name)) - { - return _queue.getPersistentByteEnqueues(); - } - else if(PERSISTENT_ENQUEUED_MESSAGES.equals(name)) - { - return _queue.getPersistentMsgEnqueues(); - } - else if(QUEUE_DEPTH_BYTES.equals(name)) - { - return _queue.getQueueDepth(); - } - else if(QUEUE_DEPTH_MESSAGES.equals(name)) - { - return _queue.getMessageCount(); - } - else if(STATE_CHANGED.equals(name)) - { - return null; // TODO - } - else if(TOTAL_DEQUEUED_BYTES.equals(name)) - { - return _queue.getTotalDequeueSize(); - } - else if(TOTAL_DEQUEUED_MESSAGES.equals(name)) - { - return _queue.getTotalDequeueCount(); - } - else if(TOTAL_ENQUEUED_BYTES.equals(name)) - { - return _queue.getTotalEnqueueSize(); - } - else if(TOTAL_ENQUEUED_MESSAGES.equals(name)) - { - return _queue.getTotalEnqueueCount(); - } - else if(UNACKNOWLEDGED_BYTES.equals(name)) - { - return _queue.getUnackedMessageBytes(); - } - else if(UNACKNOWLEDGED_MESSAGES.equals(name)) - { - return _queue.getUnackedMessageCount(); - } + @Override + public long getConsumerCount() + { + return _queue.getConsumerCount(); + } - return null; - } + @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; 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 0e14709b83..7ddcb047f5 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 @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; @@ -40,14 +39,12 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl private AMQSessionModel _session; - private SessionStatistics _statistics; private Map<Consumer, ConsumerAdapter> _consumerAdapters = new HashMap<Consumer, ConsumerAdapter>(); public SessionAdapter(final AMQSessionModel session, TaskExecutor taskExecutor) { super(UUIDGenerator.generateRandomUUID(), taskExecutor); _session = session; - _statistics = new SessionStatistics(); } @Override @@ -158,7 +155,7 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(Session.class); + return getAttributeNames(Session.class); } @Override @@ -183,11 +180,6 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl return super.getAttribute(name); //TODO - Implement } - public Statistics getStatistics() - { - return _statistics; - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -211,68 +203,38 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl throw new UnsupportedOperationException(); } - private class SessionStatistics implements Statistics + @Override + public long getConsumerCount() { + return _session.getConsumerCount(); + } - public SessionStatistics() - { - } + @Override + public long getLocalTransactionBegins() + { + return _session.getTxnStart(); + } - public Collection<String> getStatisticNames() - { - return AVAILABLE_STATISTICS; - } + @Override + public int getLocalTransactionOpen() + { + long open = _session.getTxnStart() - (_session.getTxnCommits() + _session.getTxnRejects()); + return (open > 0l) ? 1 : 0; + } - public Object getStatistic(String name) - { - if(name.equals(BYTES_IN)) - { - } - else if(name.equals(BYTES_OUT)) - { - } - else if(name.equals(CONSUMER_COUNT)) - { - return _session.getConsumerCount(); - } - else if(name.equals(LOCAL_TRANSACTION_BEGINS)) - { - return _session.getTxnStart(); - } - else if(name.equals(LOCAL_TRANSACTION_OPEN)) - { - long open = _session.getTxnStart() - (_session.getTxnCommits() + _session.getTxnRejects()); - return (Boolean) (open > 0l); - } - else if(name.equals(LOCAL_TRANSACTION_ROLLBACKS)) - { - return _session.getTxnRejects(); - } - else if(name.equals(STATE_CHANGED)) - { - } - else if(name.equals(UNACKNOWLEDGED_BYTES)) - { - } - else if(name.equals(UNACKNOWLEDGED_MESSAGES)) - { - return _session.getUnacknowledgedMessageCount(); - } - else if(name.equals(XA_TRANSACTION_BRANCH_ENDS)) - { - } - else if(name.equals(XA_TRANSACTION_BRANCH_STARTS)) - { - } - else if(name.equals(XA_TRANSACTION_BRANCH_SUSPENDS)) - { - - } - - return null; // TODO - Implement - } + @Override + public long getLocalTransactionRollbacks() + { + return _session.getTxnRejects(); + } + + @Override + public long getUnacknowledgedMessages() + { + return _session.getUnacknowledgedMessageCount(); } + @Override protected boolean setState(State currentState, State desiredState) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StatisticsAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StatisticsAdapter.java deleted file mode 100644 index 28c46a0339..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StatisticsAdapter.java +++ /dev/null @@ -1,67 +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.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import org.apache.qpid.server.model.Statistics; -import org.apache.qpid.server.stats.StatisticsCounter; -import org.apache.qpid.server.stats.StatisticsGatherer; - -class StatisticsAdapter implements Statistics -{ - - private final Map<String, StatisticsCounter> _statistics = - new HashMap<String, StatisticsCounter>(); - - - private static final String BYTES_IN = "bytesIn"; - private static final String BYTES_OUT = "bytesOut"; - private static final String MESSAGES_IN = "messagesIn"; - private static final String MESSAGES_OUT = "messagesOut"; - - private static final Collection<String> STATISTIC_NAMES = - Collections.unmodifiableCollection(Arrays.asList(BYTES_IN, BYTES_OUT, MESSAGES_IN, MESSAGES_OUT)); - - - - public StatisticsAdapter(StatisticsGatherer statGatherer) - { - _statistics.put(BYTES_OUT, statGatherer.getDataDeliveryStatistics()); - _statistics.put(BYTES_IN, statGatherer.getDataReceiptStatistics()); - _statistics.put(MESSAGES_OUT, statGatherer.getMessageDeliveryStatistics()); - _statistics.put(MESSAGES_IN, statGatherer.getMessageReceiptStatistics()); - } - - - public Collection<String> getStatisticNames() - { - return STATISTIC_NAMES; - } - - public Object getStatistic(String name) - { - StatisticsCounter counter = _statistics.get(name); - return counter == null ? null : counter.getTotal(); - - } - - -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java index 5b03ab051a..c1e9c1de0e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java @@ -41,14 +41,12 @@ import javax.net.ssl.X509TrustManager; import javax.security.auth.Subject; import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.IntegrityViolationException; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.TrustStore; -import org.apache.qpid.server.security.*; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.auth.manager.SimpleLDAPAuthenticationManagerFactory; @@ -102,7 +100,7 @@ public class TrustStoreAdapter extends AbstractKeyStoreAdapter<TrustStoreAdapter @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(TrustStore.class); + return getAttributeNames(TrustStore.class); } @Override 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 6f51f0c2cc..0761e31935 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 @@ -91,7 +91,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo private final Map<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter> _exchangeAdapters = new HashMap<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter>(); - private StatisticsAdapter _statistics; private final Broker<?> _broker; private final List<VirtualHostAlias> _aliases = new ArrayList<VirtualHostAlias>(); private StatisticsGatherer _brokerStatisticsGatherer; @@ -511,11 +510,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo throw new IllegalStateException(); } - public Statistics getStatistics() - { - return _statistics; - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -909,7 +903,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(VirtualHost.class); + return getAttributeNames(VirtualHost.class); } private void checkVHostStateIsActive() @@ -1053,49 +1047,46 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo return (String) getAttribute(CONFIG_PATH); } - private static class VirtualHostStatisticsAdapter extends StatisticsAdapter + @Override + public long getQueueCount() { - private final org.apache.qpid.server.virtualhost.VirtualHost _vhost; + return _virtualHost.getQueues().size(); + } - private static final Collection<String> VHOST_STATS = Arrays.asList( - VirtualHost.QUEUE_COUNT, - VirtualHost.EXCHANGE_COUNT, - VirtualHost.CONNECTION_COUNT); + @Override + public long getExchangeCount() + { + return _virtualHost.getExchanges().size(); + } - public VirtualHostStatisticsAdapter(org.apache.qpid.server.virtualhost.VirtualHost virtualHost) - { - super(virtualHost); - _vhost = virtualHost; - } + @Override + public long getConnectionCount() + { + return _virtualHost.getConnectionRegistry().getConnections().size(); + } - @Override - public Collection<String> getStatisticNames() - { - Set<String> stats = new HashSet<String>(super.getStatisticNames()); - stats.addAll(VHOST_STATS); - return stats; - } + @Override + public long getBytesIn() + { + return _virtualHost.getDataReceiptStatistics().getTotal(); + } - @Override - public Object getStatistic(String name) - { - if(VirtualHost.QUEUE_COUNT.equals(name)) - { - return _vhost.getQueues().size(); - } - else if(VirtualHost.EXCHANGE_COUNT.equals(name)) - { - return _vhost.getExchanges().size(); - } - else if(VirtualHost.CONNECTION_COUNT.equals(name)) - { - return _vhost.getConnectionRegistry().getConnections().size(); - } - else - { - return super.getStatistic(name); - } - } + @Override + public long getBytesOut() + { + return _virtualHost.getDataDeliveryStatistics().getTotal(); + } + + @Override + public long getMessagesIn() + { + return _virtualHost.getMessageReceiptStatistics().getTotal(); + } + + @Override + public long getMessagesOut() + { + return _virtualHost.getMessageDeliveryStatistics().getTotal(); } @@ -1202,7 +1193,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo virtualHostRegistry.registerVirtualHost(_virtualHost); - _statistics = new VirtualHostStatisticsAdapter(_virtualHost); _virtualHost.addVirtualHostListener(this); populateQueues(); populateExchanges(); 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 43ae1d0c44..61e64d4ca3 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 @@ -27,7 +27,6 @@ import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostAlias; @@ -124,12 +123,6 @@ public class VirtualHostAliasAdapter extends AbstractConfiguredObject<VirtualHos } @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - - @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/security/SecurityManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java index 5dc8bb9077..1ee726c455 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 @@ -254,8 +254,8 @@ public class SecurityManager implements ConfigurationChangeListener public void authoriseCreateBinding(Binding binding) { - final Exchange exch = binding.getExchange(); - final AMQQueue queue = binding.getQueue(); + final Exchange exch = binding.getExchangeImpl(); + final AMQQueue queue = binding.getAMQQueue(); final String bindingKey = binding.getBindingKey(); boolean allowed = 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 096734ff73..c4ee5819ac 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 @@ -34,7 +34,6 @@ 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.queue.AMQQueue; -import org.apache.qpid.server.util.ServerScopedRuntimeException; public class DurableConfigurationStoreHelper { @@ -111,8 +110,8 @@ public class DurableConfigurationStoreHelper { Map<String, Object> attributesMap = new HashMap<String, Object>(); attributesMap.put(Binding.NAME, binding.getBindingKey()); - attributesMap.put(Binding.EXCHANGE, binding.getExchange().getId()); - attributesMap.put(Binding.QUEUE, binding.getQueue().getId()); + attributesMap.put(Binding.EXCHANGE, binding.getExchangeImpl().getId()); + attributesMap.put(Binding.QUEUE, binding.getAMQQueue().getId()); Map<String, Object> arguments = binding.getArguments(); if (arguments != null) { 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 60c7b2c7d9..77ca1b1d4e 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 @@ -113,6 +113,7 @@ public class QueueRecoverer extends AbstractDurableConfiguredObjectRecoverer<AMQ { Map<String, Object> attributes = new LinkedHashMap<String, Object>(_attributes); attributes.put(Queue.ID, _id); + attributes.put(Queue.DURABLE, true); _queue = _queueFactory.restoreQueue(attributes); } return _queue; 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 5a4db7a2bf..5b4950c5ba 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 @@ -141,7 +141,7 @@ abstract class AbstractQueueTestBase<E extends QueueEntryImpl<E,Q,L>, Q extends assertEquals("Wrong exchange bound", _routingKey, _queue.getBindings().get(0).getBindingKey()); assertEquals("Wrong exchange bound", _exchange, - _queue.getBindings().get(0).getExchange()); + _queue.getBindings().get(0).getExchangeImpl()); _exchange.getBinding(_routingKey, _queue).delete(); assertFalse("Routing key was still bound", 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 9dfd8833aa..5a808c87d8 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 @@ -216,7 +216,7 @@ public class StandardVirtualHostTest extends QpidTestCase boolean foundPing = false; for (Binding binding : bindings) { - String qn = binding.getQueue().getName(); + String qn = binding.getAMQQueue().getName(); assertEquals("Unexpected queue name", getName(), qn); Map<String, Object> arguments = binding.getArguments(); 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 be6eba3a72..94120371fb 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 @@ -224,8 +224,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS List<Binding> bindingsToRemove = new ArrayList<Binding>(); for(Binding existingBinding : bindings) { - if(existingBinding.getExchange() != _vhost.getDefaultExchange() - && existingBinding.getExchange() != exchange) + if(existingBinding.getExchangeImpl() != _vhost.getDefaultExchange() + && existingBinding.getExchangeImpl() != exchange) { bindingsToRemove.add(existingBinding); } 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 9c9e2a011f..c163bfa238 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 @@ -33,11 +33,11 @@ import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.message.internal.InternalMessage; import org.apache.qpid.server.message.internal.InternalMessageHeader; import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.plugin.SystemNodeCreator; import org.apache.qpid.server.protocol.AMQSessionModel; @@ -215,7 +215,8 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN } } managedEntityType = new ManagedEntityType(clazz.getName(), parentSet.toArray(new ManagedEntityType[parentSet.size()]), - (String[])(Attribute.getAttributeNames(clazz).toArray(new String[0])), + (String[])(AbstractConfiguredObject.getAttributeNames( + clazz).toArray(new String[0])), opsList.toArray(new String[opsList.size()])); _entityTypes.put(clazz.getName(),managedEntityType); _entities.put(managedEntityType, Collections.synchronizedMap(new LinkedHashMap<String, ConfiguredObject>())); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 14196310a5..047cdfc29b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -430,7 +430,7 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(HttpManagement.class); + return getAttributeNames(HttpManagement.class); } @Override diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 0d5d868af2..2cf7f3f80c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -21,14 +21,12 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; -import org.apache.qpid.server.model.Statistics; public class ConfiguredObjectToMapConverter { @@ -81,25 +79,14 @@ public class ConfiguredObjectToMapConverter private void incorporateStatisticsIntoMap( final ConfiguredObject confObject, Map<String, Object> object) { - Statistics statistics = confObject.getStatistics(); - Map<String, Object> statMap = new HashMap<String, Object>(); - if (statistics != null) - { - for(String name : statistics.getStatisticNames()) - { - Object value = statistics.getStatistic(name); - if(value != null) - { - statMap.put(name, value); - } - } + Map<String, Object> statMap = confObject.getStatistics(); - if(!statMap.isEmpty()) - { - object.put(STATISTICS_MAP_KEY, statMap); - } + if(!statMap.isEmpty()) + { + object.put(STATISTICS_MAP_KEY, statMap); } + } private void incorporateChildrenIntoMap( 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 fa7fb06077..d28338b354 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 @@ -106,7 +106,7 @@ public class MessageServlet extends AbstractServlet response.setContentType("application/json"); final List<Map<String, Object>> messages = messageCollector.getMessages(); - int queueSize = ((Number) queue.getStatistics().getStatistic(Queue.QUEUE_DEPTH_MESSAGES)).intValue(); + int queueSize = (int) queue.getQueueDepthMessages(); String min = messages.isEmpty() ? "0" : messages.get(0).get("position").toString(); String max = messages.isEmpty() ? "0" : messages.get(messages.size()-1).get("position").toString(); response.setHeader("Content-Range", (min + "-" + max + "/" + queueSize)); diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index 8e5c5e1c10..0c2b6a5385 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -25,6 +25,7 @@ import static org.apache.qpid.server.management.plugin.servlet.rest.ConfiguredOb import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -32,7 +33,6 @@ import junit.framework.TestCase; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; -import org.apache.qpid.server.model.Statistics; public class ConfiguredObjectToMapConverterTest extends TestCase { @@ -50,8 +50,7 @@ public class ConfiguredObjectToMapConverterTest extends TestCase final String statisticName = "statisticName"; final int statisticValue = 10; - Statistics mockStatistics = createMockStatistics(statisticName, statisticValue); - when(_configuredObject.getStatistics()).thenReturn(mockStatistics); + when(_configuredObject.getStatistics()).thenReturn(Collections.singletonMap(statisticName, (Number) statisticValue)); Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0); Map<String, Object> statsAsMap = (Map<String, Object>) resultMap.get(STATISTICS_MAP_KEY); @@ -127,14 +126,6 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(mockConfiguredObject.getAttribute(attributeName)).thenReturn(attributeValue); } - private Statistics createMockStatistics(String statName, int statValue) - { - Statistics mockStatistics = mock(Statistics.class); - when(mockStatistics.getStatisticNames()).thenReturn(Arrays.asList(statName)); - when(mockStatistics.getStatistic(statName)).thenReturn(statValue); - return mockStatistics; - } - private static interface TestChild extends ConfiguredObject { } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java index cb3cde8259..b1999b1292 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java @@ -24,9 +24,7 @@ package org.apache.qpid.server.jmx; import java.io.IOException; import java.lang.reflect.Type; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.UUID; @@ -320,7 +318,7 @@ public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implemen @Override public Collection<String> getAttributeNames() { - return Attribute.getAttributeNames(JMXManagement.class); + return getAttributeNames(JMXManagement.class); } @Override diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java index 6ab7db3629..6223d9d906 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java @@ -66,10 +66,10 @@ abstract class AbstractStatisticsGatheringMBean<T extends ConfiguredObject> exte final long period = time - _lastStatUpdateTime; if(period > _statUpdatePeriod) { - long messagesReceived = getStatistic(VirtualHost.MESSAGES_IN); - long messagesSent = getStatistic(VirtualHost.MESSAGES_OUT); - long bytesReceived = getStatistic(VirtualHost.BYTES_IN); - long bytesSent = getStatistic(VirtualHost.BYTES_OUT); + long messagesReceived = getMessagesIn(); + long messagesSent = getMessagesOut(); + long bytesReceived = getBytesIn(); + long bytesSent = getBytesOut(); double messageReceivedRate = (double)(messagesReceived - _lastMessagesReceived) / (double)period; double messageSentRate = (double)(messagesSent - _lastMessagesSent) / (double)period; @@ -109,10 +109,13 @@ abstract class AbstractStatisticsGatheringMBean<T extends ConfiguredObject> exte } } - private long getStatistic(String name) - { - return (Long) getConfiguredObject().getStatistics().getStatistic(name); - } + protected abstract long getBytesOut(); + + protected abstract long getBytesIn(); + + protected abstract long getMessagesOut(); + + protected abstract long getMessagesIn(); public synchronized void resetStatistics() throws Exception { @@ -147,13 +150,13 @@ abstract class AbstractStatisticsGatheringMBean<T extends ConfiguredObject> exte public synchronized long getTotalMessagesDelivered() { updateStats(); - return getStatistic(Connection.MESSAGES_OUT); + return getMessagesOut(); } public synchronized long getTotalDataDelivered() { updateStats(); - return getStatistic(Connection.BYTES_OUT); + return getBytesOut(); } protected final T getConfiguredObject() @@ -188,13 +191,13 @@ abstract class AbstractStatisticsGatheringMBean<T extends ConfiguredObject> exte public synchronized long getTotalMessagesReceived() { updateStats(); - return getStatistic(Connection.MESSAGES_IN); + return getMessagesIn(); } public synchronized long getTotalDataReceived() { updateStats(); - return getStatistic(Connection.BYTES_IN); + return getBytesIn(); } } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java index 34366a196c..a016ff9d9d 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java @@ -39,7 +39,6 @@ import org.apache.qpid.management.common.mbeans.ManagedConnection; import org.apache.qpid.server.jmx.ManagedObject; import org.apache.qpid.server.model.Connection; import org.apache.qpid.server.model.Session; -import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.util.ServerScopedRuntimeException; public class ConnectionMBean extends AbstractStatisticsGatheringMBean<Connection> implements ManagedConnection @@ -75,6 +74,30 @@ public class ConnectionMBean extends AbstractStatisticsGatheringMBean<Connection register(); } + @Override + protected long getBytesOut() + { + return getConfiguredObject().getBytesOut(); + } + + @Override + protected long getBytesIn() + { + return getConfiguredObject().getBytesIn(); + } + + @Override + protected long getMessagesOut() + { + return getConfiguredObject().getMessagesOut(); + } + + @Override + protected long getMessagesIn() + { + return getConfiguredObject().getMessagesIn(); + } + public String getObjectInstanceName() { return ObjectName.quote(getRemoteAddress()); @@ -108,8 +131,7 @@ public class ConnectionMBean extends AbstractStatisticsGatheringMBean<Connection public Date getLastIoTime() { - Long lastIo = (Long) getConfiguredObject().getStatistics().getStatistic(Connection.LAST_IO_TIME); - return new Date(lastIo); + return new Date(getConfiguredObject().getLastIoTime()); } public Long getMaximumNumberOfChannels() @@ -124,10 +146,10 @@ public class ConnectionMBean extends AbstractStatisticsGatheringMBean<Connection for (Session session : list) { - Statistics statistics = session.getStatistics(); - Long txnBegins = (Long) statistics.getStatistic(Session.LOCAL_TRANSACTION_BEGINS); + + Long txnBegins = session.getLocalTransactionBegins(); Integer channelId = (Integer) session.getAttribute(Session.CHANNEL_ID); - int unacknowledgedSize = ((Number) statistics.getStatistic(Session.UNACKNOWLEDGED_MESSAGES)).intValue(); + int unacknowledgedSize = (int) session.getUnacknowledgedMessages(); boolean blocked = (Boolean) session.getAttribute(Session.PRODUCER_FLOW_BLOCKED); boolean isTransactional = (txnBegins>0l); diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java index 67abe77e1f..4775650954 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java @@ -149,7 +149,7 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN public Integer getMessageCount() { - return getStatisticValue(Queue.QUEUE_DEPTH_MESSAGES).intValue(); + return (int) _queue.getQueueDepthMessages(); } public Integer getMaximumDeliveryCount() @@ -159,22 +159,22 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN public Long getReceivedMessageCount() { - return getStatisticValue(Queue.TOTAL_ENQUEUED_MESSAGES).longValue(); + return _queue.getTotalEnqueuedMessages(); } public Long getQueueDepth() { - return getStatisticValue(Queue.QUEUE_DEPTH_BYTES).longValue(); + return _queue.getQueueDepthBytes(); } public Integer getActiveConsumerCount() { - return getStatisticValue(Queue.CONSUMER_COUNT_WITH_CREDIT).intValue(); + return (int) _queue.getConsumerCountWithCredit(); } public Integer getConsumerCount() { - return getStatisticValue(Queue.CONSUMER_COUNT).intValue(); + return (int) _queue.getConsumerCount(); } public String getOwner() @@ -676,12 +676,6 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN _queue.setAttribute(Queue.DESCRIPTION, getDescription(), description); } - private Number getStatisticValue(String name) - { - final Number statistic = (Number) _queue.getStatistics().getStatistic(name); - return statistic == null ? Integer.valueOf(0) : statistic; - } - @Override public String getMessageGroupKey() { diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java index 67d5861dec..75a395bef5 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java @@ -45,6 +45,30 @@ public class ServerInformationMBean extends AbstractStatisticsGatheringMBean<Bro } @Override + protected long getBytesOut() + { + return getConfiguredObject().getBytesOut(); + } + + @Override + protected long getBytesIn() + { + return getConfiguredObject().getBytesIn(); + } + + @Override + protected long getMessagesOut() + { + return getConfiguredObject().getMessagesOut(); + } + + @Override + protected long getMessagesIn() + { + return getConfiguredObject().getMessagesIn(); + } + + @Override public String getObjectInstanceName() { return ServerInformation.TYPE; 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 c39c3f74e9..88d68cff9a 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 @@ -67,6 +67,29 @@ public class VirtualHostManagerMBean extends AbstractStatisticsGatheringMBean<Vi register(); } + @Override + protected long getBytesOut() + { + return getConfiguredObject().getBytesOut(); + } + + @Override + protected long getBytesIn() + { + return getConfiguredObject().getBytesIn(); + } + + @Override + protected long getMessagesOut() + { + return getConfiguredObject().getMessagesOut(); + } + + @Override + protected long getMessagesIn() + { + return getConfiguredObject().getMessagesIn(); + } @Override public String getObjectInstanceName() diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java index 0c5fb0bf1f..8754f9a465 100644 --- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java +++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java @@ -36,7 +36,6 @@ import org.apache.qpid.server.jmx.ManagedObject; import org.apache.qpid.server.jmx.ManagedObjectRegistry; import org.apache.qpid.server.model.Connection; import org.apache.qpid.server.model.Session; -import org.apache.qpid.server.model.Statistics; public class ConnectionMBeanTest extends TestCase { @@ -189,9 +188,8 @@ public class ConnectionMBeanTest extends TestCase public void testGetLastIoTime() { - Statistics mockStatistics = mock(Statistics.class); - when(_mockConnection.getStatistics()).thenReturn(mockStatistics); - when(mockStatistics.getStatistic(Connection.LAST_IO_TIME)).thenReturn(1L); + when(_mockConnection.getLastIoTime()).thenReturn(1l); + Object actualValue = _connectionMBean.getLastIoTime(); assertEquals("Unexpected lastIoTime", new Date(1L), actualValue); @@ -225,11 +223,10 @@ public class ConnectionMBeanTest extends TestCase private Session createMockedSession(int channelId, int unacknowledgedMessages, long localTransactionBegins, boolean blocked) { Session mockSession = mock(Session.class); - Statistics mockSessionStatistics = mock(Statistics.class); - when(mockSessionStatistics.getStatistic(Session.LOCAL_TRANSACTION_BEGINS)).thenReturn(localTransactionBegins); - when(mockSessionStatistics.getStatistic(Session.UNACKNOWLEDGED_MESSAGES)).thenReturn(unacknowledgedMessages); + when(mockSession.getLocalTransactionBegins()).thenReturn(localTransactionBegins); + when(mockSession.getUnacknowledgedMessages()).thenReturn((long)unacknowledgedMessages); - when(mockSession.getStatistics()).thenReturn(mockSessionStatistics); + when(mockSession.getStatistics()).thenReturn(Collections.emptyMap()); when(mockSession.getAttribute(Session.CHANNEL_ID)).thenReturn(channelId); when(mockSession.getAttribute(Session.PRODUCER_FLOW_BLOCKED)).thenReturn(blocked); return mockSession; 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 2874168ddf..4a88884bf8 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 @@ -43,7 +43,6 @@ import org.apache.qpid.server.model.Exchange; 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.Statistics; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.queue.NotificationCheck; import org.apache.qpid.server.queue.QueueEntry; @@ -61,7 +60,6 @@ public class QueueMBeanTest extends QpidTestCase private static final String QUEUE_ALTERNATE_EXCHANGE = "QUEUE_ALTERNATE_EXCHANGE"; private Queue _mockQueue; - private Statistics _mockQueueStatistics; private VirtualHostMBean _mockVirtualHostMBean; private ManagedObjectRegistry _mockManagedObjectRegistry; private QueueMBean _queueMBean; @@ -71,9 +69,7 @@ public class QueueMBeanTest extends QpidTestCase { super.setUp(); _mockQueue = mock(Queue.class); - _mockQueueStatistics = mock(Statistics.class); when(_mockQueue.getName()).thenReturn(QUEUE_NAME); - when(_mockQueue.getStatistics()).thenReturn(_mockQueueStatistics); _mockVirtualHostMBean = mock(VirtualHostMBean.class); _mockManagedObjectRegistry = mock(ManagedObjectRegistry.class); @@ -91,27 +87,32 @@ public class QueueMBeanTest extends QpidTestCase public void testGetMessageCount() throws Exception { - assertStatistic("messageCount", 1000, Queue.QUEUE_DEPTH_MESSAGES); + when(_mockQueue.getQueueDepthMessages()).thenReturn(1000l); + assertStatistic("messageCount", 1000); } public void testGetReceivedMessageCount() throws Exception { - assertStatistic("receivedMessageCount", 1000l, Queue.TOTAL_ENQUEUED_MESSAGES); + when(_mockQueue.getTotalEnqueuedMessages()).thenReturn(1000l); + assertStatistic("receivedMessageCount", 1000l); } public void testQueueDepth() throws Exception { - assertStatistic("queueDepth", 4096l, Queue.QUEUE_DEPTH_BYTES); + when(_mockQueue.getQueueDepthBytes()).thenReturn(4096l); + assertStatistic("queueDepth", 4096l); } public void testActiveConsumerCount() throws Exception { - assertStatistic("activeConsumerCount", 3, Queue.CONSUMER_COUNT_WITH_CREDIT); + when(_mockQueue.getConsumerCountWithCredit()).thenReturn(3l); + assertStatistic("activeConsumerCount", 3); } public void testConsumerCount() throws Exception { - assertStatistic("consumerCount", 3, Queue.CONSUMER_COUNT); + when(_mockQueue.getConsumerCount()).thenReturn(3l); + assertStatistic("consumerCount", 3); } /********** Simple Attributes **********/ @@ -364,9 +365,8 @@ public class QueueMBeanTest extends QpidTestCase }); } - private void assertStatistic(String jmxAttributeName, Object expectedValue, String underlyingAttributeName) throws Exception + private void assertStatistic(String jmxAttributeName, Object expectedValue) throws Exception { - when(_mockQueueStatistics.getStatistic(underlyingAttributeName)).thenReturn(expectedValue); MBeanTestUtils.assertMBeanAttribute(_queueMBean, jmxAttributeName, expectedValue); } diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBeanTest.java index 86eab0245e..d83f2b98b5 100644 --- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBeanTest.java +++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBeanTest.java @@ -25,8 +25,6 @@ import static org.mockito.Mockito.when; import org.apache.qpid.server.jmx.ManagedObjectRegistry; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.Connection; -import org.apache.qpid.server.model.Statistics; import junit.framework.TestCase; @@ -34,7 +32,6 @@ public class ServerInformationMBeanTest extends TestCase { private ManagedObjectRegistry _mockManagedObjectRegistry; private Broker _mockBroker; - private Statistics _mockBrokerStatistics; private ServerInformationMBean _mbean; @Override @@ -42,8 +39,6 @@ public class ServerInformationMBeanTest extends TestCase { _mockManagedObjectRegistry = mock(ManagedObjectRegistry.class); _mockBroker = mock(Broker.class); - _mockBrokerStatistics = mock(Statistics.class); - when(_mockBroker.getStatistics()).thenReturn(_mockBrokerStatistics); _mbean = new ServerInformationMBean(_mockManagedObjectRegistry, _mockBroker); } @@ -58,7 +53,8 @@ public class ServerInformationMBeanTest extends TestCase public void testGetMessageCount() throws Exception { - assertStatistic("totalDataDelivered", 16384l, Connection.BYTES_OUT); + when(_mockBroker.getBytesOut()).thenReturn(16384l); + assertStatistic("totalDataDelivered", 16384l); } /********** Attributes **********/ @@ -80,9 +76,8 @@ public class ServerInformationMBeanTest extends TestCase assertTrue("isStatisticsEnabled", _mbean.isStatisticsEnabled()); } - private void assertStatistic(String jmxAttributeName, Object expectedValue, String underlyingAttributeName) throws Exception + private void assertStatistic(String jmxAttributeName, Object expectedValue) throws Exception { - when(_mockBrokerStatistics.getStatistic(underlyingAttributeName)).thenReturn(expectedValue); MBeanTestUtils.assertMBeanAttribute(_mbean, jmxAttributeName, expectedValue); } 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 a5e30be1a3..3bd21f8b77 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 @@ -32,6 +32,7 @@ import javax.jms.JMSException; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.server.model.*; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.test.utils.TestBrokerConfiguration; public class Asserts @@ -42,7 +43,7 @@ public class Asserts { assertNotNull("Virtualhost " + virtualHostName + " data are not found", virtualHost); assertAttributesPresent(virtualHost, - Attribute.getAttributeNames(VirtualHost.class), + AbstractConfiguredObject.getAttributeNames(VirtualHost.class), ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, @@ -78,15 +79,7 @@ public class Asserts @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) virtualHost.get(STATISTICS_ATTRIBUTE); Asserts.assertAttributesPresent(statistics, - VirtualHost.AVAILABLE_STATISTICS, - VirtualHost.BYTES_RETAINED, - VirtualHost.LOCAL_TRANSACTION_BEGINS, - VirtualHost.LOCAL_TRANSACTION_ROLLBACKS, - VirtualHost.MESSAGES_RETAINED, - VirtualHost.STATE_CHANGED, - VirtualHost.XA_TRANSACTION_BRANCH_ENDS, - VirtualHost.XA_TRANSACTION_BRANCH_STARTS, - VirtualHost.XA_TRANSACTION_BRANCH_SUSPENDS); + "queueCount","exchangeCount","bytesIn","bytesOut","messagesIn", "messagesOut"); } @@ -102,7 +95,7 @@ public class Asserts { assertNotNull("Queue " + queueName + " is not found!", queueData); Asserts.assertAttributesPresent(queueData, - Attribute.getAttributeNames(Queue.class), + AbstractConfiguredObject.getAttributeNames(Queue.class), Queue.CREATED_BY, Queue.CREATED_TIME, Queue.LAST_UPDATED_BY, @@ -154,8 +147,23 @@ public class Asserts assertNotNull("Unexpected value of queue attribute statistics", queueData.get(Asserts.STATISTICS_ATTRIBUTE)); @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) queueData.get(Asserts.STATISTICS_ATTRIBUTE); - Asserts.assertAttributesPresent(statistics, Queue.AVAILABLE_STATISTICS, Queue.DISCARDS_TTL_BYTES, - Queue.DISCARDS_TTL_MESSAGES, Queue.STATE_CHANGED); + + Asserts.assertAttributesPresent(statistics, + "bindingCount", + "consumerCount", + "consumerCountWithCredit", + "persistentDequeuedBytes", + "persistentDequeuedMessages", + "persistentEnqueuedBytes", + "persistentEnqueuedMessages", + "queueDepthBytes", + "queueDepthMessages", + "totalDequeuedBytes", + "totalDequeuedMessages", + "totalEnqueuedBytes", + "totalEnqueuedMessages", + "unacknowledgedBytes", + "unacknowledgedMessages"); } public static void assertAttributesPresent(Map<String, Object> data, String... attributes) @@ -193,7 +201,7 @@ public class Asserts { assertNotNull("Unexpected connection data", connectionData); assertAttributesPresent(connectionData, - Attribute.getAttributeNames(Connection.class), + AbstractConfiguredObject.getAttributeNames(Connection.class), Connection.STATE, Connection.DURABLE, Connection.LIFETIME_POLICY, @@ -221,16 +229,17 @@ public class Asserts @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) connectionData.get(STATISTICS_ATTRIBUTE); + + assertAttributesPresent(statistics, - Connection.AVAILABLE_STATISTICS, - Connection.LOCAL_TRANSACTION_BEGINS, - Connection.LOCAL_TRANSACTION_ROLLBACKS, - Connection.STATE_CHANGED, - Connection.XA_TRANSACTION_BRANCH_ENDS, - Connection.XA_TRANSACTION_BRANCH_STARTS, - Connection.XA_TRANSACTION_BRANCH_SUSPENDS); - assertEquals("Unexpected value of connection statistics attribute " + Connection.SESSION_COUNT, 1, - statistics.get(Connection.SESSION_COUNT)); + "bytesIn", + "bytesOut", + "lastIoTime", + "messagesIn", + "messagesOut", + "sessionCount"); + assertEquals("Unexpected value of connection statistics attribute sessionCount ", 1, + statistics.get("sessionCount")); } public static void assertPortAttributes(Map<String, Object> port) @@ -262,7 +271,7 @@ public class Asserts if (isAMQPPort) { assertAttributesPresent(port, - Attribute.getAttributeNames(Port.class), + AbstractConfiguredObject.getAttributeNames(Port.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -277,7 +286,7 @@ public class Asserts else { assertAttributesPresent(port, - Attribute.getAttributeNames(Port.class), + AbstractConfiguredObject.getAttributeNames(Port.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -312,7 +321,7 @@ public class Asserts public static void assertExchange(String exchangeName, String type, Map<String, Object> exchangeData) { assertNotNull("Exchange " + exchangeName + " is not found!", exchangeData); - assertAttributesPresent(exchangeData, Attribute.getAttributeNames(Exchange.class), + assertAttributesPresent(exchangeData, AbstractConfiguredObject.getAttributeNames(Exchange.class), Exchange.ALTERNATE_EXCHANGE, Exchange.TIME_TO_LIVE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -334,17 +343,19 @@ public class Asserts @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) exchangeData.get(STATISTICS_ATTRIBUTE); - assertAttributesPresent(statistics, - Exchange.AVAILABLE_STATISTICS, - Exchange.STATE_CHANGED, - Exchange.PRODUCER_COUNT); + + assertAttributesPresent(statistics,"bindingCount", + "bytesDropped", + "bytesIn", + "messagesDropped", + "messagesIn"); } public static void assertBinding(String bindingName, String queueName, String exchange, Map<String, Object> binding) { assertNotNull("Binding map should not be null", binding); assertAttributesPresent(binding, - Attribute.getAttributeNames(Binding.class), + AbstractConfiguredObject.getAttributeNames(Binding.class), Binding.STATE, Binding.TIME_TO_LIVE, ConfiguredObject.TYPE, 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 e73e8767ac..5e1489a640 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 @@ -27,13 +27,13 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.server.BrokerOptions; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.User; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -304,7 +304,8 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase private void assertProvider(boolean managesPrincipals, String type, Map<String, Object> provider) { - Asserts.assertAttributesPresent(provider, Attribute.getAttributeNames(AuthenticationProvider.class), + Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames( + AuthenticationProvider.class), AuthenticationProvider.DESCRIPTION, AuthenticationProvider.TIME_TO_LIVE, 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(), 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 6c6ce940de..a9705f73d5 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 @@ -29,12 +29,12 @@ import java.util.HashMap; import java.util.Map; import org.apache.commons.configuration.ConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.Transport; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.test.utils.TestBrokerConfiguration; public class BrokerRestHttpsTest extends QpidRestTestCase @@ -64,7 +64,7 @@ public class BrokerRestHttpsTest extends QpidRestTestCase { Map<String, Object> brokerDetails = getRestTestHelper().getJsonAsSingletonList("/rest/broker"); - Asserts.assertAttributesPresent(brokerDetails, Attribute.getAttributeNames(Broker.class), + Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), Broker.PROCESS_PID, Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES, Broker.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, 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 ab4f358b42..178f365fa5 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 @@ -34,13 +34,13 @@ import javax.jms.TextMessage; import org.apache.qpid.common.QpidProperties; import org.apache.qpid.server.configuration.BrokerConfigurationStoreCreator; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.VirtualHost; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.test.client.UnroutableMessageTestExceptionListener; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -234,7 +234,7 @@ public class BrokerRestTest extends QpidRestTestCase protected void assertBrokerAttributes(Map<String, Object> brokerDetails) { - Asserts.assertAttributesPresent(brokerDetails, Attribute.getAttributeNames(Broker.class), + Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), Broker.PROCESS_PID, Broker.TIME_TO_LIVE, ConfiguredObject.TYPE, 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 89c53b1e0a..07f1627d94 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 @@ -33,10 +33,10 @@ import javax.jms.MessageProducer; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.client.AMQSession; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Connection; import org.apache.qpid.server.model.Session; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; public class ConnectionRestTest extends QpidRestTestCase { @@ -155,14 +155,14 @@ public class ConnectionRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) connectionDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected value of connection statistics attribute " + Connection.BYTES_IN, MESSAGE_NUMBER - * MESSAGE_SIZE, statistics.get(Connection.BYTES_IN)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.BYTES_OUT, MESSAGE_SIZE - + ((MESSAGE_NUMBER - 1) * MESSAGE_SIZE) * 2, statistics.get(Connection.BYTES_OUT)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.MESSAGES_IN, MESSAGE_NUMBER, - statistics.get(Connection.MESSAGES_IN)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.MESSAGES_OUT, - MESSAGE_NUMBER * 2 - 1, statistics.get(Connection.MESSAGES_OUT)); + assertEquals("Unexpected value of connection statistics attribute " + "bytesIn", MESSAGE_NUMBER + * MESSAGE_SIZE, statistics.get("bytesIn")); + assertEquals("Unexpected value of connection statistics attribute " + "bytesOut", MESSAGE_SIZE + + ((MESSAGE_NUMBER - 1) * MESSAGE_SIZE) * 2, statistics.get("bytesOut")); + assertEquals("Unexpected value of connection statistics attribute " + "messagesIn", MESSAGE_NUMBER, + statistics.get("messagesIn")); + assertEquals("Unexpected value of connection statistics attribute " + "messagesOut", + MESSAGE_NUMBER * 2 - 1, statistics.get("messagesOut")); @SuppressWarnings("unchecked") List<Map<String, Object>> sessions = (List<Map<String, Object>>) connectionDetails.get(SESSIONS_ATTRIBUTE); @@ -174,7 +174,7 @@ public class ConnectionRestTest extends QpidRestTestCase private void assertSession(Map<String, Object> sessionData, AMQSession<?, ?> session) { assertNotNull("Session map cannot be null", sessionData); - Asserts.assertAttributesPresent(sessionData, Attribute.getAttributeNames(Session.class), + Asserts.assertAttributesPresent(sessionData, AbstractConfiguredObject.getAttributeNames(Session.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -193,19 +193,18 @@ public class ConnectionRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) sessionData.get(Asserts.STATISTICS_ATTRIBUTE); - Asserts.assertAttributesPresent(statistics, Session.AVAILABLE_STATISTICS, Session.BYTES_IN, Session.BYTES_OUT, - Session.STATE_CHANGED, Session.UNACKNOWLEDGED_BYTES, Session.LOCAL_TRANSACTION_OPEN, - Session.XA_TRANSACTION_BRANCH_ENDS, Session.XA_TRANSACTION_BRANCH_STARTS, - Session.XA_TRANSACTION_BRANCH_SUSPENDS); - - assertEquals("Unexpecte value of statistic attribute " + Session.UNACKNOWLEDGED_MESSAGES, MESSAGE_NUMBER - 1, - statistics.get(Session.UNACKNOWLEDGED_MESSAGES)); - assertEquals("Unexpecte value of statistic attribute " + Session.LOCAL_TRANSACTION_BEGINS, 4, - statistics.get(Session.LOCAL_TRANSACTION_BEGINS)); - assertEquals("Unexpecte value of statistic attribute " + Session.LOCAL_TRANSACTION_ROLLBACKS, 1, - statistics.get(Session.LOCAL_TRANSACTION_ROLLBACKS)); - assertEquals("Unexpecte value of statistic attribute " + Session.CONSUMER_COUNT, 1, - statistics.get(Session.CONSUMER_COUNT)); + Asserts.assertAttributesPresent(statistics, "consumerCount", + "localTransactionBegins", "localTransactionOpen", + "localTransactionRollbacks", "unacknowledgedMessages"); + + assertEquals("Unexpecte value of statistic attribute " + "unacknowledgedMessages", MESSAGE_NUMBER - 1, + statistics.get("unacknowledgedMessages")); + assertEquals("Unexpecte value of statistic attribute " + "localTransactionBegins", 4, + statistics.get("localTransactionBegins")); + assertEquals("Unexpecte value of statistic attribute " + "localTransactionRollbacks", 1, + statistics.get("localTransactionRollbacks")); + assertEquals("Unexpecte value of statistic attribute " + "consumerCount", 1, + statistics.get("consumerCount")); } private String getConnectionName() throws IOException 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 85d8d31758..11c0b7bc4a 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 @@ -29,13 +29,13 @@ import java.util.Properties; import java.util.UUID; import org.apache.qpid.server.BrokerOptions; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Group; import org.apache.qpid.server.model.GroupProvider; 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.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.security.group.FileGroupManagerFactory; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; @@ -322,7 +322,7 @@ public class GroupProviderRestTest extends QpidRestTestCase private void assertProvider(String name, String type, Map<String, Object> provider) { - Asserts.assertAttributesPresent(provider, Attribute.getAttributeNames(GroupProvider.class), + Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames(GroupProvider.class), GroupProvider.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, 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 9a657b0019..d9ff53a351 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 @@ -28,12 +28,12 @@ import java.util.List; import java.util.Map; import org.apache.commons.configuration.ConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.PreferencesProvider; import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider; import org.apache.qpid.server.plugin.AuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory; @@ -164,7 +164,7 @@ public class PreferencesProviderRestTest extends QpidRestTestCase public void assertProviderCommonAttributes(Map<String, Object> provider) { Asserts.assertAttributesPresent(provider, - Attribute.getAttributeNames(PreferencesProvider.class), + AbstractConfiguredObject.getAttributeNames(PreferencesProvider.class), ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, 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 a95c0a082f..fba319e907 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 @@ -34,12 +34,12 @@ import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Binding; 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.Queue; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; public class QueueRestTest extends QpidRestTestCase { @@ -212,7 +212,7 @@ public class QueueRestTest extends QpidRestTestCase { assertNotNull("Consumer map should not be null", consumer); Asserts.assertAttributesPresent(consumer, - Attribute.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.TIME_TO_LIVE, + AbstractConfiguredObject.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.TIME_TO_LIVE, Consumer.SETTLEMENT_MODE, Consumer.EXCLUSIVE, Consumer.SELECTOR, Consumer.NO_LOCAL, ConfiguredObject.TYPE, @@ -232,35 +232,35 @@ public class QueueRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) consumer.get(Asserts.STATISTICS_ATTRIBUTE); assertNotNull("Consumer statistics is not present", statistics); - Asserts.assertAttributesPresent(statistics, Consumer.AVAILABLE_STATISTICS, Consumer.STATE_CHANGED); + Asserts.assertAttributesPresent(statistics, "bytesOut", "messagesOut", "unacknowledgedBytes", "unacknowledgedMessages"); } private void assertStatistics(Map<String, Object> queueDetails) { @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) queueDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.PERSISTENT_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.QUEUE_DEPTH_MESSAGES, ENQUEUED_MESSAGES, - statistics.get(Queue.QUEUE_DEPTH_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.CONSUMER_COUNT, 1, - statistics.get(Queue.CONSUMER_COUNT)); - assertEquals("Unexpected queue statistics attribute " + Queue.CONSUMER_COUNT_WITH_CREDIT, 1, - statistics.get(Queue.CONSUMER_COUNT_WITH_CREDIT)); - assertEquals("Unexpected queue statistics attribute " + Queue.BINDING_COUNT, 1, statistics.get(Queue.BINDING_COUNT)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.PERSISTENT_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.TOTAL_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_DEQUEUED_BYTES, DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_DEQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_BYTES, DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_DEQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_ENQUEUED_BYTES, ENQUEUED_BYTES - + DEQUEUED_BYTES, statistics.get(Queue.PERSISTENT_ENQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_ENQUEUED_BYTES, ENQUEUED_BYTES + DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_ENQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.QUEUE_DEPTH_BYTES, ENQUEUED_BYTES, - statistics.get(Queue.QUEUE_DEPTH_BYTES)); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("persistentDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "queueDepthMessages", ENQUEUED_MESSAGES, + statistics.get("queueDepthMessages")); + assertEquals("Unexpected queue statistics attribute " + "consumerCount", 1, + statistics.get("consumerCount")); + assertEquals("Unexpected queue statistics attribute " + "consumerCountWithCredit", 1, + statistics.get("consumerCountWithCredit")); + assertEquals("Unexpected queue statistics attribute " + "bindingCount", 1, statistics.get("bindingCount")); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("persistentDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "totalDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("totalDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "totalDequeuedBytes", DEQUEUED_BYTES, + statistics.get("totalDequeuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedBytes", DEQUEUED_BYTES, + statistics.get("totalDequeuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "persistentEnqueuedBytes", ENQUEUED_BYTES + + DEQUEUED_BYTES, statistics.get("persistentEnqueuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "totalEnqueuedBytes", ENQUEUED_BYTES + DEQUEUED_BYTES, + statistics.get("totalEnqueuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "queueDepthBytes", ENQUEUED_BYTES, + statistics.get("queueDepthBytes")); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java index d7b17fda8a..eac43e70a4 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java @@ -74,9 +74,10 @@ public class VirtualHostRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, statistics.get(VirtualHost.EXCHANGE_COUNT)); - assertEquals("Unexpected number of queues in statistics", EXPECTED_QUEUES.length, statistics.get(VirtualHost.QUEUE_COUNT)); - assertEquals("Unexpected number of connections in statistics", 1, statistics.get(VirtualHost.CONNECTION_COUNT)); + assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, statistics.get( + "exchangeCount")); + assertEquals("Unexpected number of queues in statistics", EXPECTED_QUEUES.length, statistics.get("queueCount")); + assertEquals("Unexpected number of connections in statistics", 1, statistics.get("connectionCount")); @SuppressWarnings("unchecked") List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE); @@ -589,9 +590,9 @@ public class VirtualHostRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map<String, Object> statistics = (Map<String, Object>) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE); assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, - statistics.get(VirtualHost.EXCHANGE_COUNT)); - assertEquals("Unexpected number of queues in statistics", 0, statistics.get(VirtualHost.QUEUE_COUNT)); - assertEquals("Unexpected number of connections in statistics", 0, statistics.get(VirtualHost.CONNECTION_COUNT)); + statistics.get("exchangeCount")); + assertEquals("Unexpected number of queues in statistics", 0, statistics.get("queueCount")); + assertEquals("Unexpected number of connections in statistics", 0, statistics.get("connectionCount")); @SuppressWarnings("unchecked") List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE); |
