Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java Sun Nov 20 16:42:57 2016 @@ -260,16 +260,56 @@ public abstract class AbstractSystemConf _configurationStore.upgradeStoreStructure(); } - @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.ACTIVE) + + @StateTransition(currentState = State.ACTIVE, desiredState = State.STOPPED) + protected ListenableFuture<Void> doStop() + { + return doAfter(getContainer().closeAsync(), new Runnable() + { + @Override + public void run() + { + _configurationStore.closeConfigurationStore(); + _configurationStore = createStoreObject(); + + if (isManagementMode()) + { + _configurationStore = new ManagementModeStoreHandler(_configurationStore, AbstractSystemConfig.this); + } + + _configurationStore.init(AbstractSystemConfig.this); + _configurationStore.upgradeStoreStructure(); + AbstractSystemConfig.super.setState(State.STOPPED); + } + }); + + } + + + @StateTransition(currentState = { State.UNINITIALIZED, State.STOPPED }, desiredState = State.ACTIVE) protected ListenableFuture<Void> activate() { + return doAfter(makeActive(), new Runnable() + { + @Override + public void run() + { + AbstractSystemConfig.super.setState(State.ACTIVE); + } + }); + } + + + protected ListenableFuture<Void> makeActive() + { + final EventLogger eventLogger = _eventLogger; final EventLogger startupLogger = initiateStartupLogging(); try { - final Container<?> container = initateStoreAndRecovery(); + final Container<?> container = initiateStoreAndRecovery(); container.setEventLogger(startupLogger); final SettableFuture<Void> returnVal = SettableFuture.create(); @@ -309,7 +349,8 @@ public abstract class AbstractSystemConf } - private Container<?> initateStoreAndRecovery() throws IOException + + private Container<?> initiateStoreAndRecovery() throws IOException { ConfiguredObjectRecord[] initialRecords = convertToConfigurationRecords(getInitialConfigurationLocation()); final DurableConfigurationStore store = getConfigurationStore(); @@ -338,7 +379,10 @@ public abstract class AbstractSystemConf if(containerType != null) { - updateModel(containerType.getModel()); + if(containerType.getModel() != getModel()) + { + updateModel(containerType.getModel()); + } containerType.getRecoverer(this).upgradeAndRecover(records); } @@ -359,7 +403,7 @@ public abstract class AbstractSystemConf try { - final Container<?> container = initateStoreAndRecovery(); + final Container<?> container = initiateStoreAndRecovery(); container.setEventLogger(startupLogger); return Futures.immediateFuture(null); @@ -539,6 +583,12 @@ public abstract class AbstractSystemConf _onContainerCloseTask = onContainerCloseTask; } + @Override + protected void logOperation(final String operation) + { + getEventLogger().message(BrokerMessages.OPERATION(operation)); + } + public static String getDefaultValue(String attrName) { Model model = SystemConfigBootstrapModel.getInstance();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java Sun Nov 20 16:42:57 2016 @@ -29,7 +29,7 @@ import javax.security.sasl.SaslServer; import org.apache.qpid.server.security.SubjectCreator; import org.apache.qpid.server.security.auth.AuthenticationResult; -@ManagedObject( creatable = false ) +@ManagedObject public interface AuthenticationProvider<X extends AuthenticationProvider<X>> extends ConfiguredObject<X> { Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java Sun Nov 20 16:42:57 2016 @@ -22,7 +22,7 @@ package org.apache.qpid.server.model; import java.util.Map; -@ManagedObject +@ManagedObject( amqpName = "org.apache.qpid.Binding") public interface Binding<X extends Binding<X>> extends ConfiguredObject<X> { Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Sun Nov 20 16:42:57 2016 @@ -250,6 +250,12 @@ public interface Broker<X extends Broker int getNumberOfObjectsPendingFinalization(); @ManagedOperation(nonModifying = true, + description = "Restart the broker within the same JVM", + changesConfiguredObjectState = false, + log = true) + void restart(); + + @ManagedOperation(nonModifying = true, description = "Initiates garbage collection", changesConfiguredObjectState = false) void performGC(); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java Sun Nov 20 16:42:57 2016 @@ -36,6 +36,7 @@ import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.UUID; +import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; @@ -807,6 +808,12 @@ public class BrokerImpl extends Abstract _eventLogger.message(BrokerMessages.FATAL_ERROR(e.getMessage())); } + @Override + protected void logOperation(final String operation) + { + getEventLogger().message(BrokerMessages.OPERATION(operation)); + } + public void registerMessageDelivered(long messageSize) { _messagesDelivered.registerEvent(1L); @@ -964,6 +971,33 @@ public class BrokerImpl extends Abstract } @Override + public void restart() + { + Subject.doAs(getSystemTaskSubject("Broker"), new PrivilegedAction<Void>() + { + @Override + public Void run() + { + final SystemConfig<?> systemConfig = getParent(SystemConfig.class); + // This is deliberately asynchronous as the HTTP thread will be interrupted by restarting + doAfter(systemConfig.setAttributesAsync(Collections.<String,Object>singletonMap(ConfiguredObject.DESIRED_STATE, + State.STOPPED)), + new Callable<ListenableFuture<Void>>() + { + @Override + public ListenableFuture<Void> call() throws Exception + { + return systemConfig.setAttributesAsync(Collections.<String,Object>singletonMap(ConfiguredObject.DESIRED_STATE, State.ACTIVE)); + } + }); + + return null; + } + }); + + } + + @Override public Principal getUser() { return AuthenticatedPrincipal.getCurrentUser(); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java Sun Nov 20 16:42:57 2016 @@ -113,10 +113,8 @@ public final class BrokerModel extends M addRelationship(Queue.class, Consumer.class); addRelationship(Exchange.class, Binding.class); - addRelationship(Exchange.class, Publisher.class); addRelationship(Session.class, Consumer.class); - addRelationship(Session.class, Publisher.class); _objectFactory = new ConfiguredObjectFactoryImpl(this); _typeRegistry = new ConfiguredObjectTypeRegistry((new QpidServiceLoader()).instancesOf(ConfiguredObjectRegistration.class), Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectCustomSerialization.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectCustomSerialization.java?rev=1770576&view=auto ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectCustomSerialization.java (added) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectCustomSerialization.java Sun Nov 20 16:42:57 2016 @@ -0,0 +1,177 @@ +/* + * + * 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.InvocationTargetException; +import java.lang.reflect.Method; +import java.security.Principal; +import java.security.cert.Certificate; +import java.security.cert.CertificateEncodingException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.qpid.server.model.preferences.GenericPrincipal; +import org.apache.qpid.server.security.QpidPrincipal; +import org.apache.qpid.server.util.ServerScopedRuntimeException; + +public class ConfiguredObjectCustomSerialization +{ + + private static final Set<String> OBJECT_METHOD_NAMES = Collections.synchronizedSet(new HashSet<String>()); + + static + { + for(Method method : Object.class.getMethods()) + { + OBJECT_METHOD_NAMES.add(method.getName()); + } + } + + public interface Converter<T> + { + Class<T> getConversionClass(); + + Object convert(T value); + } + + private static final Map<Class<?>, Converter<?>> REGISTERED_CONVERTERS = new ConcurrentHashMap<>(); + + private abstract static class AbstractConverter<T> implements Converter<T> + { + private final Class<T> _conversionClass; + + public AbstractConverter(Class<T> conversionClass) + { + REGISTERED_CONVERTERS.put(conversionClass, this); + _conversionClass = conversionClass; + } + + @Override + public final Class<T> getConversionClass() + { + return _conversionClass; + } + } + + public static Collection<Converter<?>> getConverters() + { + return REGISTERED_CONVERTERS.values(); + } + + @SuppressWarnings("unused") + private static final Converter<Principal> PRINCIPAL_CONVERTER = + new AbstractConverter<Principal>(Principal.class) + { + @Override + public Object convert(final Principal value) + { + if (value instanceof QpidPrincipal) + { + return new GenericPrincipal((QpidPrincipal) value).toExternalForm(); + } + else if (value instanceof GenericPrincipal) + { + return ((GenericPrincipal) value).toExternalForm(); + } + else + { + return value.getName(); + } + } + }; + + + @SuppressWarnings("unused") + private static final Converter<Certificate> CERTIFICATE_CONVERTER = + new AbstractConverter<Certificate>(Certificate.class) + { + @Override + public Object convert(final Certificate value) + { + try + { + return value.getEncoded(); + } + catch (CertificateEncodingException e) + { + throw new IllegalArgumentException(e); + } + } + }; + + + @SuppressWarnings("unused") + private static final Converter<ConfiguredObject> CONFIGURED_OBJECT_CONVERTER = + new AbstractConverter<ConfiguredObject>(ConfiguredObject.class) + { + @Override + public Object convert(final ConfiguredObject value) + { + return value.getId().toString(); + } + }; + + + @SuppressWarnings("unused") + private static final Converter<ManagedAttributeValue> MANAGED_ATTRIBUTE_VALUE_CONVERTER = + new AbstractConverter<ManagedAttributeValue>(ManagedAttributeValue.class) + { + @Override + public Object convert(final ManagedAttributeValue value) + { + + Map<String, Object> valueAsMap = new LinkedHashMap<>(); + for (Method method : value.getClass().getMethods()) + { + final String methodName = method.getName(); + if (method.getParameterTypes().length == 0 + && !OBJECT_METHOD_NAMES.contains(methodName) + && (methodName.startsWith("is") + || methodName.startsWith("has") + || methodName.startsWith("get"))) + { + String propertyName = + methodName.startsWith("is") ? methodName.substring(2) : methodName.substring(3); + propertyName = Character.toLowerCase(propertyName.charAt(0)) + propertyName.substring(1); + try + { + final Object attrValue = method.invoke(value); + if (attrValue != null) + { + valueAsMap.put(propertyName, attrValue); + } + } + catch (IllegalAccessException | InvocationTargetException e) + { + throw new ServerScopedRuntimeException(e); + } + } + } + return valueAsMap; + } + }; + +} Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectCustomSerialization.java ------------------------------------------------------------------------------ svn:eol-style = native Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFinder.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFinder.java?rev=1770576&view=auto ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFinder.java (added) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFinder.java Sun Nov 20 16:42:57 2016 @@ -0,0 +1,461 @@ +/* + * + * 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.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.qpid.server.util.ServerScopedRuntimeException; +import org.apache.qpid.util.Strings; + +public class ConfiguredObjectFinder +{ + private final ConfiguredObject<?> _root; + private final Map<Class<? extends ConfiguredObject>, List<Class<? extends ConfiguredObject>>> _hierarchies = + new HashMap<>(); + private final Model _model; + private final Map<Class<? extends ConfiguredObject>, ConfiguredObjectOperation<ConfiguredObject<?>>> + _associatedChildrenOperations = new HashMap<>(); + + + public ConfiguredObjectFinder(final ConfiguredObject<?> root) + { + _root = root; + _model = root.getModel(); + final Class<? extends ConfiguredObject> managedCategory = root.getCategoryClass(); + addManagedHierarchies(managedCategory, managedCategory); + + for (ConfiguredObjectOperation operation : _model.getTypeRegistry().getOperations(managedCategory).values()) + { + if (operation.isAssociateAsIfChildren() && returnsCollectionOfConfiguredObjects(operation)) + { + Class<? extends ConfiguredObject> associatedChildCategory = + (getCollectionMemberType((ParameterizedType) operation.getGenericReturnType())); + _associatedChildrenOperations.put(associatedChildCategory, operation); + addManagedHierarchies(associatedChildCategory, associatedChildCategory); + } + } + } + + private void addManagedHierarchies(Class<? extends ConfiguredObject> category, + final Class<? extends ConfiguredObject> rootCategory) + { + if (!_hierarchies.containsKey(category)) + { + _hierarchies.put(category, calculateHierarchy(category, rootCategory)); + + for (Class<? extends ConfiguredObject> childClass : _model.getChildTypes(category)) + { + addManagedHierarchies(childClass, rootCategory); + } + } + } + + public ConfiguredObject<?> findObjectFromPath(String path, Class<? extends ConfiguredObject> category) + { + return findObjectFromPath(Arrays.asList(path.split("/")), category); + } + + public ConfiguredObject<?> findObjectFromPath(List<String> path, Class<? extends ConfiguredObject> category) + { + Collection<ConfiguredObject<?>> candidates = findObjectsFromPath(path, getHierarchy(category), false); + if(candidates == null || candidates.isEmpty()) + { + return null; + } + else if(candidates.size() == 1) + { + return candidates.iterator().next(); + } + else + { + throw new IllegalArgumentException("More than one object matching path was found"); + } + } + + public Class<? extends ConfiguredObject>[] getHierarchy(final Class<? extends ConfiguredObject> category) + { + List<Class<? extends ConfiguredObject>> hierarchy = _hierarchies.get(_model.getTypeRegistry().getCategory(category)); + return hierarchy.toArray(new Class[hierarchy.size()]); + } + + public Collection<ConfiguredObject<?>> findObjectsFromPath(List<String> path, + Class<? extends ConfiguredObject>[] hierarchy, + boolean allowWildcards) + { + Collection<ConfiguredObject<?>> parents = new ArrayList<>(); + if (hierarchy.length == 0) + { + return Collections.<ConfiguredObject<?>>singletonList(_root); + } + + Collection<Class<? extends ConfiguredObject>> ancestorCategories = + _model.getAncestorCategories(hierarchy[hierarchy.length - 1]); + Map<Class<? extends ConfiguredObject>, String> filters = new HashMap<>(); + Collection<ConfiguredObject<?>> children = new ArrayList<>(); + boolean wildcard = false; + + Class<? extends ConfiguredObject> parentType = _root.getCategoryClass(); + + parents.add(_root); + + for (int i = 0; i < hierarchy.length; i++) + { + if (_model.getChildTypes(parentType).contains(hierarchy[i])) + { + parentType = hierarchy[i]; + for (ConfiguredObject<?> parent : parents) + { + if (path.size() > i + && path.get(i) != null + && !path.get(i).equals("*") + && path.get(i).trim().length() != 0) + { + for (ConfiguredObject<?> child : parent.getChildren(hierarchy[i])) + { + if (child.getName().equals(path.get(i))) + { + children.add(child); + } + } + if (children.isEmpty()) + { + return null; + } + } + else + { + if (allowWildcards) + { + wildcard = true; + children.addAll((Collection<? extends ConfiguredObject<?>>) parent.getChildren(hierarchy[i])); + } + else + { + return null; + } + } + } + } + else if (i == 0) + { + final ConfiguredObjectOperation<ConfiguredObject<?>> op = + _associatedChildrenOperations.get(hierarchy[0]); + if (op != null) + { + parentType = hierarchy[i]; + + final Collection<? extends ConfiguredObject<?>> associated = + (Collection<? extends ConfiguredObject<?>>) op.perform(_root, + Collections.<String, Object>emptyMap()); + + if (path.size() > i + && path.get(i) != null + && !path.get(i).equals("*") + && path.get(i).trim().length() != 0) + { + for (ConfiguredObject<?> child : associated) + { + if (child.getName().equals(path.get(i))) + { + children.add(child); + } + } + if (children.isEmpty()) + { + return null; + } + } + else + { + if (allowWildcards) + { + wildcard = true; + children.addAll(associated); + } + else + { + return null; + } + } + } + } + else + { + children = parents; + if (path.size() > i + && path.get(i) != null + && !path.get(i).equals("*") + && path.get(i).trim().length() != 0) + { + filters.put(hierarchy[i], path.get(i)); + } + else + { + if (allowWildcards) + { + wildcard = true; + } + else + { + return null; + } + } + } + + parents = children; + children = new ArrayList<>(); + } + + if (!filters.isEmpty() && !parents.isEmpty()) + { + Collection<ConfiguredObject<?>> potentials = parents; + parents = new ArrayList<>(); + + for (ConfiguredObject o : potentials) + { + + boolean match = true; + + for (Map.Entry<Class<? extends ConfiguredObject>, String> entry : filters.entrySet()) + { + final ConfiguredObject<?> ancestor = o.getModel().getAncestor(entry.getKey(), o); + match = ancestor != null && ancestor.getName().equals(entry.getValue()); + if (!match) + { + break; + } + } + if (match) + { + parents.add(o); + } + } + } + + if (parents.isEmpty() && !wildcard) + { + parents = null; + } + return parents; + } + + public List<ConfiguredObject> findObjectParentsFromPath(final List<String> names, + final Class<? extends ConfiguredObject>[] hierarchy, + final Class<? extends ConfiguredObject> objClass) + { + Model model = _root.getModel(); + Collection<ConfiguredObject<?>>[] objects = new Collection[hierarchy.length]; + for (int i = 0; i < hierarchy.length - 1; i++) + { + objects[i] = new HashSet<>(); + if (i == 0) + { + for (ConfiguredObject object : _root.getChildren(hierarchy[0])) + { + if (object.getName().equals(names.get(0))) + { + objects[0].add(object); + break; + } + } + } + else + { + boolean foundAncestor = false; + for (int j = i - 1; j >= 0; j--) + { + if (model.getChildTypes(hierarchy[j]).contains(hierarchy[i])) + { + for (ConfiguredObject<?> parent : objects[j]) + { + for (ConfiguredObject<?> object : parent.getChildren(hierarchy[i])) + { + if (object.getName().equals(names.get(i))) + { + objects[i].add(object); + } + } + } + foundAncestor = true; + break; + } + } + if(!foundAncestor) + { + if(model.getChildTypes(_root.getCategoryClass()).contains(hierarchy[i])) + { + for (ConfiguredObject<?> object : _root.getChildren(hierarchy[i])) + { + if (object.getName().equals(names.get(i))) + { + objects[i].add(object); + } + } + } + } + } + } + List<ConfiguredObject> parents = new ArrayList<>(); + Collection<Class<? extends ConfiguredObject>> parentClasses = + model.getParentTypes(objClass); + for (int i = hierarchy.length - 2; i >= 0; i--) + { + if (parentClasses.contains(hierarchy[i])) + { + if (objects[i].size() == 1) + { + parents.add(objects[i].iterator().next()); + } + else + { + throw new IllegalArgumentException("Cannot deduce parent of class " + + hierarchy[i].getSimpleName()); + } + } + } + return parents; + } + + public String getPath(final ConfiguredObject<?> object) + { + return Strings.join("/", getPathAsList(object)); + } + + public List<String> getPathAsList(final ConfiguredObject<?> object) + { + final List<Class<? extends ConfiguredObject>> hierarchy = _hierarchies.get(object.getCategoryClass()); + List<String> pathElements = new ArrayList<>(); + for (Class<? extends ConfiguredObject> ancestorClass : hierarchy) + { + pathElements.add(_model.getAncestor(ancestorClass, object).getName()); + } + return pathElements; + } + + + private List<Class<? extends ConfiguredObject>> calculateHierarchy(Class<? extends ConfiguredObject> category, + Class<? extends ConfiguredObject> rootClass) + { + Class<? extends ConfiguredObject> managedCategoryClass = _root.getCategoryClass(); + + return calculateHierarchy(category, rootClass, managedCategoryClass, _model); + } + + private static List<Class<? extends ConfiguredObject>> calculateHierarchy(Class<? extends ConfiguredObject> category, + final Class<? extends ConfiguredObject> rootClass, + final Class<? extends ConfiguredObject> managedCategoryClass, + final Model model) + { + List<Class<? extends ConfiguredObject>> hierarchyList = new ArrayList<>(); + + if (category != rootClass) + { + Collection<Class<? extends ConfiguredObject>> parentCategories; + + hierarchyList.add(category); + + while (!(parentCategories = model.getParentTypes(category)).contains(rootClass)) + { + hierarchyList.addAll(parentCategories); + if (!parentCategories.isEmpty()) + { + Iterator<Class<? extends ConfiguredObject>> iterator = parentCategories.iterator(); + category = iterator.next(); + if (!model.getAncestorCategories(category).contains(rootClass)) + { + if (iterator.hasNext()) + { + category = iterator.next(); + } + else + { + break; + } + } + } + else + { + break; + } + } + } + if (rootClass != managedCategoryClass) + { + hierarchyList.add(rootClass); + } + Collections.reverse(hierarchyList); + + return hierarchyList; + } + + private boolean returnsCollectionOfConfiguredObjects(ConfiguredObjectOperation operation) + { + return Collection.class.isAssignableFrom(operation.getReturnType()) + && operation.getGenericReturnType() instanceof ParameterizedType + && ConfiguredObject.class.isAssignableFrom(getCollectionMemberType((ParameterizedType) operation.getGenericReturnType())); + } + + private Class getCollectionMemberType(ParameterizedType collectionType) + { + return getRawType((collectionType).getActualTypeArguments()[0]); + } + + private static Class getRawType(Type t) + { + if (t instanceof Class) + { + return (Class) t; + } + else if (t instanceof ParameterizedType) + { + return (Class) ((ParameterizedType) t).getRawType(); + } + else if (t instanceof TypeVariable) + { + Type[] bounds = ((TypeVariable) t).getBounds(); + if (bounds.length == 1) + { + return getRawType(bounds[0]); + } + } + else if (t instanceof WildcardType) + { + Type[] upperBounds = ((WildcardType) t).getUpperBounds(); + if (upperBounds.length == 1) + { + return getRawType(upperBounds[0]); + } + } + throw new ServerScopedRuntimeException("Unable to process type when constructing configuration model: " + t); + } +} Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFinder.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java Sun Nov 20 16:42:57 2016 @@ -34,7 +34,7 @@ import java.util.Set; import org.apache.qpid.server.util.ServerScopedRuntimeException; -public class ConfiguredObjectInjectedOperation<C extends ConfiguredObject> implements ConfiguredObjectOperation<C>, InjectedAttributeStatisticOrOperation<C> +public class ConfiguredObjectInjectedOperation<C extends ConfiguredObject<?>> implements ConfiguredObjectOperation<C>, InjectedAttributeStatisticOrOperation<C> { private final Method _operation; private final List<OperationParameter> _params; @@ -258,6 +258,12 @@ public class ConfiguredObjectInjectedOpe } @Override + public boolean isAssociateAsIfChildren() + { + return false; + } + + @Override public boolean isSecure(final C subject, final Map<String, Object> arguments) { return _secure || requiresSecure(subject, arguments); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java Sun Nov 20 16:42:57 2016 @@ -21,29 +21,19 @@ package org.apache.qpid.server.model; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.security.Principal; -import java.security.cert.Certificate; -import java.security.cert.CertificateEncodingException; import java.util.Collections; import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; import java.util.Set; -import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; -import org.apache.qpid.server.model.preferences.GenericPrincipal; -import org.apache.qpid.server.security.QpidPrincipal; -import org.apache.qpid.server.util.ServerScopedRuntimeException; - public class ConfiguredObjectJacksonModule extends SimpleModule { private static final long serialVersionUID = 1L; @@ -63,121 +53,19 @@ public class ConfiguredObjectJacksonModu private ConfiguredObjectJacksonModule() { super("ConfiguredObjectSerializer", new Version(1,0,0,null, "org.apache.qpid", "broker-core")); - addConfiguredObjectSerializer(); - addManageableAttributeTypeSerializer(); - addCertificateSerializer(); - addPrincipalSerializer(); - } - - private void addPrincipalSerializer() - { - final JsonSerializer<Principal> serializer = new JsonSerializer<Principal>() + for(final ConfiguredObjectCustomSerialization.Converter converter : ConfiguredObjectCustomSerialization.getConverters()) { - @Override - public void serialize(final Principal value, final JsonGenerator jgen, final SerializerProvider provider) - throws IOException, JsonGenerationException + addSerializer(converter.getConversionClass(), new JsonSerializer() { - if (value == null) - { - jgen.writeNull(); - } - else if (value instanceof QpidPrincipal) - { - jgen.writeString(new GenericPrincipal((QpidPrincipal) value).toExternalForm()); - } - else if (value instanceof GenericPrincipal) + @Override + public void serialize(final Object value, final JsonGenerator gen, final SerializerProvider serializers) + throws IOException, JsonProcessingException { - jgen.writeString(((GenericPrincipal) value).toExternalForm()); + gen.writeObject(converter.convert(value)); } - else - { - jgen.writeString(value.getName()); - } - } - }; - addSerializer(Principal.class, serializer); - } - - private void addCertificateSerializer() - { - final JsonSerializer<Certificate> serializer = new JsonSerializer<Certificate>() - { - @Override - public void serialize(final Certificate value, - final JsonGenerator jgen, - final SerializerProvider provider) - throws IOException - { - try - { - jgen.writeBinary(value.getEncoded()); - } - catch (CertificateEncodingException e) - { - throw new IllegalArgumentException(e); - } - } - }; - addSerializer(Certificate.class, serializer); - } - - private void addManageableAttributeTypeSerializer() - { - final JsonSerializer<ManagedAttributeValue> serializer = new JsonSerializer<ManagedAttributeValue>() - { - @Override - public void serialize(final ManagedAttributeValue value, - final JsonGenerator jgen, - final SerializerProvider provider) - throws IOException - { - Map<String,Object> valueAsMap = new LinkedHashMap<>(); - for(Method method : value.getClass().getMethods()) - { - final String methodName = method.getName(); - if(method.getParameterTypes().length == 0 - && !OBJECT_METHOD_NAMES.contains(methodName) - && (methodName.startsWith("is") - || methodName.startsWith("has") - || methodName.startsWith("get"))) - { - String propertyName = - methodName.startsWith("is") ? methodName.substring(2) : methodName.substring(3); - propertyName = Character.toLowerCase(propertyName.charAt(0)) + propertyName.substring(1); - try - { - final Object attrValue = method.invoke(value); - if(attrValue != null) - { - valueAsMap.put(propertyName, attrValue); - } - } - catch (IllegalAccessException | InvocationTargetException e) - { - throw new ServerScopedRuntimeException(e); - } - } - } - jgen.writeObject(valueAsMap); - } - }; - addSerializer(ManagedAttributeValue.class, serializer); - } + }); + } - private void addConfiguredObjectSerializer() - { - final JsonSerializer<ConfiguredObject> serializer = new JsonSerializer<ConfiguredObject>() - { - @Override - public void serialize(final ConfiguredObject value, - final JsonGenerator jgen, - final SerializerProvider provider) - throws IOException - { - jgen.writeString(value.getId().toString()); - } - }; - addSerializer(ConfiguredObject.class, serializer); } public static ObjectMapper newObjectMapper() Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java Sun Nov 20 16:42:57 2016 @@ -35,7 +35,7 @@ import java.util.Set; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.util.ServerScopedRuntimeException; -public class ConfiguredObjectMethodOperation<C extends ConfiguredObject> implements ConfiguredObjectOperation<C> +public class ConfiguredObjectMethodOperation<C extends ConfiguredObject<?>> implements ConfiguredObjectOperation<C> { private final Method _operation; private final OperationParameterFromAnnotation[] _params; @@ -229,6 +229,12 @@ public class ConfiguredObjectMethodOpera } @Override + public boolean isAssociateAsIfChildren() + { + return _operation.getAnnotation(ManagedOperation.class).associateAsIfChildren(); + } + + @Override public boolean isSecure(final C subject, final Map<String, Object> arguments) { return _operation.getAnnotation(ManagedOperation.class).secure() || requiresSecure(subject, arguments); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java Sun Nov 20 16:42:57 2016 @@ -24,7 +24,7 @@ import java.lang.reflect.Type; import java.util.List; import java.util.Map; -public interface ConfiguredObjectOperation<C extends ConfiguredObject> +public interface ConfiguredObjectOperation<C extends ConfiguredObject<?>> { String getName(); @@ -43,4 +43,6 @@ public interface ConfiguredObjectOperati Type getGenericReturnType(); boolean isSecure(final C subject, final Map<String, Object> arguments); + + boolean isAssociateAsIfChildren(); } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java Sun Nov 20 16:42:57 2016 @@ -23,7 +23,7 @@ package org.apache.qpid.server.model; import java.util.Collection; import java.util.Date; -@ManagedObject( creatable = false ) +@ManagedObject( creatable = false, amqpName = "org.apache.qpid.Connection") public interface Connection<X extends Connection<X>> extends ConfiguredObject<X> { Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java Sun Nov 20 16:42:57 2016 @@ -22,7 +22,7 @@ package org.apache.qpid.server.model; import org.apache.qpid.server.consumer.ConsumerImpl; -@ManagedObject +@ManagedObject(creatable = false, amqpName = "org.apache.qpid.Consumer") public interface Consumer<X extends Consumer<X>> extends ConfiguredObject<X>, ConsumerImpl { String DISTRIBUTION_MODE = "distributionMode"; @@ -38,19 +38,22 @@ public interface Consumer<X extends Cons @ManagedContextDefault( name = SUSPEND_NOTIFICATION_PERIOD) long SUSPEND_NOTIFICATION_PERIOD_DEFAULT = 10000; - @ManagedAttribute + @DerivedAttribute + String getLinkName(); + + @ManagedAttribute(immutable = true) String getDistributionMode(); - @ManagedAttribute + @ManagedAttribute(immutable = true) String getSettlementMode(); - @ManagedAttribute + @ManagedAttribute(immutable = true) boolean isExclusive(); - @ManagedAttribute + @ManagedAttribute(immutable = true) boolean isNoLocal(); - @ManagedAttribute + @ManagedAttribute(immutable = true) String getSelector(); @ManagedAttribute(defaultValue = "2147483647", Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java Sun Nov 20 16:42:57 2016 @@ -29,7 +29,9 @@ import org.apache.qpid.server.exchange.E import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.message.MessageDestination; -@ManagedObject( description = Exchange.CLASS_DESCRIPTION ) +@ManagedObject( description = Exchange.CLASS_DESCRIPTION, + amqpName = "org.apache.qpid.Exchange" + ) public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X>, MessageDestination, ExchangeReferrer { @@ -54,8 +56,8 @@ public interface Exchange<X extends Exch UnroutableMessageBehaviour getUnroutableMessageBehaviour(); //children - Collection<? extends Binding> getBindings(); - Collection<Publisher> getPublishers(); + @ManagedOperation(nonModifying = true, changesConfiguredObjectState = false) + Collection<Binding<?>> getBindings(); // Statistics @ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units = StatisticUnit.COUNT, label = "Bindings") @@ -74,11 +76,10 @@ public interface Exchange<X extends Exch long getMessagesIn(); - //operations - Binding createBinding(String bindingKey, - Queue queue, - Map<String,Object> bindingArguments, - Map<String, Object> attributes); + @ManagedOperation(changesConfiguredObjectState = true) + void bind(@Param(name="queue") Queue<?> queue, + @Param(name="bindingKey") String bindingKey, + @Param(name="arguments", defaultValue = "{}") Map<String,Object> arguments); /** * @return true if the exchange will be deleted after all queues have been detached Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java Sun Nov 20 16:42:57 2016 @@ -39,4 +39,5 @@ public @interface ManagedObject boolean register() default true; String description() default ""; boolean deprecated() default false; + String amqpName() default ""; } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java Sun Nov 20 16:42:57 2016 @@ -34,4 +34,6 @@ public @interface ManagedOperation boolean secure() default false; String paramRequiringSecure() default ""; boolean changesConfiguredObjectState(); + boolean associateAsIfChildren() default false; + boolean log() default false; } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java Sun Nov 20 16:42:57 2016 @@ -76,15 +76,14 @@ public abstract class Model return descendants; } - public <C> C getAncestor(final Class<C> ancestorClass, - final ConfiguredObject<?> object) + public <C> C getAncestor(final Class<C> ancestorClass, final ConfiguredObject<?> object) { return getAncestor(ancestorClass, object.getCategoryClass(), object); } public <C> C getAncestor(final Class<C> ancestorClass, - final Class<? extends ConfiguredObject> category, - final ConfiguredObject<?> object) + final Class<? extends ConfiguredObject> category, + final ConfiguredObject<?> object) { if(ancestorClass.isInstance(object)) { Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Port.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Port.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Port.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Port.java Sun Nov 20 16:42:57 2016 @@ -29,7 +29,7 @@ import com.google.common.util.concurrent import org.apache.qpid.configuration.CommonProperties; @ManagedContextDependency({CommonProperties.QPID_SECURITY_TLS_PROTOCOL_WHITE_LIST, CommonProperties.QPID_SECURITY_TLS_CIPHER_SUITE_BLACK_LIST}) -@ManagedObject( description = Port.CLASS_DESCRIPTION ) +@ManagedObject( description = Port.CLASS_DESCRIPTION, amqpName = "org.apache.qpid.Port") public interface Port<X extends Port<X>> extends ConfiguredObject<X> { String CLASS_DESCRIPTION = "<p>The Broker supports configuration of Ports to specify the particular AMQP messaging " Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java Sun Nov 20 16:42:57 2016 @@ -36,13 +36,16 @@ import org.apache.qpid.server.message.Se import org.apache.qpid.server.protocol.CapacityChecker; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.queue.NotificationCheck; +import org.apache.qpid.server.queue.QueueConsumer; import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.queue.QueueEntryVisitor; import org.apache.qpid.server.store.MessageDurability; import org.apache.qpid.server.store.MessageEnqueueRecord; import org.apache.qpid.server.util.Deletable; -@ManagedObject( defaultType = "standard", description = Queue.CLASS_DESCRIPTION ) +@ManagedObject( defaultType = "standard", + amqpName = "org.apache.qpid.Queue", + description = Queue.CLASS_DESCRIPTION ) public interface Queue<X extends Queue<X>> extends ConfiguredObject<X>, Comparable<X>, ExchangeReferrer, BaseQueue, @@ -256,10 +259,12 @@ public interface Queue<X extends Queue<X boolean isHoldOnPublishEnabled(); //children - Collection<? extends Binding<?>> getBindings(); + @ManagedOperation(nonModifying = true, changesConfiguredObjectState = false) + Collection<Binding<?>> getBindings(); - Collection<? extends Consumer<?>> getConsumers(); + @ManagedOperation(nonModifying = true, changesConfiguredObjectState = false) + Collection<QueueConsumer<?>> getConsumers(); //operations Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Session.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Session.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Session.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Session.java Sun Nov 20 16:42:57 2016 @@ -23,7 +23,7 @@ package org.apache.qpid.server.model; import java.util.Collection; import java.util.Date; -@ManagedObject +@ManagedObject( creatable = false, amqpName = "org.apache.qpid.Session") public interface Session<X extends Session<X>> extends ConfiguredObject<X> { String CHANNEL_ID = "channelId"; @@ -57,7 +57,6 @@ public interface Session<X extends Sessi Collection<Consumer> getConsumers(); - Collection<Publisher> getPublishers(); @ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units = StatisticUnit.COUNT, label = "Consumers") long getConsumerCount(); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Sun Nov 20 16:42:57 2016 @@ -20,7 +20,9 @@ */ package org.apache.qpid.server.model; -@ManagedObject( defaultType = "ProvidedStore", description = VirtualHost.CLASS_DESCRIPTION) +import java.util.Collection; + +@ManagedObject( defaultType = "ProvidedStore", description = VirtualHost.CLASS_DESCRIPTION, amqpName = "org.apache.qpid.VirtualHost") public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<X>, NamedAddressSpace { @@ -42,4 +44,8 @@ public interface VirtualHost<X extends V @DerivedAttribute( persist = true ) String getModelVersion(); + @Override + @ManagedOperation(nonModifying = true, changesConfiguredObjectState = false, associateAsIfChildren = true) + Collection<? extends Connection<?>> getConnections(); + } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java Sun Nov 20 16:42:57 2016 @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.model; -@ManagedObject( creatable = false ) +@ManagedObject( amqpName = "org.apache.qpid.VirtualHostAccessControlProvider") public interface VirtualHostAccessControlProvider<X extends VirtualHostAccessControlProvider<X>> extends ConfiguredObject<X>, CommonAccessControlProvider<VirtualHostAccessControlProvider<?>> { @ManagedAttribute(defaultValue = "10", description = "The priority of this access control provider - the lower the number the higher the priority") Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java Sun Nov 20 16:42:57 2016 @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.model; -@ManagedObject( creatable = false ) +@ManagedObject public interface VirtualHostAlias<X extends VirtualHostAlias<X>> extends ConfiguredObject<X> { String PRIORITY = "priority"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogInclusionRule.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogInclusionRule.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogInclusionRule.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogInclusionRule.java Sun Nov 20 16:42:57 2016 @@ -22,7 +22,7 @@ package org.apache.qpid.server.model; import org.apache.qpid.server.logging.LogInclusionRule; -@ManagedObject +@ManagedObject( amqpName = "org.apache.qpid.VirtualHostLogInclusionRule") public interface VirtualHostLogInclusionRule<X extends VirtualHostLogInclusionRule<X>> extends ConfiguredObject<X>, LogInclusionRule { } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java Sun Nov 20 16:42:57 2016 @@ -20,7 +20,7 @@ */ package org.apache.qpid.server.model; -@ManagedObject +@ManagedObject(amqpName = "org.apache.qpid.VirtualHostLogger") public interface VirtualHostLogger <X extends VirtualHostLogger<X>> extends ConfiguredObject<X> { void stopLogging(); Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java Sun Nov 20 16:42:57 2016 @@ -26,7 +26,7 @@ import org.apache.qpid.server.store.Dura import org.apache.qpid.server.store.preferences.PreferenceStoreAttributes; import org.apache.qpid.server.store.preferences.PreferencesRoot; -@ManagedObject(category=true, managesChildren=true) +@ManagedObject(category=true, managesChildren=true, amqpName = "org.apache.qpid.VirtualHostNode") public interface VirtualHostNode<X extends VirtualHostNode<X>> extends ConfiguredObject<X>, PreferencesRoot { String QPID_INITIAL_CONFIG_VIRTUALHOST_CONFIG_VAR = "qpid.initial_config_virtualhost_config"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java Sun Nov 20 16:42:57 2016 @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import org.apache.qpid.server.logging.OperationLogMessage; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; @@ -60,4 +61,11 @@ public abstract class AbstractPluginAdap { return _broker; } + + + @Override + protected void logOperation(final String operation) + { + _broker.getEventLogger().message(new OperationLogMessage(this, operation)); + } } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java Sun Nov 20 16:42:57 2016 @@ -37,6 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.logging.OperationLogMessage; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Container; @@ -223,6 +224,12 @@ public class FileBasedGroupProviderImpl + childClass); } + @Override + protected void logOperation(final String operation) + { + getAncestor(Container.class).getEventLogger().message(new OperationLogMessage(this, operation)); + } + private Set<Principal> getGroupPrincipals() { @@ -383,6 +390,12 @@ public class FileBasedGroupProviderImpl + childClass); } + @Override + protected void logOperation(final String operation) + { + getAncestor(Container.class).getEventLogger().message(new OperationLogMessage(this, operation)); + } + @StateTransition( currentState = State.ACTIVE, desiredState = State.DELETED ) private ListenableFuture<Void> doDelete() { @@ -418,6 +431,12 @@ public class FileBasedGroupProviderImpl return Collections.emptySet(); } + @Override + protected void logOperation(final String operation) + { + getAncestor(Container.class).getEventLogger().message(new OperationLogMessage(this, operation)); + } + @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.ACTIVE) private ListenableFuture<Void> activate() { Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java Sun Nov 20 16:42:57 2016 @@ -40,7 +40,6 @@ import org.apache.qpid.server.model.Conf import org.apache.qpid.server.model.Consumer; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.NamedAddressSpace; -import org.apache.qpid.server.model.Publisher; import org.apache.qpid.server.model.Session; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; @@ -132,11 +131,6 @@ public final class SessionAdapter extend return (Collection<Consumer>) _session.getConsumers(); } - public Collection<Publisher> getPublishers() - { - return Collections.emptySet(); //TODO - } - @Override public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) { @@ -144,10 +138,6 @@ public final class SessionAdapter extend { return (Collection<C>) getConsumers(); } - else if (clazz == Publisher.class) - { - return (Collection<C>) getPublishers(); - } else { return Collections.emptySet(); @@ -317,4 +307,11 @@ public final class SessionAdapter extend session.addDeleteTask(deleteTickerTask); } } + + + @Override + protected void logOperation(final String operation) + { + _amqpConnection.getEventLogger().message(ChannelMessages.OPERATION(operation)); + } } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java Sun Nov 20 16:42:57 2016 @@ -28,18 +28,18 @@ import java.util.Set; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; - -import org.apache.qpid.configuration.CommonProperties; -import org.apache.qpid.server.logging.EventLogger; -import org.apache.qpid.server.logging.messages.PortMessages; -import org.apache.qpid.server.model.Container; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.qpid.configuration.CommonProperties; import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.messages.BrokerMessages; +import org.apache.qpid.server.logging.messages.PortMessages; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Connection; +import org.apache.qpid.server.model.Container; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.Port; @@ -317,6 +317,12 @@ public abstract class AbstractPort<X ext } @Override + protected void logOperation(final String operation) + { + _eventLogger.message(PortMessages.OPERATION(operation)); + } + + @Override public String toString() { return getCategoryClass().getSimpleName() + "[id=" + getId() + ", name=" + getName() + ", type=" + getType() + ", port=" + getPort() + "]"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java Sun Nov 20 16:42:57 2016 @@ -38,7 +38,7 @@ import org.apache.qpid.server.model.Stat import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.model.TrustStore; -@ManagedObject( category = false, type = "AMQP") +@ManagedObject( category = false, type = "AMQP", amqpName = "org.apache.qpid.AmqpPort") public interface AmqpPort<X extends AmqpPort<X>> extends ClientAuthCapablePort<X> { String DEFAULT_AMQP_TCP_NO_DELAY = "true"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Sun Nov 20 16:42:57 2016 @@ -53,7 +53,21 @@ import org.apache.qpid.server.configurat import org.apache.qpid.server.logging.messages.BrokerMessages; import org.apache.qpid.server.logging.messages.PortMessages; import org.apache.qpid.server.logging.subjects.PortLogSubject; -import org.apache.qpid.server.model.*; +import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Container; +import org.apache.qpid.server.model.DefaultVirtualHostAlias; +import org.apache.qpid.server.model.HostNameAlias; +import org.apache.qpid.server.model.KeyStore; +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.model.NamedAddressSpace; +import org.apache.qpid.server.model.Protocol; +import org.apache.qpid.server.model.State; +import org.apache.qpid.server.model.SystemConfig; +import org.apache.qpid.server.model.Transport; +import org.apache.qpid.server.model.TrustStore; +import org.apache.qpid.server.model.VirtualHostAlias; +import org.apache.qpid.server.model.VirtualHostNameAlias; import org.apache.qpid.server.plugin.ProtocolEngineCreator; import org.apache.qpid.server.plugin.QpidServiceLoader; import org.apache.qpid.server.plugin.TransportProviderFactory; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java Sun Nov 20 16:42:57 2016 @@ -30,7 +30,9 @@ import org.apache.qpid.server.model.Prot import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.model.TrustStore; -@ManagedObject( category = false, type = "HTTP", validChildTypes = "org.apache.qpid.server.model.port.HttpPortImpl#getSupportedChildTypes()") +@ManagedObject( category = false, type = "HTTP", + validChildTypes = "org.apache.qpid.server.model.port.HttpPortImpl#getSupportedChildTypes()", + amqpName = "org.apache.qpid.HttpPort") public interface HttpPort<X extends HttpPort<X>> extends ClientAuthCapablePort<X> { String DEFAULT_HTTP_NEED_CLIENT_AUTH = "false"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java Sun Nov 20 16:42:57 2016 @@ -1002,6 +1002,11 @@ public abstract class AbstractQueue<X ex @Override public Collection<QueueConsumer<?>> getConsumers() { + return getConsumersImpl(); + } + + private Collection<QueueConsumer<?>> getConsumersImpl() + { return Lists.newArrayList(_queueConsumerManager.getAllIterator()); } @@ -1032,6 +1037,11 @@ public abstract class AbstractQueue<X ex public Collection<Binding<?>> getBindings() { + return getBindingsImpl(); + } + + private Collection<Binding<?>> getBindingsImpl() + { return Collections.unmodifiableList(_bindings); } @@ -2984,7 +2994,7 @@ public abstract class AbstractQueue<X ex { if(clazz == Binding.class) { - return (Collection<C>) getBindings(); + return (Collection<C>) getBindingsImpl(); } else if(clazz == org.apache.qpid.server.model.Consumer.class) { @@ -3099,6 +3109,12 @@ public abstract class AbstractQueue<X ex authorise(token, PUBLISH_ACTION, arguments); } + @Override + protected void logOperation(final String operation) + { + getEventLogger().message(QueueMessages.OPERATION(operation)); + } + private class DeletedChildListener extends AbstractConfigurationChangeListener { @Override Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/LastValueQueue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/LastValueQueue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/LastValueQueue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/LastValueQueue.java Sun Nov 20 16:42:57 2016 @@ -25,7 +25,8 @@ import org.apache.qpid.server.model.Mana import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Queue; -@ManagedObject( category = false, type= LastValueQueue.LAST_VALUE_QUEUE_TYPE) +@ManagedObject( category = false, type= LastValueQueue.LAST_VALUE_QUEUE_TYPE, + amqpName = "org.apache.qpid.LastValueQueue") public interface LastValueQueue<X extends LastValueQueue<X>> extends Queue<X> { String LVQ_KEY = "lvqKey"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java Sun Nov 20 16:42:57 2016 @@ -25,7 +25,8 @@ import org.apache.qpid.server.model.Mana import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Queue; -@ManagedObject( category = false, type="priority" ) +@ManagedObject( category = false, type="priority", + amqpName = "org.apache.qpid.PriorityQueue" ) public interface PriorityQueue<X extends PriorityQueue<X>> extends Queue<X> { String PRIORITIES = "priorities"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java Sun Nov 20 16:42:57 2016 @@ -84,6 +84,7 @@ class QueueConsumerImpl private final ConsumerTarget _target; private volatile QueueContext _queueContext; + @ManagedAttributeField private boolean _exclusive; @ManagedAttributeField @@ -97,6 +98,8 @@ class QueueConsumerImpl @ManagedAttributeField private int _priority; + private final String _linkName; + private QueueConsumerNode _queueConsumerNode; QueueConsumerImpl(final AbstractQueue<?> queue, @@ -108,7 +111,7 @@ class QueueConsumerImpl final Integer priority) { super(parentsMap(queue, target.getSessionModel().getModelObject()), - createAttributeMap(consumerName, filters, optionSet, priority)); + createAttributeMap(target.getSessionModel(), consumerName, filters, optionSet, priority)); _messageClass = messageClass; _sessionReference = target.getSessionModel().getConnectionReference(); _consumerNumber = CONSUMER_NUMBER_GENERATOR.getAndIncrement(); @@ -118,6 +121,7 @@ class QueueConsumerImpl _isTransient = optionSet.contains(Option.TRANSIENT); _target = target; _queue = queue; + _linkName = consumerName; // Access control authorise(Operation.CREATE); @@ -127,13 +131,19 @@ class QueueConsumerImpl setupLogging(); } - private static Map<String, Object> createAttributeMap(String name, + private static Map<String, Object> createAttributeMap(final AMQSessionModel sessionModel, + String linkName, FilterManager filters, EnumSet<Option> optionSet, Integer priority) { Map<String,Object> attributes = new HashMap<String, Object>(); attributes.put(ID, UUID.randomUUID()); + String name = sessionModel.getAMQPConnection().getConnectionId() + + "|" + + sessionModel.getChannelId() + + "|" + + linkName; attributes.put(NAME, name); attributes.put(EXCLUSIVE, optionSet.contains(Option.EXCLUSIVE)); attributes.put(NO_LOCAL, optionSet.contains(Option.NO_LOCAL)); @@ -168,6 +178,12 @@ class QueueConsumerImpl } @Override + public String getLinkName() + { + return _linkName; + } + + @Override public void awaitCredit(final QueueEntry node) { _waitingOnCreditMessageListener.update(node); @@ -292,6 +308,12 @@ class QueueConsumerImpl } @Override + protected void logOperation(final String operation) + { + getEventLogger().message(SubscriptionMessages.OPERATION(operation)); + } + + @Override public final Queue<?> getQueue() { return _queue; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java Sun Nov 20 16:42:57 2016 @@ -24,7 +24,8 @@ import org.apache.qpid.server.model.Mana import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Queue; -@ManagedObject( category = false, type= SortedQueue.SORTED_QUEUE_TYPE) +@ManagedObject( category = false, type= SortedQueue.SORTED_QUEUE_TYPE, + amqpName = "org.apache.qpid.SortedQueue") public interface SortedQueue<X extends SortedQueue<X>> extends Queue<X> { String SORT_KEY = "sortKey"; Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/StandardQueue.java Sun Nov 20 16:42:57 2016 @@ -23,7 +23,7 @@ package org.apache.qpid.server.queue; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Queue; -@ManagedObject( category = false, type="standard" ) +@ManagedObject( category = false, type="standard", amqpName = "org.apache.qpid.StandardQueue" ) public interface StandardQueue<X extends StandardQueue<X>> extends Queue<X> { } Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java?rev=1770576&r1=1770575&r2=1770576&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java Sun Nov 20 16:42:57 2016 @@ -89,6 +89,12 @@ public abstract class AbstractKeyStore<X return Futures.immediateFuture(null); } + @Override + protected void logOperation(final String operation) + { + _broker.getEventLogger().message(KeyStoreMessages.OPERATION(operation)); + } + protected void initializeExpiryChecking() { int checkFrequency; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
