From ddba94d2538db03bdca182ab29309ebf83cd81c9 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 25 Feb 2014 01:19:43 +0000 Subject: 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 --- .../org/apache/qpid/server/binding/Binding.java | 63 +- .../qpid/server/exchange/AbstractExchange.java | 15 +- .../qpid/server/exchange/DirectExchange.java | 14 +- .../qpid/server/exchange/FanoutExchange.java | 14 +- .../qpid/server/exchange/HeadersBinding.java | 6 +- .../qpid/server/exchange/HeadersExchange.java | 6 +- .../apache/qpid/server/exchange/TopicExchange.java | 8 +- .../org/apache/qpid/server/model/Attribute.java | 587 ---------------- .../java/org/apache/qpid/server/model/Binding.java | 3 + .../java/org/apache/qpid/server/model/Broker.java | 14 + .../apache/qpid/server/model/ConfiguredObject.java | 10 +- .../org/apache/qpid/server/model/Connection.java | 54 +- .../org/apache/qpid/server/model/Consumer.java | 22 +- .../org/apache/qpid/server/model/Exchange.java | 36 +- .../apache/qpid/server/model/ManagedStatistic.java | 30 + .../java/org/apache/qpid/server/model/Port.java | 3 - .../qpid/server/model/PreferencesProvider.java | 3 - .../java/org/apache/qpid/server/model/Queue.java | 101 +-- .../java/org/apache/qpid/server/model/Session.java | 40 +- .../org/apache/qpid/server/model/VirtualHost.java | 47 +- .../model/adapter/AbstractConfiguredObject.java | 778 ++++++++++++++++++++- .../model/adapter/AbstractKeyStoreAdapter.java | 8 - .../model/adapter/AbstractPluginAdapter.java | 9 +- .../adapter/AccessControlProviderAdapter.java | 10 +- .../adapter/AuthenticationProviderAdapter.java | 18 +- .../qpid/server/model/adapter/BindingAdapter.java | 14 +- .../qpid/server/model/adapter/BrokerAdapter.java | 27 +- .../server/model/adapter/ConnectionAdapter.java | 72 +- .../qpid/server/model/adapter/ConsumerAdapter.java | 59 +- .../qpid/server/model/adapter/ExchangeAdapter.java | 73 +- .../adapter/FileSystemPreferencesProvider.java | 9 +- .../server/model/adapter/GroupProviderAdapter.java | 26 +- .../qpid/server/model/adapter/KeyStoreAdapter.java | 4 +- .../qpid/server/model/adapter/NoStatistics.java | 46 -- .../qpid/server/model/adapter/PortAdapter.java | 8 +- .../qpid/server/model/adapter/QueueAdapter.java | 200 +++--- .../qpid/server/model/adapter/SessionAdapter.java | 92 +-- .../server/model/adapter/StatisticsAdapter.java | 67 -- .../server/model/adapter/TrustStoreAdapter.java | 4 +- .../server/model/adapter/VirtualHostAdapter.java | 82 +-- .../model/adapter/VirtualHostAliasAdapter.java | 7 - .../qpid/server/security/SecurityManager.java | 4 +- .../store/DurableConfigurationStoreHelper.java | 5 +- .../qpid/server/virtualhost/QueueRecoverer.java | 1 + .../qpid/server/queue/AbstractQueueTestBase.java | 2 +- .../virtualhost/StandardVirtualHostTest.java | 2 +- .../qpid/server/protocol/v1_0/SendingLink_1_0.java | 4 +- .../server/management/amqp/ManagementNode.java | 5 +- .../server/management/plugin/HttpManagement.java | 2 +- .../rest/ConfiguredObjectToMapConverter.java | 23 +- .../plugin/servlet/rest/MessageServlet.java | 2 +- .../rest/ConfiguredObjectToMapConverterTest.java | 13 +- .../org/apache/qpid/server/jmx/JMXManagement.java | 4 +- .../mbeans/AbstractStatisticsGatheringMBean.java | 27 +- .../qpid/server/jmx/mbeans/ConnectionMBean.java | 34 +- .../apache/qpid/server/jmx/mbeans/QueueMBean.java | 16 +- .../server/jmx/mbeans/ServerInformationMBean.java | 24 + .../server/jmx/mbeans/VirtualHostManagerMBean.java | 23 + .../server/jmx/mbeans/ConnectionMBeanTest.java | 13 +- .../qpid/server/jmx/mbeans/QueueMBeanTest.java | 22 +- .../jmx/mbeans/ServerInformationMBeanTest.java | 11 +- .../java/org/apache/qpid/systest/rest/Asserts.java | 73 +- .../rest/AuthenticationProviderRestTest.java | 5 +- .../qpid/systest/rest/BrokerRestHttpsTest.java | 4 +- .../apache/qpid/systest/rest/BrokerRestTest.java | 4 +- .../qpid/systest/rest/ConnectionRestTest.java | 45 +- .../qpid/systest/rest/GroupProviderRestTest.java | 4 +- .../systest/rest/PreferencesProviderRestTest.java | 4 +- .../apache/qpid/systest/rest/QueueRestTest.java | 52 +- .../qpid/systest/rest/VirtualHostRestTest.java | 13 +- 70 files changed, 1572 insertions(+), 1558 deletions(-) delete mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java create mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java delete mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/NoStatistics.java delete mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StatisticsAdapter.java 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> _stateChangeListeners = new CopyOnWriteArrayList>(); @@ -56,16 +62,33 @@ public class Binding final AMQQueue queue, final Exchange exchange, final Map arguments) + { + this(id, convertToAttributes(bindingKey, arguments), queue, exchange); + } + + private static Map convertToAttributes(final String bindingKey, final Map arguments) + { + Map attributes = new HashMap(); + 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 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 arguments = (Map) 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 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 implements Exchange implements Exchange implements Exchange implements Exchange implements Exchange implements Exchange { 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 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 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 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 HashMap> filteredBindings = new HashMap>(_filteredBindings.get()); - Map bindingsForQueue = filteredBindings.remove(binding.getQueue()); + Map 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 } } - filteredBindings.put(binding.getQueue(), bindingsForQueue); + filteredBindings.put(binding.getAMQQueue(), bindingsForQueue); _filteredBindings.set(filteredBindings); @@ -190,7 +190,7 @@ public class FanoutExchange extends AbstractExchange 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 HashMap> filteredBindings = new HashMap>(_filteredBindings.get()); - Map bindingsForQueue = filteredBindings.remove(binding.getQueue()); + Map bindingsForQueue = filteredBindings.remove(binding.getAMQQueue()); if(bindingsForQueue.size()>1) { bindingsForQueue = new HashMap(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 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 protected void onBind(final Binding binding) { String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); Map 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 protected synchronized void registerQueue(final Binding binding) throws AMQInvalidArgumentException { final String bindingKey = binding.getBindingKey(); - AMQQueue queue = binding.getQueue(); + AMQQueue queue = binding.getAMQQueue(); Map args = binding.getArguments(); assert queue != null; @@ -202,8 +202,8 @@ public class TopicExchange extends AbstractExchange { 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 } 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 -{ - private static Map, Collection>> _allAttributes = - Collections.synchronizedMap(new HashMap, Collection>>()); - - private final String _name; - private final Class _type; - private final Converter _converter; - private final Method _getter; - - private Attribute(Class clazz, String name, Class type, final Method getter) - { - _name = name; - _type = type; - _converter = getConverter(type); - _getter = getter; - addToAttributesSet(clazz, this); - } - - private static Converter getConverter(final Class type) - { - if(type == String.class) - { - return (Converter) STRING_CONVERTER; - } - else if(type == Integer.class) - { - return (Converter) INT_CONVERTER; - } - else if(type == Long.class) - { - return (Converter) LONG_CONVERTER; - } - else if(type == Boolean.class) - { - return (Converter) BOOLEAN_CONVERTER; - } - else if(type == UUID.class) - { - return (Converter) UUID_CONVERTER; - } - else if(Enum.class.isAssignableFrom(type)) - { - return (Converter) new EnumConverter((Class)type); - } - else if(List.class.isAssignableFrom(type)) - { - return (Converter) LIST_CONVERTER; - } - else if(Map.class.isAssignableFrom(type)) - { - return (Converter) MAP_CONVERTER; - } - else if(Collection.class.isAssignableFrom(type)) - { - return (Converter) COLLECTION_CONVERTER; - } - else if(ConfiguredObject.class.isAssignableFrom(type)) - { - return (Converter) new ConfiguredObjectConverter(type); - } - throw new IllegalArgumentException("Cannot create attributes of type " + type.getName()); - } - - private static void addToAttributesSet(final Class clazz, final Attribute attribute) - { - synchronized (_allAttributes) - { - Collection> classAttributes = _allAttributes.get(clazz); - if(classAttributes == null) - { - classAttributes = new ArrayList>(); - for(Map.Entry, Collection>> entry : _allAttributes.entrySet()) - { - if(entry.getKey().isAssignableFrom(clazz)) - { - classAttributes.addAll(entry.getValue()); - } - } - _allAttributes.put(clazz, classAttributes); - - } - for(Map.Entry, Collection>> entry : _allAttributes.entrySet()) - { - if(clazz.isAssignableFrom(entry.getKey())) - { - entry.getValue().add(attribute); - } - } - - } - } - - public String getName() - { - return _name; - } - - public Class getType() - { - return _type; - } - - public T getValue(C configuredObject) - { - Object o = configuredObject.getAttribute(_name); - return _converter.convert(o); - } - - - public T getValue(Map attributeMap) - { - Object o = attributeMap.get(_name); - return _converter.convert(o); - } - - - @Override - public String toString() - { - return _name; - } - - private static interface Converter - { - T convert(Object o); - } - - private static final Converter STRING_CONVERTER = new Converter() - { - @Override - public String convert(final Object o) - { - return o == null ? null : o.toString(); - } - }; - - private static final Converter UUID_CONVERTER = new Converter() - { - @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_CONVERTER = new Converter() - { - - @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 INT_CONVERTER = new Converter() - { - - @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_CONVERTER = new Converter() - { - - @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_CONVERTER = new Converter() - { - @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_CONVERTER = new Converter() - { - @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_CONVERTER = new Converter() - { - @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> implements Converter - { - private final Class _klazz; - - private EnumConverter(final Class 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> implements Converter - { - private final Class _klazz; - - private ConfiguredObjectConverter(final Class 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 Collection getAttributeNames(Class clazz) - { - final Collection> attrs = getAttributes(clazz); - - return new AbstractCollection() - { - @Override - public Iterator iterator() - { - final Iterator> underlyingIterator = attrs.iterator(); - return new Iterator() - { - @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 Collection> getAttributes(final Class clazz) - { - if(!_allAttributes.containsKey(clazz)) - { - processAttributes(clazz); - } - final Collection> attributes = (Collection) _allAttributes.get(clazz); - return attributes; - } - - private static void processAttributes(final Class clazz) - { - if(_allAttributes.containsKey(clazz)) - { - return; - } - - - for(Class parent : clazz.getInterfaces()) - { - if(ConfiguredObject.class.isAssignableFrom(parent)) - { - processAttributes((Class)parent); - } - } - final Class superclass = clazz.getSuperclass(); - if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) - { - processAttributes((Class) superclass); - } - - final ArrayList> attributeList = new ArrayList>(); - _allAttributes.put(clazz, attributeList); - - for(Class parent : clazz.getInterfaces()) - { - if(ConfiguredObject.class.isAssignableFrom(parent)) - { - Collection> attrs = _allAttributes.get(parent); - for(Attribute attr : attrs) - { - if(!attributeList.contains(attr)) - { - attributeList.add(attr); - } - } - } - } - if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) - { - Collection> 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 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> extends ConfiguredObject @ManagedAttribute Map 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> extends ConfiguredObject 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> */ Object getAttribute(String name); - T getAttribute(Attribute attr); + T getAttribute(AbstractConfiguredObject.Attribute attr); /** * Return the map containing only explicitly set attributes @@ -272,11 +274,11 @@ public interface ConfiguredObject> /** - * 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 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> extends ConfiguredObject { - // 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 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> extends ConfiguredObject @ManagedAttribute Port getPort(); + @ManagedStatistic + long getBytesIn(); + + @ManagedStatistic + long getBytesOut(); + + @ManagedStatistic + long getMessagesIn(); + + @ManagedStatistic + long getMessagesOut(); + + @ManagedStatistic + long getLastIoTime(); + + @ManagedStatistic + int getSessionCount(); + //children Collection 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> extends ConfiguredObject @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 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> extends ConfiguredObject { - 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 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> extends ConfiguredObject //children Collection getBindings(); Collection 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> extends ConfiguredObject { 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> extends ConfiguredObject { - 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 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> extends ConfiguredObject 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> extends ConfiguredObject { - // 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 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> extends ConfiguredObject Collection getConsumers(); Collection 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> extends ConfiguredObject { - // 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 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> 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 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> implements ConfiguredObject { private static final Object ID = "id"; + + private static final Map, Collection>> _allAttributes = + Collections.synchronizedMap(new HashMap, Collection>>()); + + private static final Map, Collection>> _allStatistics = + Collections.synchronizedMap(new HashMap, Collection>>()); + private final Map _attributes = new HashMap(); private final Map, ConfiguredObject> _parents = new HashMap, ConfiguredObject>(); @@ -52,6 +62,8 @@ public abstract class AbstractConfiguredObject> im private final UUID _id; private final Map _defaultAttributes = new HashMap(); private final TaskExecutor _taskExecutor; + private final long _createdTime; + private final String _createdBy; protected AbstractConfiguredObject(UUID id, Map defaults, @@ -70,27 +82,30 @@ public abstract class AbstractConfiguredObject> im if (attributes != null) { Collection 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 entry : attributes.entrySet()) + else { - if(entry.getValue()!=null) + for(Map.Entry 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> 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.emptyMap(), Collections.emptyMap(), taskExecutor); } public final UUID getId() @@ -258,9 +276,20 @@ public abstract class AbstractConfiguredObject> 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> im @Override public String getCreatedBy() { - return null; + return _createdBy; + } + + protected String getCurrentUserName() + { + Subject currentSubject = Subject.getSubject(AccessController.getContext()); + Set 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> im { return (String)getAttribute(TYPE); } + + + @Override + public Map getStatistics() + { + Collection stats = getStatistics(getClass()); + Map map = new HashMap(); + for(Statistic stat : stats) + { + map.put(stat.getName(), (Number) stat.getValue(this)); + } + return map; + } + + //========================================================================================= + + private static abstract class AttributeOrStatistic + { + + protected final String _name; + protected final Class _type; + protected final Converter _converter; + protected final Method _getter; + + private AttributeOrStatistic( + String name, final Method getter, Class type) + { + _name = name; + _getter = getter; + _type = type; + _converter = getConverter(type); + + } + + public String getName() + { + return _name; + } + + public Class 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 attributeMap) + { + Object o = attributeMap.get(_name); + return _converter.convert(o); + } + } + + private static final class Statistic extends AttributeOrStatistic + { + private Statistic(Class clazz, String name, Class type, final Method getter) + { + super(name, getter, type); + addToStatisticsSet(clazz, this); + } + } + + public static final class Attribute extends AttributeOrStatistic + { + + private Attribute(Class clazz, String name, Class type, final Method getter) + { + super(name, getter, type); + addToAttributesSet(clazz, this); + } + + + + } + + + private static interface Converter + { + T convert(Object o); + } + + private static final Converter STRING_CONVERTER = new Converter() + { + @Override + public String convert(final Object o) + { + return o == null ? null : o.toString(); + } + }; + + private static final Converter UUID_CONVERTER = new Converter() + { + @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_CONVERTER = new Converter() + { + + @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 INT_CONVERTER = new Converter() + { + + @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_CONVERTER = new Converter() + { + + @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_CONVERTER = new Converter() + { + @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_CONVERTER = new Converter() + { + @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_CONVERTER = new Converter() + { + @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> implements Converter + { + private final Class _klazz; + + private EnumConverter(final Class 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> implements Converter + { + private final Class _klazz; + + private ConfiguredObjectConverter(final Class 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 Converter getConverter(final Class type) + { + if(type == String.class) + { + return (Converter) STRING_CONVERTER; + } + else if(type == Integer.class) + { + return (Converter) INT_CONVERTER; + } + else if(type == Long.class) + { + return (Converter) LONG_CONVERTER; + } + else if(type == Boolean.class) + { + return (Converter) BOOLEAN_CONVERTER; + } + else if(type == UUID.class) + { + return (Converter) UUID_CONVERTER; + } + else if(Enum.class.isAssignableFrom(type)) + { + return (Converter) new EnumConverter((Class)type); + } + else if(List.class.isAssignableFrom(type)) + { + return (Converter) LIST_CONVERTER; + } + else if(Map.class.isAssignableFrom(type)) + { + return (Converter) MAP_CONVERTER; + } + else if(Collection.class.isAssignableFrom(type)) + { + return (Converter) COLLECTION_CONVERTER; + } + else if(ConfiguredObject.class.isAssignableFrom(type)) + { + return (Converter) new ConfiguredObjectConverter(type); + } + throw new IllegalArgumentException("Cannot create attributes of type " + type.getName()); + } + + private static void addToAttributesSet(final Class clazz, final Attribute attribute) + { + synchronized (_allAttributes) + { + Collection> classAttributes = _allAttributes.get(clazz); + if(classAttributes == null) + { + classAttributes = new ArrayList>(); + for(Map.Entry, Collection>> entry : _allAttributes.entrySet()) + { + if(entry.getKey().isAssignableFrom(clazz)) + { + classAttributes.addAll(entry.getValue()); + } + } + _allAttributes.put(clazz, classAttributes); + + } + for(Map.Entry, Collection>> entry : _allAttributes.entrySet()) + { + if(clazz.isAssignableFrom(entry.getKey())) + { + entry.getValue().add(attribute); + } + } + + } + } + private static void addToStatisticsSet(final Class clazz, final Statistic statistic) + { + synchronized (_allStatistics) + { + Collection> classAttributes = _allStatistics.get(clazz); + if(classAttributes == null) + { + classAttributes = new ArrayList>(); + for(Map.Entry, Collection>> entry : _allStatistics.entrySet()) + { + if(entry.getKey().isAssignableFrom(clazz)) + { + classAttributes.addAll(entry.getValue()); + } + } + _allStatistics.put(clazz, classAttributes); + + } + for(Map.Entry, Collection>> entry : _allStatistics.entrySet()) + { + if(clazz.isAssignableFrom(entry.getKey())) + { + entry.getValue().add(statistic); + } + } + + } + } + + + private static void processAttributes(final Class clazz) + { + if(_allAttributes.containsKey(clazz)) + { + return; + } + + + for(Class parent : clazz.getInterfaces()) + { + if(ConfiguredObject.class.isAssignableFrom(parent)) + { + processAttributes((Class)parent); + } + } + final Class superclass = clazz.getSuperclass(); + if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) + { + processAttributes((Class) superclass); + } + + final ArrayList> attributeList = new ArrayList>(); + final ArrayList> statisticList = new ArrayList>(); + + _allAttributes.put(clazz, attributeList); + _allStatistics.put(clazz, statisticList); + + for(Class parent : clazz.getInterfaces()) + { + if(ConfiguredObject.class.isAssignableFrom(parent)) + { + Collection> attrs = _allAttributes.get(parent); + for(Attribute attr : attrs) + { + if(!attributeList.contains(attr)) + { + attributeList.add(attr); + } + } + Collection> stats = _allStatistics.get(parent); + for(Statistic stat : stats) + { + if(!statisticList.contains(stat)) + { + statisticList.add(stat); + } + } + } + } + if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass)) + { + Collection> attrs = _allAttributes.get(superclass); + Collection> 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 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 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 Collection getAttributeNames(Class clazz) + { + final Collection> attrs = getAttributes(clazz); + + return new AbstractCollection() + { + @Override + public Iterator iterator() + { + final Iterator> underlyingIterator = attrs.iterator(); + return new Iterator() + { + @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 Collection> getAttributes(final Class clazz) + { + if(!_allAttributes.containsKey(clazz)) + { + processAttributes(clazz); + } + final Collection> attributes = (Collection) _allAttributes.get(clazz); + return attributes; + } + + + protected static Collection getStatistics(final Class clazz) + { + if(!_allStatistics.containsKey(clazz)) + { + processAttributes(clazz); + } + final Collection 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; @@ -114,12 +112,6 @@ public abstract class AbstractKeyStoreAdapter> ext throw new IllegalStateException(); } - @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - @Override public Collection getChildren(Class clazz) { 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> extends AbstractConfiguredObject implements Plugin @@ -96,11 +94,6 @@ public abstract class AbstractPluginAdapter> extends Abstrac throw new UnsupportedOperationException(); } - @Override - public Statistics getStatistics() - { - return null; - } @Override public Collection getChildren(Class clazz) @@ -111,7 +104,7 @@ public abstract class AbstractPluginAdapter> extends Abstrac @Override public Collection 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 attributes, Collection attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.emptyMap(), Collections.emptyMap(), broker.getTaskExecutor()); if (accessControl == null) { @@ -79,7 +79,7 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject createSupportedAttributes(Collection factoryAttributes) { - List attributesNames = new ArrayList(Attribute.getAttributeNames(AccessControlProvider.class)); + List attributesNames = new ArrayList(getAttributeNames(AccessControlProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -144,12 +144,6 @@ public class AccessControlProviderAdapter extends AbstractConfiguredObject getAttributeNames() { 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 attributes, Collection attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.emptyMap(), Collections.emptyMap(), broker.getTaskExecutor()); _authManager = authManager; _broker = broker; _supportedAttributes = createSupportedAttributes(attributeNames); @@ -156,12 +156,6 @@ public abstract class AuthenticationProviderAdapter getAttributeNames() { @@ -331,7 +325,7 @@ public abstract class AuthenticationProviderAdapter createSupportedAttributes(Collection factoryAttributes) { - List attributesNames = new ArrayList(Attribute.getAttributeNames(AuthenticationProvider.class)); + List attributesNames = new ArrayList(getAttributeNames(AuthenticationProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -662,12 +656,6 @@ public abstract class AuthenticationProviderAdapter Collection getChildren(Class clazz) { @@ -685,7 +673,7 @@ public abstract class AuthenticationProviderAdapter 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 implements Binding { 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 impl return 0; //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public Collection getChildren(Class clazz) { @@ -129,6 +123,12 @@ final class BindingAdapter extends AbstractConfiguredObject impl return new HashMap (_binding.getArguments()); } + @Override + public long getMatches() + { + return _binding.getMatches(); + } + public void delete() { _binding.delete(); @@ -180,7 +180,7 @@ final class BindingAdapter extends AbstractConfiguredObject impl @Override public Collection 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> extends AbstractConfiguredObject private final VirtualHostRegistry _virtualHostRegistry; private final LogRecorder _logRecorder; private final RootMessageLogger _rootMessageLogger; - private StatisticsAdapter _statistics; private final Map> _vhostAdapters = new HashMap>(); private final Map> _portAdapters = new HashMap>(); @@ -188,7 +187,6 @@ public class BrokerAdapter> 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> 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 Collection getChildren(Class clazz) @@ -889,7 +906,7 @@ public class BrokerAdapter> extends AbstractConfiguredObject @Override public Collection 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 _sessionAdapters = new HashMap(); - 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 getAttributeNames() { - final HashSet attrNames = new HashSet(Attribute.getAttributeNames(Connection.class)); + final HashSet attrNames = new HashSet(getAttributeNames(Connection.class)); return Collections.unmodifiableCollection(attrNames); } - public Statistics getStatistics() - { - return _statistics; - } @Override public Collection getChildren(Class clazz) @@ -327,34 +321,6 @@ final class ConnectionAdapter extends AbstractConfiguredObject 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 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 i _consumer = consumer; _queue = queueAdapter; _session = sessionAdapter; - _statistics = new ConsumerStatistics(); //TODO } @@ -108,7 +104,7 @@ public class ConsumerAdapter extends AbstractConfiguredObject i @Override public Collection 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 i return super.getAttribute(name); //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public Collection getChildren(Class clazz) { @@ -208,38 +199,28 @@ public class ConsumerAdapter extends AbstractConfiguredObject i return null; } - private class ConsumerStatistics implements Statistics + @Override + public long getBytesOut() { + return _consumer.getBytesOut(); + } - public Collection 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 im private final Map _bindingAdapters = new HashMap(); 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 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 im return 0; //TODO } - public Statistics getStatistics() - { - return _statistics; - } - @Override public Collection getChildren(Class clazz) { @@ -256,7 +249,7 @@ final class ExchangeAdapter extends AbstractConfiguredObject 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 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 im @Override public Collection getAttributeNames() { - return Attribute.getAttributeNames(Exchange.class); + return getAttributeNames(Exchange.class); } @Override @@ -367,46 +360,34 @@ final class ExchangeAdapter extends AbstractConfiguredObject im _vhost.getSecurityManager().authoriseUpdate(_exchange); } - private class ExchangeStatistics implements Statistics + @Override + public long getBindingCount() { + return _exchange.getBindingCount(); + } - public Collection 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 getAttributeNames() { - return Attribute.getAttributeNames(FileSystemPreferencesProvider.class); + return getAttributeNames(FileSystemPreferencesProvider.class); } @Override @@ -158,12 +157,6 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject Collection getChildren(Class clazz) { 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 attributes, Collection attributeNames) { - super(id, null, null, broker.getTaskExecutor()); + super(id, Collections.emptyMap(), Collections.emptyMap(), broker.getTaskExecutor()); if (groupManager == null) { @@ -77,7 +77,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject createSupportedAttributes(Collection factoryAttributes) { - List attributesNames = new ArrayList(Attribute.getAttributeNames(GroupProvider.class)); + List attributesNames = new ArrayList(getAttributeNames(GroupProvider.class)); if (factoryAttributes != null) { attributesNames.addAll(factoryAttributes); @@ -145,12 +145,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject getAttributeNames() { @@ -426,12 +420,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject Collection getChildren( Class clazz) @@ -479,7 +467,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject getAttributeNames() { - return Attribute.getAttributeNames(Group.class); + return getAttributeNames(Group.class); } @Override @@ -538,7 +526,7 @@ public class GroupProviderAdapter extends AbstractConfiguredObject getAttributeNames() { - return Attribute.getAttributeNames(GroupMember.class); + return getAttributeNames(GroupMember.class); } @Override @@ -615,12 +603,6 @@ public class GroupProviderAdapter extends AbstractConfiguredObject Collection getChildren( Class 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 im @Override public Collection 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 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 @@ -225,12 +225,6 @@ abstract public class PortAdapter> extends AbstractConf throw new IllegalStateException(); } - @Override - public Statistics getStatistics() - { - return NoStatistics.getInstance(); - } - @Override public Collection getChildren(Class clazz) { @@ -279,7 +273,7 @@ abstract public class PortAdapter> extends AbstractConf @Override public Collection 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> extends AbstractConfiguredOb private final VirtualHostAdapter _vhost; - private QueueStatisticsAdapter _statistics; private QueueNotificationListener _queueNotificationListener; public QueueAdapter(final VirtualHostAdapter virtualHostAdapter, final AMQQueue queue) @@ -77,7 +76,6 @@ final class QueueAdapter> extends AbstractConfiguredOb _queue = queue; _queue.addConsumerRegistrationListener(this); populateConsumers(); - _statistics = new QueueStatisticsAdapter(queue); _queue.setNotificationListener(this); } @@ -333,7 +331,7 @@ final class QueueAdapter> extends AbstractConfiguredOb @Override public Collection getAttributeNames() { - return Attribute.getAttributeNames(Queue.class); + return getAttributeNames(Queue.class); } @Override @@ -608,10 +606,6 @@ final class QueueAdapter> extends AbstractConfiguredOb return super.getAttribute(name); } - public Statistics getStatistics() - { - return _statistics; - } @Override public Collection getChildren(Class clazz) @@ -748,100 +742,120 @@ final class QueueAdapter> 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 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) { 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 impl private AMQSessionModel _session; - private SessionStatistics _statistics; private Map _consumerAdapters = new HashMap(); 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 impl @Override public Collection getAttributeNames() { - return Attribute.getAttributeNames(Session.class); + return getAttributeNames(Session.class); } @Override @@ -183,11 +180,6 @@ final class SessionAdapter extends AbstractConfiguredObject impl return super.getAttribute(name); //TODO - Implement } - public Statistics getStatistics() - { - return _statistics; - } - @Override public Collection getChildren(Class clazz) { @@ -211,68 +203,38 @@ final class SessionAdapter extends AbstractConfiguredObject 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 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 _statistics = - new HashMap(); - - - 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 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 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 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 _exchangeAdapters = new HashMap(); - private StatisticsAdapter _statistics; private final Broker _broker; private final List _aliases = new ArrayList(); private StatisticsGatherer _brokerStatisticsGatherer; @@ -511,11 +510,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject Collection getChildren(Class clazz) { @@ -909,7 +903,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject getAttributeNames() { - return Attribute.getAttributeNames(VirtualHost.class); + return getAttributeNames(VirtualHost.class); } private void checkVHostStateIsActive() @@ -1053,49 +1047,46 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject 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 getStatisticNames() - { - Set stats = new HashSet(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 Collection getChildren(Class clazz) { 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 attributesMap = new HashMap(); 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 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 attributes = new LinkedHashMap(_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, 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 arguments = binding.getArguments(); diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java index be6eba3a72..94120371fb 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java @@ -224,8 +224,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS List bindingsToRemove = new ArrayList(); for(Binding existingBinding : bindings) { - if(existingBinding.getExchange() != _vhost.getDefaultExchange() - && existingBinding.getExchange() != exchange) + if(existingBinding.getExchangeImpl() != _vhost.getDefaultExchange() + && existingBinding.getExchangeImpl() != exchange) { bindingsToRemove.add(existingBinding); } diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java index 9c9e2a011f..c163bfa238 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java @@ -33,11 +33,11 @@ import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.message.internal.InternalMessage; import org.apache.qpid.server.message.internal.InternalMessageHeader; import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.plugin.SystemNodeCreator; import org.apache.qpid.server.protocol.AMQSessionModel; @@ -215,7 +215,8 @@ class ManagementNode implements MessageSource())); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 14196310a5..047cdfc29b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -430,7 +430,7 @@ public class HttpManagement extends AbstractPluginAdapter implem @Override public Collection getAttributeNames() { - return Attribute.getAttributeNames(HttpManagement.class); + return getAttributeNames(HttpManagement.class); } @Override diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 0d5d868af2..2cf7f3f80c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -21,14 +21,12 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; -import org.apache.qpid.server.model.Statistics; public class ConfiguredObjectToMapConverter { @@ -81,25 +79,14 @@ public class ConfiguredObjectToMapConverter private void incorporateStatisticsIntoMap( final ConfiguredObject confObject, Map object) { - Statistics statistics = confObject.getStatistics(); - Map statMap = new HashMap(); - if (statistics != null) - { - for(String name : statistics.getStatisticNames()) - { - Object value = statistics.getStatistic(name); - if(value != null) - { - statMap.put(name, value); - } - } + Map statMap = confObject.getStatistics(); - if(!statMap.isEmpty()) - { - object.put(STATISTICS_MAP_KEY, statMap); - } + if(!statMap.isEmpty()) + { + object.put(STATISTICS_MAP_KEY, statMap); } + } private void incorporateChildrenIntoMap( diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java index fa7fb06077..d28338b354 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java @@ -106,7 +106,7 @@ public class MessageServlet extends AbstractServlet response.setContentType("application/json"); final List> messages = messageCollector.getMessages(); - int queueSize = ((Number) queue.getStatistics().getStatistic(Queue.QUEUE_DEPTH_MESSAGES)).intValue(); + int queueSize = (int) queue.getQueueDepthMessages(); String min = messages.isEmpty() ? "0" : messages.get(0).get("position").toString(); String max = messages.isEmpty() ? "0" : messages.get(messages.size()-1).get("position").toString(); response.setHeader("Content-Range", (min + "-" + max + "/" + queueSize)); diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index 8e5c5e1c10..0c2b6a5385 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -25,6 +25,7 @@ import static org.apache.qpid.server.management.plugin.servlet.rest.ConfiguredOb import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -32,7 +33,6 @@ import junit.framework.TestCase; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; -import org.apache.qpid.server.model.Statistics; public class ConfiguredObjectToMapConverterTest extends TestCase { @@ -50,8 +50,7 @@ public class ConfiguredObjectToMapConverterTest extends TestCase final String statisticName = "statisticName"; final int statisticValue = 10; - Statistics mockStatistics = createMockStatistics(statisticName, statisticValue); - when(_configuredObject.getStatistics()).thenReturn(mockStatistics); + when(_configuredObject.getStatistics()).thenReturn(Collections.singletonMap(statisticName, (Number) statisticValue)); Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0); Map statsAsMap = (Map) resultMap.get(STATISTICS_MAP_KEY); @@ -127,14 +126,6 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(mockConfiguredObject.getAttribute(attributeName)).thenReturn(attributeValue); } - private Statistics createMockStatistics(String statName, int statValue) - { - Statistics mockStatistics = mock(Statistics.class); - when(mockStatistics.getStatisticNames()).thenReturn(Arrays.asList(statName)); - when(mockStatistics.getStatistic(statName)).thenReturn(statValue); - return mockStatistics; - } - private static interface TestChild extends ConfiguredObject { } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java index cb3cde8259..b1999b1292 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java @@ -24,9 +24,7 @@ package org.apache.qpid.server.jmx; import java.io.IOException; import java.lang.reflect.Type; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.UUID; @@ -320,7 +318,7 @@ public class JMXManagement extends AbstractPluginAdapter implemen @Override public Collection getAttributeNames() { - return Attribute.getAttributeNames(JMXManagement.class); + return getAttributeNames(JMXManagement.class); } @Override diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java index 6ab7db3629..6223d9d906 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/AbstractStatisticsGatheringMBean.java @@ -66,10 +66,10 @@ abstract class AbstractStatisticsGatheringMBean exte final long period = time - _lastStatUpdateTime; if(period > _statUpdatePeriod) { - long messagesReceived = getStatistic(VirtualHost.MESSAGES_IN); - long messagesSent = getStatistic(VirtualHost.MESSAGES_OUT); - long bytesReceived = getStatistic(VirtualHost.BYTES_IN); - long bytesSent = getStatistic(VirtualHost.BYTES_OUT); + long messagesReceived = getMessagesIn(); + long messagesSent = getMessagesOut(); + long bytesReceived = getBytesIn(); + long bytesSent = getBytesOut(); double messageReceivedRate = (double)(messagesReceived - _lastMessagesReceived) / (double)period; double messageSentRate = (double)(messagesSent - _lastMessagesSent) / (double)period; @@ -109,10 +109,13 @@ abstract class AbstractStatisticsGatheringMBean exte } } - private long getStatistic(String name) - { - return (Long) getConfiguredObject().getStatistics().getStatistic(name); - } + protected abstract long getBytesOut(); + + protected abstract long getBytesIn(); + + protected abstract long getMessagesOut(); + + protected abstract long getMessagesIn(); public synchronized void resetStatistics() throws Exception { @@ -147,13 +150,13 @@ abstract class AbstractStatisticsGatheringMBean exte public synchronized long getTotalMessagesDelivered() { updateStats(); - return getStatistic(Connection.MESSAGES_OUT); + return getMessagesOut(); } public synchronized long getTotalDataDelivered() { updateStats(); - return getStatistic(Connection.BYTES_OUT); + return getBytesOut(); } protected final T getConfiguredObject() @@ -188,13 +191,13 @@ abstract class AbstractStatisticsGatheringMBean exte public synchronized long getTotalMessagesReceived() { updateStats(); - return getStatistic(Connection.MESSAGES_IN); + return getMessagesIn(); } public synchronized long getTotalDataReceived() { updateStats(); - return getStatistic(Connection.BYTES_IN); + return getBytesIn(); } } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java index 34366a196c..a016ff9d9d 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java @@ -39,7 +39,6 @@ import org.apache.qpid.management.common.mbeans.ManagedConnection; import org.apache.qpid.server.jmx.ManagedObject; import org.apache.qpid.server.model.Connection; import org.apache.qpid.server.model.Session; -import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.util.ServerScopedRuntimeException; public class ConnectionMBean extends AbstractStatisticsGatheringMBean implements ManagedConnection @@ -75,6 +74,30 @@ public class ConnectionMBean extends AbstractStatisticsGatheringMBean0l); diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java index 67abe77e1f..4775650954 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java @@ -149,7 +149,7 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN public Integer getMessageCount() { - return getStatisticValue(Queue.QUEUE_DEPTH_MESSAGES).intValue(); + return (int) _queue.getQueueDepthMessages(); } public Integer getMaximumDeliveryCount() @@ -159,22 +159,22 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN public Long getReceivedMessageCount() { - return getStatisticValue(Queue.TOTAL_ENQUEUED_MESSAGES).longValue(); + return _queue.getTotalEnqueuedMessages(); } public Long getQueueDepth() { - return getStatisticValue(Queue.QUEUE_DEPTH_BYTES).longValue(); + return _queue.getQueueDepthBytes(); } public Integer getActiveConsumerCount() { - return getStatisticValue(Queue.CONSUMER_COUNT_WITH_CREDIT).intValue(); + return (int) _queue.getConsumerCountWithCredit(); } public Integer getConsumerCount() { - return getStatisticValue(Queue.CONSUMER_COUNT).intValue(); + return (int) _queue.getConsumerCount(); } public String getOwner() @@ -676,12 +676,6 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN _queue.setAttribute(Queue.DESCRIPTION, getDescription(), description); } - private Number getStatisticValue(String name) - { - final Number statistic = (Number) _queue.getStatistics().getStatistic(name); - return statistic == null ? Integer.valueOf(0) : statistic; - } - @Override public String getMessageGroupKey() { diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java index 67d5861dec..75a395bef5 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ServerInformationMBean.java @@ -44,6 +44,30 @@ public class ServerInformationMBean extends AbstractStatisticsGatheringMBean statistics = (Map) virtualHost.get(STATISTICS_ATTRIBUTE); Asserts.assertAttributesPresent(statistics, - VirtualHost.AVAILABLE_STATISTICS, - VirtualHost.BYTES_RETAINED, - VirtualHost.LOCAL_TRANSACTION_BEGINS, - VirtualHost.LOCAL_TRANSACTION_ROLLBACKS, - VirtualHost.MESSAGES_RETAINED, - VirtualHost.STATE_CHANGED, - VirtualHost.XA_TRANSACTION_BRANCH_ENDS, - VirtualHost.XA_TRANSACTION_BRANCH_STARTS, - VirtualHost.XA_TRANSACTION_BRANCH_SUSPENDS); + "queueCount","exchangeCount","bytesIn","bytesOut","messagesIn", "messagesOut"); } @@ -102,7 +95,7 @@ public class Asserts { assertNotNull("Queue " + queueName + " is not found!", queueData); Asserts.assertAttributesPresent(queueData, - Attribute.getAttributeNames(Queue.class), + AbstractConfiguredObject.getAttributeNames(Queue.class), Queue.CREATED_BY, Queue.CREATED_TIME, Queue.LAST_UPDATED_BY, @@ -154,8 +147,23 @@ public class Asserts assertNotNull("Unexpected value of queue attribute statistics", queueData.get(Asserts.STATISTICS_ATTRIBUTE)); @SuppressWarnings("unchecked") Map statistics = (Map) queueData.get(Asserts.STATISTICS_ATTRIBUTE); - Asserts.assertAttributesPresent(statistics, Queue.AVAILABLE_STATISTICS, Queue.DISCARDS_TTL_BYTES, - Queue.DISCARDS_TTL_MESSAGES, Queue.STATE_CHANGED); + + Asserts.assertAttributesPresent(statistics, + "bindingCount", + "consumerCount", + "consumerCountWithCredit", + "persistentDequeuedBytes", + "persistentDequeuedMessages", + "persistentEnqueuedBytes", + "persistentEnqueuedMessages", + "queueDepthBytes", + "queueDepthMessages", + "totalDequeuedBytes", + "totalDequeuedMessages", + "totalEnqueuedBytes", + "totalEnqueuedMessages", + "unacknowledgedBytes", + "unacknowledgedMessages"); } public static void assertAttributesPresent(Map data, String... attributes) @@ -193,7 +201,7 @@ public class Asserts { assertNotNull("Unexpected connection data", connectionData); assertAttributesPresent(connectionData, - Attribute.getAttributeNames(Connection.class), + AbstractConfiguredObject.getAttributeNames(Connection.class), Connection.STATE, Connection.DURABLE, Connection.LIFETIME_POLICY, @@ -221,16 +229,17 @@ public class Asserts @SuppressWarnings("unchecked") Map statistics = (Map) connectionData.get(STATISTICS_ATTRIBUTE); + + assertAttributesPresent(statistics, - Connection.AVAILABLE_STATISTICS, - Connection.LOCAL_TRANSACTION_BEGINS, - Connection.LOCAL_TRANSACTION_ROLLBACKS, - Connection.STATE_CHANGED, - Connection.XA_TRANSACTION_BRANCH_ENDS, - Connection.XA_TRANSACTION_BRANCH_STARTS, - Connection.XA_TRANSACTION_BRANCH_SUSPENDS); - assertEquals("Unexpected value of connection statistics attribute " + Connection.SESSION_COUNT, 1, - statistics.get(Connection.SESSION_COUNT)); + "bytesIn", + "bytesOut", + "lastIoTime", + "messagesIn", + "messagesOut", + "sessionCount"); + assertEquals("Unexpected value of connection statistics attribute sessionCount ", 1, + statistics.get("sessionCount")); } public static void assertPortAttributes(Map port) @@ -262,7 +271,7 @@ public class Asserts if (isAMQPPort) { assertAttributesPresent(port, - Attribute.getAttributeNames(Port.class), + AbstractConfiguredObject.getAttributeNames(Port.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -277,7 +286,7 @@ public class Asserts else { assertAttributesPresent(port, - Attribute.getAttributeNames(Port.class), + AbstractConfiguredObject.getAttributeNames(Port.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -312,7 +321,7 @@ public class Asserts public static void assertExchange(String exchangeName, String type, Map exchangeData) { assertNotNull("Exchange " + exchangeName + " is not found!", exchangeData); - assertAttributesPresent(exchangeData, Attribute.getAttributeNames(Exchange.class), + assertAttributesPresent(exchangeData, AbstractConfiguredObject.getAttributeNames(Exchange.class), Exchange.ALTERNATE_EXCHANGE, Exchange.TIME_TO_LIVE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -334,17 +343,19 @@ public class Asserts @SuppressWarnings("unchecked") Map statistics = (Map) exchangeData.get(STATISTICS_ATTRIBUTE); - assertAttributesPresent(statistics, - Exchange.AVAILABLE_STATISTICS, - Exchange.STATE_CHANGED, - Exchange.PRODUCER_COUNT); + + assertAttributesPresent(statistics,"bindingCount", + "bytesDropped", + "bytesIn", + "messagesDropped", + "messagesIn"); } public static void assertBinding(String bindingName, String queueName, String exchange, Map binding) { assertNotNull("Binding map should not be null", binding); assertAttributesPresent(binding, - Attribute.getAttributeNames(Binding.class), + AbstractConfiguredObject.getAttributeNames(Binding.class), Binding.STATE, Binding.TIME_TO_LIVE, ConfiguredObject.TYPE, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java index e73e8767ac..5e1489a640 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java @@ -27,13 +27,13 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.server.BrokerOptions; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.User; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -304,7 +304,8 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase private void assertProvider(boolean managesPrincipals, String type, Map provider) { - Asserts.assertAttributesPresent(provider, Attribute.getAttributeNames(AuthenticationProvider.class), + Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames( + AuthenticationProvider.class), AuthenticationProvider.DESCRIPTION, AuthenticationProvider.TIME_TO_LIVE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, ConfiguredObject.LAST_UPDATED_TIME); assertEquals("Unexpected value of provider attribute " + AuthenticationProvider.STATE, State.ACTIVE.name(), diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java index 6c6ce940de..a9705f73d5 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java @@ -29,12 +29,12 @@ import java.util.HashMap; import java.util.Map; import org.apache.commons.configuration.ConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.Transport; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.test.utils.TestBrokerConfiguration; public class BrokerRestHttpsTest extends QpidRestTestCase @@ -64,7 +64,7 @@ public class BrokerRestHttpsTest extends QpidRestTestCase { Map brokerDetails = getRestTestHelper().getJsonAsSingletonList("/rest/broker"); - Asserts.assertAttributesPresent(brokerDetails, Attribute.getAttributeNames(Broker.class), + Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), Broker.PROCESS_PID, Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES, Broker.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java index ab4f358b42..178f365fa5 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java @@ -34,13 +34,13 @@ import javax.jms.TextMessage; import org.apache.qpid.common.QpidProperties; import org.apache.qpid.server.configuration.BrokerConfigurationStoreCreator; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.VirtualHost; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.test.client.UnroutableMessageTestExceptionListener; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -234,7 +234,7 @@ public class BrokerRestTest extends QpidRestTestCase protected void assertBrokerAttributes(Map brokerDetails) { - Asserts.assertAttributesPresent(brokerDetails, Attribute.getAttributeNames(Broker.class), + Asserts.assertAttributesPresent(brokerDetails, AbstractConfiguredObject.getAttributeNames(Broker.class), Broker.PROCESS_PID, Broker.TIME_TO_LIVE, ConfiguredObject.TYPE, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java index 89c53b1e0a..07f1627d94 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java @@ -33,10 +33,10 @@ import javax.jms.MessageProducer; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.client.AMQSession; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Connection; import org.apache.qpid.server.model.Session; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; public class ConnectionRestTest extends QpidRestTestCase { @@ -155,14 +155,14 @@ public class ConnectionRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map statistics = (Map) connectionDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected value of connection statistics attribute " + Connection.BYTES_IN, MESSAGE_NUMBER - * MESSAGE_SIZE, statistics.get(Connection.BYTES_IN)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.BYTES_OUT, MESSAGE_SIZE - + ((MESSAGE_NUMBER - 1) * MESSAGE_SIZE) * 2, statistics.get(Connection.BYTES_OUT)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.MESSAGES_IN, MESSAGE_NUMBER, - statistics.get(Connection.MESSAGES_IN)); - assertEquals("Unexpected value of connection statistics attribute " + Connection.MESSAGES_OUT, - MESSAGE_NUMBER * 2 - 1, statistics.get(Connection.MESSAGES_OUT)); + assertEquals("Unexpected value of connection statistics attribute " + "bytesIn", MESSAGE_NUMBER + * MESSAGE_SIZE, statistics.get("bytesIn")); + assertEquals("Unexpected value of connection statistics attribute " + "bytesOut", MESSAGE_SIZE + + ((MESSAGE_NUMBER - 1) * MESSAGE_SIZE) * 2, statistics.get("bytesOut")); + assertEquals("Unexpected value of connection statistics attribute " + "messagesIn", MESSAGE_NUMBER, + statistics.get("messagesIn")); + assertEquals("Unexpected value of connection statistics attribute " + "messagesOut", + MESSAGE_NUMBER * 2 - 1, statistics.get("messagesOut")); @SuppressWarnings("unchecked") List> sessions = (List>) connectionDetails.get(SESSIONS_ATTRIBUTE); @@ -174,7 +174,7 @@ public class ConnectionRestTest extends QpidRestTestCase private void assertSession(Map sessionData, AMQSession session) { assertNotNull("Session map cannot be null", sessionData); - Asserts.assertAttributesPresent(sessionData, Attribute.getAttributeNames(Session.class), + Asserts.assertAttributesPresent(sessionData, AbstractConfiguredObject.getAttributeNames(Session.class), ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, @@ -193,19 +193,18 @@ public class ConnectionRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map statistics = (Map) sessionData.get(Asserts.STATISTICS_ATTRIBUTE); - Asserts.assertAttributesPresent(statistics, Session.AVAILABLE_STATISTICS, Session.BYTES_IN, Session.BYTES_OUT, - Session.STATE_CHANGED, Session.UNACKNOWLEDGED_BYTES, Session.LOCAL_TRANSACTION_OPEN, - Session.XA_TRANSACTION_BRANCH_ENDS, Session.XA_TRANSACTION_BRANCH_STARTS, - Session.XA_TRANSACTION_BRANCH_SUSPENDS); - - assertEquals("Unexpecte value of statistic attribute " + Session.UNACKNOWLEDGED_MESSAGES, MESSAGE_NUMBER - 1, - statistics.get(Session.UNACKNOWLEDGED_MESSAGES)); - assertEquals("Unexpecte value of statistic attribute " + Session.LOCAL_TRANSACTION_BEGINS, 4, - statistics.get(Session.LOCAL_TRANSACTION_BEGINS)); - assertEquals("Unexpecte value of statistic attribute " + Session.LOCAL_TRANSACTION_ROLLBACKS, 1, - statistics.get(Session.LOCAL_TRANSACTION_ROLLBACKS)); - assertEquals("Unexpecte value of statistic attribute " + Session.CONSUMER_COUNT, 1, - statistics.get(Session.CONSUMER_COUNT)); + Asserts.assertAttributesPresent(statistics, "consumerCount", + "localTransactionBegins", "localTransactionOpen", + "localTransactionRollbacks", "unacknowledgedMessages"); + + assertEquals("Unexpecte value of statistic attribute " + "unacknowledgedMessages", MESSAGE_NUMBER - 1, + statistics.get("unacknowledgedMessages")); + assertEquals("Unexpecte value of statistic attribute " + "localTransactionBegins", 4, + statistics.get("localTransactionBegins")); + assertEquals("Unexpecte value of statistic attribute " + "localTransactionRollbacks", 1, + statistics.get("localTransactionRollbacks")); + assertEquals("Unexpecte value of statistic attribute " + "consumerCount", 1, + statistics.get("consumerCount")); } private String getConnectionName() throws IOException diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java index 85d8d31758..11c0b7bc4a 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java @@ -29,13 +29,13 @@ import java.util.Properties; import java.util.UUID; import org.apache.qpid.server.BrokerOptions; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Group; import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.security.group.FileGroupManagerFactory; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; @@ -322,7 +322,7 @@ public class GroupProviderRestTest extends QpidRestTestCase private void assertProvider(String name, String type, Map provider) { - Asserts.assertAttributesPresent(provider, Attribute.getAttributeNames(GroupProvider.class), + Asserts.assertAttributesPresent(provider, AbstractConfiguredObject.getAttributeNames(GroupProvider.class), GroupProvider.TIME_TO_LIVE, ConfiguredObject.TYPE, ConfiguredObject.CREATED_BY, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java index 9a657b0019..d9ff53a351 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java @@ -28,12 +28,12 @@ import java.util.List; import java.util.Map; import org.apache.commons.configuration.ConfigurationException; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.PreferencesProvider; import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider; import org.apache.qpid.server.plugin.AuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory; @@ -164,7 +164,7 @@ public class PreferencesProviderRestTest extends QpidRestTestCase public void assertProviderCommonAttributes(Map provider) { Asserts.assertAttributesPresent(provider, - Attribute.getAttributeNames(PreferencesProvider.class), + AbstractConfiguredObject.getAttributeNames(PreferencesProvider.class), ConfiguredObject.CREATED_BY, ConfiguredObject.CREATED_TIME, ConfiguredObject.LAST_UPDATED_BY, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java index a95c0a082f..fba319e907 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java @@ -34,12 +34,12 @@ import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; -import org.apache.qpid.server.model.Attribute; import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Consumer; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; +import org.apache.qpid.server.model.adapter.AbstractConfiguredObject; public class QueueRestTest extends QpidRestTestCase { @@ -212,7 +212,7 @@ public class QueueRestTest extends QpidRestTestCase { assertNotNull("Consumer map should not be null", consumer); Asserts.assertAttributesPresent(consumer, - Attribute.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.TIME_TO_LIVE, + AbstractConfiguredObject.getAttributeNames(Consumer.class), Consumer.STATE, Consumer.TIME_TO_LIVE, Consumer.SETTLEMENT_MODE, Consumer.EXCLUSIVE, Consumer.SELECTOR, Consumer.NO_LOCAL, ConfiguredObject.TYPE, @@ -232,35 +232,35 @@ public class QueueRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map statistics = (Map) consumer.get(Asserts.STATISTICS_ATTRIBUTE); assertNotNull("Consumer statistics is not present", statistics); - Asserts.assertAttributesPresent(statistics, Consumer.AVAILABLE_STATISTICS, Consumer.STATE_CHANGED); + Asserts.assertAttributesPresent(statistics, "bytesOut", "messagesOut", "unacknowledgedBytes", "unacknowledgedMessages"); } private void assertStatistics(Map queueDetails) { @SuppressWarnings("unchecked") Map statistics = (Map) queueDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.PERSISTENT_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.QUEUE_DEPTH_MESSAGES, ENQUEUED_MESSAGES, - statistics.get(Queue.QUEUE_DEPTH_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.CONSUMER_COUNT, 1, - statistics.get(Queue.CONSUMER_COUNT)); - assertEquals("Unexpected queue statistics attribute " + Queue.CONSUMER_COUNT_WITH_CREDIT, 1, - statistics.get(Queue.CONSUMER_COUNT_WITH_CREDIT)); - assertEquals("Unexpected queue statistics attribute " + Queue.BINDING_COUNT, 1, statistics.get(Queue.BINDING_COUNT)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.PERSISTENT_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_DEQUEUED_MESSAGES, DEQUEUED_MESSAGES, - statistics.get(Queue.TOTAL_DEQUEUED_MESSAGES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_DEQUEUED_BYTES, DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_DEQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_DEQUEUED_BYTES, DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_DEQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.PERSISTENT_ENQUEUED_BYTES, ENQUEUED_BYTES - + DEQUEUED_BYTES, statistics.get(Queue.PERSISTENT_ENQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.TOTAL_ENQUEUED_BYTES, ENQUEUED_BYTES + DEQUEUED_BYTES, - statistics.get(Queue.TOTAL_ENQUEUED_BYTES)); - assertEquals("Unexpected queue statistics attribute " + Queue.QUEUE_DEPTH_BYTES, ENQUEUED_BYTES, - statistics.get(Queue.QUEUE_DEPTH_BYTES)); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("persistentDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "queueDepthMessages", ENQUEUED_MESSAGES, + statistics.get("queueDepthMessages")); + assertEquals("Unexpected queue statistics attribute " + "consumerCount", 1, + statistics.get("consumerCount")); + assertEquals("Unexpected queue statistics attribute " + "consumerCountWithCredit", 1, + statistics.get("consumerCountWithCredit")); + assertEquals("Unexpected queue statistics attribute " + "bindingCount", 1, statistics.get("bindingCount")); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("persistentDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "totalDequeuedMessages", DEQUEUED_MESSAGES, + statistics.get("totalDequeuedMessages")); + assertEquals("Unexpected queue statistics attribute " + "totalDequeuedBytes", DEQUEUED_BYTES, + statistics.get("totalDequeuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "persistentDequeuedBytes", DEQUEUED_BYTES, + statistics.get("totalDequeuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "persistentEnqueuedBytes", ENQUEUED_BYTES + + DEQUEUED_BYTES, statistics.get("persistentEnqueuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "totalEnqueuedBytes", ENQUEUED_BYTES + DEQUEUED_BYTES, + statistics.get("totalEnqueuedBytes")); + assertEquals("Unexpected queue statistics attribute " + "queueDepthBytes", ENQUEUED_BYTES, + statistics.get("queueDepthBytes")); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java index d7b17fda8a..eac43e70a4 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java @@ -74,9 +74,10 @@ public class VirtualHostRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map statistics = (Map) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE); - assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, statistics.get(VirtualHost.EXCHANGE_COUNT)); - assertEquals("Unexpected number of queues in statistics", EXPECTED_QUEUES.length, statistics.get(VirtualHost.QUEUE_COUNT)); - assertEquals("Unexpected number of connections in statistics", 1, statistics.get(VirtualHost.CONNECTION_COUNT)); + assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, statistics.get( + "exchangeCount")); + assertEquals("Unexpected number of queues in statistics", EXPECTED_QUEUES.length, statistics.get("queueCount")); + assertEquals("Unexpected number of connections in statistics", 1, statistics.get("connectionCount")); @SuppressWarnings("unchecked") List> exchanges = (List>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE); @@ -589,9 +590,9 @@ public class VirtualHostRestTest extends QpidRestTestCase @SuppressWarnings("unchecked") Map statistics = (Map) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE); assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, - statistics.get(VirtualHost.EXCHANGE_COUNT)); - assertEquals("Unexpected number of queues in statistics", 0, statistics.get(VirtualHost.QUEUE_COUNT)); - assertEquals("Unexpected number of connections in statistics", 0, statistics.get(VirtualHost.CONNECTION_COUNT)); + statistics.get("exchangeCount")); + assertEquals("Unexpected number of queues in statistics", 0, statistics.get("queueCount")); + assertEquals("Unexpected number of connections in statistics", 0, statistics.get("connectionCount")); @SuppressWarnings("unchecked") List> exchanges = (List>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE); -- cgit v1.2.1