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/broker-core | |
| 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/broker-core')
46 files changed, 1335 insertions, 1368 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(); |
