diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-04-11 15:30:38 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-04-11 15:30:38 +0000 |
| commit | 58a7f5e8759446fd6c2cc5876581bc414d78d9bd (patch) | |
| tree | 21b0e5263029bb9bfa9f2c90643ef7d9a6ba38ed /qpid/java | |
| parent | c7f2cd12b45f051cd1d421d8c440f12d007a50b4 (diff) | |
| download | qpid-python-58a7f5e8759446fd6c2cc5876581bc414d78d9bd.tar.gz | |
QPID-5680 : [Java Broker] move configuration defualts to annotations
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1586683 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
52 files changed, 640 insertions, 600 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java index ca5800547e..671cbbe7e7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java @@ -20,11 +20,18 @@ */ package org.apache.qpid.server.exchange; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; + import org.apache.log4j.Logger; + import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterSupport; @@ -32,18 +39,14 @@ import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArraySet; - +@ManagedObject( category = false, type = "direct" ) public class DirectExchange extends AbstractExchange<DirectExchange> { 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 893ffee4c1..1484480c5d 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 @@ -20,11 +20,13 @@ */ package org.apache.qpid.server.exchange; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; + import org.apache.log4j.Logger; import org.apache.qpid.server.binding.BindingImpl; @@ -34,14 +36,14 @@ import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import java.util.ArrayList; - +@ManagedObject( category = false, type = "fanout" ) public class FanoutExchange extends AbstractExchange<FanoutExchange> { private static final Logger _logger = Logger.getLogger(FanoutExchange.class); 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 dd5fa5fb4b..6aa32c8528 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 @@ -20,25 +20,26 @@ */ package org.apache.qpid.server.exchange; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CopyOnWriteArraySet; + import org.apache.log4j.Logger; import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.CopyOnWriteArraySet; - /** * An exchange that binds queues based on a set of required headers and header values * and routes messages to these queues by matching the headers of the message against @@ -66,6 +67,7 @@ import java.util.concurrent.CopyOnWriteArraySet; * amq.match - pub/sub on field content/value * </pre> */ +@ManagedObject( category = false, type = "headers" ) public class HeadersExchange extends AbstractExchange<HeadersExchange> { 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 409d77a460..992d9714cb 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 @@ -38,6 +38,7 @@ import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -45,6 +46,7 @@ import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.virtualhost.UnknownExchangeException; import org.apache.qpid.server.virtualhost.VirtualHostImpl; +@ManagedObject( category = false, type = "topic" ) public class TopicExchange extends AbstractExchange<TopicExchange> { public static final ExchangeType<TopicExchange> TYPE = new TopicExchangeType(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java index b4203bfed5..278e8a5304 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java @@ -80,10 +80,13 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im private static final Map<Class<? extends ConfiguredObject>, Map<String, Field>> _allAutomatedFields = Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Map<String, Field>>()); private static final Map<Class, Object> SECURE_VALUES; + + public static final String SECURED_STRING_VALUE = "********"; + static { Map<Class,Object> secureValues = new HashMap<Class, Object>(); - secureValues.put(String.class, "********"); + secureValues.put(String.class, SECURED_STRING_VALUE); secureValues.put(Integer.class, 0); secureValues.put(Long.class, 0l); secureValues.put(Byte.class, (byte)0); @@ -135,12 +138,14 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im private final Map<String, Attribute<?,?>> _attributeTypes; private final Map<String, Field> _automatedFields; + @ManagedAttributeField + private String _type; + protected AbstractConfiguredObject(UUID id, - Map<String, Object> defaults, Map<String, Object> attributes, TaskExecutor taskExecutor) { - this(defaults, combineIdWithAttributes(id,attributes), taskExecutor); + this(combineIdWithAttributes(id,attributes), taskExecutor); } public static Map<String,Object> combineIdWithAttributes(UUID id, Map<String,Object> attributes) @@ -151,20 +156,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } - protected AbstractConfiguredObject(UUID id, Map<String, Object> defaults, Map<String, Object> attributes, - TaskExecutor taskExecutor, boolean filterAttributes) - - { - this(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>emptyMap(), - defaults, combineIdWithAttributes(id, attributes), taskExecutor, filterAttributes); - } - - protected AbstractConfiguredObject(Map<String, Object> defaults, - Map<String, Object> attributes, + protected AbstractConfiguredObject(Map<String, Object> attributes, TaskExecutor taskExecutor) { this(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>emptyMap(), - defaults, attributes, taskExecutor, true); + Collections.<String,Object>emptyMap(), attributes, taskExecutor, true); } protected AbstractConfiguredObject(final Map<Class<? extends ConfiguredObject>, ConfiguredObject<?>> parents, @@ -198,6 +194,15 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im _attributeTypes = getAttributeTypes(getClass()); _automatedFields = getAutomatedFields(getClass()); + _type = getType(getClass()); + if(attributes.get(TYPE) != null) + { + if(!_type.equals(attributes.get(TYPE))) + { + throw new IllegalConfigurationException("Provided type is " + attributes.get(TYPE) + + " but calculated type is " + _type); + } + } for (Class<? extends ConfiguredObject> childClass : Model.getInstance().getChildTypes(getCategoryClass())) { @@ -277,11 +282,15 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } - private void automatedSetValue(final String name, final Object value) + private void automatedSetValue(final String name, Object value) { try { final Attribute attribute = _attributeTypes.get(name); + if(value == null && !"".equals(attribute.getAnnotation().defaultValue())) + { + value = attribute.getAnnotation().defaultValue(); + } _automatedFields.get(name).set(this, attribute.convert(value, this)); } catch (IllegalAccessException e) @@ -292,7 +301,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im protected AbstractConfiguredObject(UUID id, TaskExecutor taskExecutor) { - this(id, Collections.<String,Object>emptyMap(), Collections.<String,Object>emptyMap(), taskExecutor); + this(id, Collections.<String,Object>emptyMap(), taskExecutor); } public void open() @@ -1037,9 +1046,9 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } @Override - public String getType() + public final String getType() { - return (String)getAttribute(TYPE); + return _type; } 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 9c7bb295b9..6bb2e1beb3 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 @@ -59,6 +59,9 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL String CONNECTION_HEART_BEAT_DELAY = "connection.heartBeatDelay"; String CONNECTION_CLOSE_WHEN_NO_ROUTE = "connection.closeWhenNoRoute"; + @ManagedContextDefault(name = "broker.name") + static final String DEFAULT_BROKER_NAME = "Broker"; + @ManagedAttribute( derived = true ) String getBuildVersion(); 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 b4321a2625..9f0237e97a 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 @@ -65,7 +65,7 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>> @ManagedAttribute String getDescription(); - @ManagedAttribute + @ManagedAttribute( automate = true ) String getType(); @ManagedAttribute(automate = true) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java index 47f5a65477..5d574055a4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java @@ -31,29 +31,6 @@ public interface KeyStore<X extends KeyStore<X>> extends ConfiguredObject<X> String STATE = "state"; String DESCRIPTION = "description"; - String PATH = "path"; - String PASSWORD = "password"; - String KEY_STORE_TYPE = "keyStoreType"; - String CERTIFICATE_ALIAS = "certificateAlias"; - String KEY_MANAGER_FACTORY_ALGORITHM = "keyManagerFactoryAlgorithm"; - - @ManagedAttribute( secure = true, automate = true, mandatory = true ) - public String getPassword(); - - @ManagedAttribute( automate = true, mandatory = true) - public String getPath(); - - @ManagedAttribute( automate = true ) - public String getCertificateAlias(); - - @ManagedAttribute( automate = true ) - public String getKeyManagerFactoryAlgorithm(); - - @ManagedAttribute( automate = true ) - public String getKeyStoreType(); - - public void setPassword(String password); - public KeyManager[] getKeyManagers() throws GeneralSecurityException; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java index ff28014090..5c311908f6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java @@ -20,10 +20,6 @@ */ package org.apache.qpid.server.model; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; - @ManagedObject public interface Plugin<X extends Plugin<X>> extends ConfiguredObject<X> { @@ -31,8 +27,4 @@ public interface Plugin<X extends Plugin<X>> extends ConfiguredObject<X> String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - // Attributes - - @ManagedAttribute - String getPluginType(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/RuntimeDefault.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/RuntimeDefault.java new file mode 100644 index 0000000000..9014de69f2 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/RuntimeDefault.java @@ -0,0 +1,33 @@ +/* + * + * 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; + +public abstract class RuntimeDefault<T> +{ + public abstract T value(); + + final public String toString() + { + T value = value(); + return value == null ? null : value.toString(); + } + +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java index 367df3ea5c..8e3a2acd79 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java @@ -24,7 +24,6 @@ import java.security.AccessControlException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -64,7 +63,7 @@ public class SystemContext extends AbstractConfiguredObject<SystemContext> final LogRecorder logRecorder, final BrokerOptions brokerOptions) { - super(SYSTEM_ID, Collections.<String,Object>emptyMap(), createAttributes(brokerOptions), taskExecutor); + super(SYSTEM_ID, createAttributes(brokerOptions), taskExecutor); _eventLogger = eventLogger; getTaskExecutor().start(); _objectFactory = configuredObjectFactory; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java index 92ea8e7863..d1b1a3d7a5 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java @@ -28,30 +28,11 @@ public interface TrustStore<X extends TrustStore<X>> extends ConfiguredObject<X> { String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String STATE = "state"; String DESCRIPTION = "description"; - String PATH = "path"; - String PASSWORD = "password"; - String TRUST_STORE_TYPE = "trustStoreType"; - String PEERS_ONLY = "peersOnly"; - String TRUST_MANAGER_FACTORY_ALGORITHM = "trustManagerFactoryAlgorithm"; - @ManagedAttribute( secure = true, automate = true, mandatory = true) public String getPassword(); - @ManagedAttribute( automate = true, mandatory = true ) - public String getPath(); - - @ManagedAttribute( automate = true ) - public String getTrustManagerFactoryAlgorithm(); - - @ManagedAttribute( automate = true ) - public String getTrustStoreType(); - - @ManagedAttribute( automate = true ) - public boolean isPeersOnly(); - public void setPassword(String password); 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 37ca65001c..33ccee8e71 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 @@ -96,8 +96,19 @@ public interface VirtualHost<X extends VirtualHost<X, Q, E>, Q extends Queue<?>, @ManagedAttribute String getSecurityAcl(); - @ManagedAttribute - int getHouseKeepingThreadCount(); + @ManagedContextDefault( name = "virtualhost.housekeepingThreadCount") + public static final RuntimeDefault<Integer> DEFAULT_HOUSEKEEPING_THREAD_COUNT = + new RuntimeDefault<Integer>() + { + @Override + public Integer value() + { + return Runtime.getRuntime().availableProcessors(); + } + }; + + @ManagedAttribute( automate = true, defaultValue = "${virtualhost.housekeepingThreadCount}") + int getHousekeepingThreadCount(); @ManagedAttribute( automate = true ) Map<String, Object> getMessageStoreSettings(); 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 e8dba7ed3f..b36d31b6e8 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 @@ -87,13 +87,6 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple put(STORE_VERSION, String.class); }}); - public static final String DEFAULT_NAME = "QpidBroker"; - - @SuppressWarnings("serial") - private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{ - put(Broker.NAME, DEFAULT_NAME); - - }}); public static final String MANAGEMENT_MODE_AUTHENTICATION = "MANAGEMENT_MODE_AUTHENTICATION"; private final ConfiguredObjectFactory _objectFactory; @@ -143,7 +136,8 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple Map<String, Object> attributes, SystemContext parent) { - super(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>singletonMap(SystemContext.class, parent), DEFAULTS, combineIdWithAttributes(id,MapValueConverter.convert(attributes, ATTRIBUTE_TYPES)), parent.getTaskExecutor()); + super(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>singletonMap(SystemContext.class, parent), + Collections.<String,Object>emptyMap(), combineIdWithAttributes(id,MapValueConverter.convert(attributes, ATTRIBUTE_TYPES)), parent.getTaskExecutor()); _objectFactory = parent.getObjectFactory(); _virtualHostRegistry = new VirtualHostRegistry(parent.getEventLogger()); 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 595a262486..f432a540e5 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 @@ -60,7 +60,7 @@ public final class ConnectionAdapter extends AbstractConfiguredObject<Connection public ConnectionAdapter(final AMQConnectionModel conn, TaskExecutor taskExecutor) { - super(Collections.<String,Object>emptyMap(), createAttributes(conn), taskExecutor); + super(createAttributes(conn), taskExecutor); _connection = conn; open(); conn.addSessionListener(this); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java index 22877a4ea9..525a02d3a6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java @@ -358,7 +358,7 @@ public class FileBasedGroupProvider public GroupAdapter(Map<String,Object> attributes, TaskExecutor taskExecutor) { - super(Collections.<String,Object>emptyMap(),attributes, taskExecutor); + super(attributes, taskExecutor); } @@ -508,7 +508,7 @@ public class FileBasedGroupProvider public GroupMemberAdapter(Map<String,Object> attrMap, TaskExecutor taskExecutor) { - super(Collections.<String,Object>emptyMap(), attrMap, taskExecutor); + super(attrMap, taskExecutor); } @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 ec2a0574fa..7281799fc2 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 @@ -68,18 +68,13 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File public static String PATH = "path"; public static final String PROVIDER_TYPE = "FileSystemPreferences"; - @SuppressWarnings("serial") - private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>() - {{ - put(TYPE, FileSystemPreferencesProvider.class.getSimpleName()); - }}); + @SuppressWarnings("serial") private static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>() {{ put(NAME, String.class); put(PATH, String.class); - put(TYPE, String.class); }}); private final AuthenticationProvider<? extends AuthenticationProvider> _authenticationProvider; @@ -91,7 +86,7 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File AuthenticationProvider<? extends AuthenticationProvider> authenticationProvider) { super(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>singletonMap(AuthenticationProvider.class, authenticationProvider), - DEFAULTS, + Collections.<String,Object>emptyMap(), combineIdWithAttributes(id,MapValueConverter.convert(attributes, ATTRIBUTE_TYPES)), authenticationProvider.getParent(Broker.class).getTaskExecutor()); State state = MapValueConverter.getEnumAttribute(State.class, STATE, attributes, State.INITIALISING); @@ -341,7 +336,7 @@ public class FileSystemPreferencesProvider extends AbstractConfiguredObject<File } String newType = (String) attributes.get(TYPE); String currentType = (String) getAttribute(TYPE); - if (!currentType.equals(newType)) + if (newType != null && !currentType.equals(newType)) { throw new IllegalConfigurationException("Changing the type of preferences provider is not supported"); } 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 959f5757e2..0d11b6e97d 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 @@ -45,7 +45,7 @@ final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> impl public SessionAdapter(final AMQSessionModel session, TaskExecutor taskExecutor) { - super(Collections.<String,Object>emptyMap(),createAttributes(session), taskExecutor); + super(createAttributes(session), taskExecutor); _session = session; _session.addConsumerListener(new ConsumerListener() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java index 9faa5f9493..15843d14fe 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java @@ -44,8 +44,8 @@ public class VirtualHostAliasAdapter extends AbstractConfiguredObject<VirtualHos public VirtualHostAliasAdapter(VirtualHost virtualHost, Port port) { - super(Collections.<String, Object>emptyMap(), - createAttributes(virtualHost, port), + super( + createAttributes(virtualHost, port), virtualHost.getTaskExecutor()); _vhost = virtualHost; _port = port; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java index 592968ab94..ef79f9f6bd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java @@ -120,10 +120,6 @@ abstract public class AbstractPort<X extends AbstractPort<X>> extends AbstractCo { updatedDefaults.put(Port.TRANSPORTS, Collections.singleton(DEFAULT_TRANSPORT)); } - if(!defaults.containsKey(NAME)) - { - updatedDefaults.put(NAME, attributes.get(PORT) + "-" + attributes.get(TYPE)); - } return updatedDefaults; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java index eb3a21e77e..b7cb56718c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java @@ -31,7 +31,6 @@ public interface SystemNodeCreator extends Pluggable void removeSystemNode(MessageNode node); VirtualHostImpl getVirtualHost(); - org.apache.qpid.server.model.VirtualHost getVirtualHostModel(); } void register(SystemNodeRegistry registry); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java index b42eb1e67f..8910a7ef60 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java @@ -121,8 +121,8 @@ class QueueConsumerImpl final Class<? extends ServerMessage> messageClass, EnumSet<Option> optionSet) { - super(Collections.<String,Object>emptyMap(), - createAttributeMap(consumerName,filters,optionSet), + super( + createAttributeMap(consumerName,filters,optionSet), queue.getVirtualHost().getTaskExecutor()); _messageClass = messageClass; _sessionReference = target.getSessionModel().getConnectionReference(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStoreAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStoreAdapter.java deleted file mode 100644 index 39682ff055..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStoreAdapter.java +++ /dev/null @@ -1,130 +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.security; - -import java.security.AccessControlException; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.UUID; - -import org.apache.qpid.server.model.Broker; -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.ManagedAttributeField; -import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.AbstractConfiguredObject; -import org.apache.qpid.server.util.MapValueConverter; - -public abstract class AbstractKeyStoreAdapter<X extends ConfiguredObject<X>> extends AbstractConfiguredObject<X> -{ - public static final String DUMMY_PASSWORD_MASK = "********"; - public static final String DEFAULT_KEYSTORE_TYPE = java.security.KeyStore.getDefaultType(); - - @ManagedAttributeField - private String _password; - - - protected AbstractKeyStoreAdapter(UUID id, Broker broker, Map<String, Object> defaults, - Map<String, Object> attributes) - { - super(Collections.<Class<? extends ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, broker), - defaults, - combineIdWithAttributes(id, attributes), - broker.getTaskExecutor()); - - MapValueConverter.assertMandatoryAttribute(KeyStore.PATH, attributes); - } - - - @Override - public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException - { - throw new IllegalStateException(); - } - - @Override - public State getState() - { - return State.ACTIVE; - } - - @Override - public boolean isDurable() - { - return true; - } - - @Override - public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException - { - throw new IllegalStateException(); - } - - @Override - public LifetimePolicy getLifetimePolicy() - { - return LifetimePolicy.PERMANENT; - } - - @Override - public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException, - IllegalArgumentException - { - throw new IllegalStateException(); - } - - @Override - public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz) - { - return Collections.emptySet(); - } - - @Override - public Object getAttribute(String name) - { - if(KeyStore.STATE.equals(name)) - { - return getState(); - } - else if(KeyStore.DURABLE.equals(name)) - { - return isDurable(); - } - else if(KeyStore.LIFETIME_POLICY.equals(name)) - { - return getLifetimePolicy(); - } - - return super.getAttribute(name); - } - - public String getPassword() - { - return _password; - } - - public void setPassword(String password) - { - _password = password; - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java index c162a66e64..822245f1a8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java @@ -38,12 +38,18 @@ import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.IntegrityViolationException; import org.apache.qpid.server.model.KeyStore; +import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.ManagedAttribute; import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedContextDefault; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.model.RuntimeDefault; import org.apache.qpid.server.model.State; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.util.MapValueConverter; @@ -52,8 +58,13 @@ import org.apache.qpid.transport.network.security.ssl.QpidClientX509KeyManager; import org.apache.qpid.transport.network.security.ssl.SSLUtil; @ManagedObject( category = false ) -public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implements KeyStore<FileKeyStore> +public class FileKeyStore extends AbstractConfiguredObject<FileKeyStore> implements KeyStore<FileKeyStore> { + public static final String KEY_MANAGER_FACTORY_ALGORITHM = "keyManagerFactoryAlgorithm"; + public static final String CERTIFICATE_ALIAS = "certificateAlias"; + public static final String KEY_STORE_TYPE = "keyStoreType"; + public static final String PASSWORD = "password"; + public static final String PATH = "path"; @SuppressWarnings("serial") public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ put(NAME, String.class); @@ -64,6 +75,30 @@ public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implemen put(KEY_MANAGER_FACTORY_ALGORITHM, String.class); }}); + + @ManagedContextDefault(name = "keyStoreFile.keyStoreType") + public static final RuntimeDefault<String> DEFAULT_KEYSTORE_TYPE = + new RuntimeDefault<String>() + { + @Override + public String value() + { + return java.security.KeyStore.getDefaultType(); + } + }; + + @ManagedContextDefault(name = "keyStoreFile.keyManagerFactoryAlgorithm") + public static final RuntimeDefault<String> DEFAULT_KEY_MANAGER_FACTORY_ALGORITHM = + new RuntimeDefault<String>() + { + @Override + public String value() + { + return KeyManagerFactory.getDefaultAlgorithm(); + } + }; + + @ManagedAttributeField private String _type; @ManagedAttributeField @@ -74,18 +109,18 @@ public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implemen private String _keyManagerFactoryAlgorithm; @ManagedAttributeField private String _path; + @ManagedAttributeField + private String _password; - @SuppressWarnings("serial") - public static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{ - put(KeyStore.KEY_STORE_TYPE, DEFAULT_KEYSTORE_TYPE); - put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, KeyManagerFactory.getDefaultAlgorithm()); - }}); private Broker<?> _broker; public FileKeyStore(UUID id, Broker<?> broker, Map<String, Object> attributes) { - super(id, broker, DEFAULTS, attributes); + super(Collections.<Class<? extends ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, broker), + Collections.<String,Object>emptyMap(), combineIdWithAttributes(id, attributes), + broker.getTaskExecutor()); + _broker = broker; } @@ -100,7 +135,62 @@ public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implemen @Override public Collection<String> getAttributeNames() { - return getAttributeNames(KeyStore.class); + return getAttributeNames(getClass()); + } + @Override + public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException + { + throw new IllegalStateException(); + } + + @Override + public State getState() + { + return State.ACTIVE; + } + + @Override + public boolean isDurable() + { + return true; + } + + @Override + public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException + { + throw new IllegalStateException(); + } + + @Override + public LifetimePolicy getLifetimePolicy() + { + return LifetimePolicy.PERMANENT; + } + + @Override + public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException, + IllegalArgumentException + { + throw new IllegalStateException(); + } + + @Override + public Object getAttribute(String name) + { + if(KeyStore.STATE.equals(name)) + { + return getState(); + } + else if(KeyStore.DURABLE.equals(name)) + { + return isDurable(); + } + else if(KeyStore.LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + + return super.getAttribute(name); } @Override @@ -171,13 +261,13 @@ public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implemen } } - Map<String, Object> merged = generateEffectiveAttributes(changedValues); - - String keyStorePath = (String)merged.get(KeyStore.PATH); - String keyStorePassword = (String) merged.get(KeyStore.PASSWORD); - String keyStoreType = (String)merged.get(KeyStore.KEY_STORE_TYPE); - String keyManagerFactoryAlgorithm = (String)merged.get(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM); - String certAlias = (String)merged.get(KeyStore.CERTIFICATE_ALIAS); + String keyStorePath = changedValues.containsKey(PATH) ? (String)changedValues.get(PATH) : getPath(); + String keyStorePassword = changedValues.containsKey(PASSWORD) ? (String) changedValues.get(PASSWORD) : getPassword(); + String keyStoreType = changedValues.containsKey(KEY_STORE_TYPE) ? (String)changedValues.get(KEY_STORE_TYPE) : getKeyStoreType(); + String keyManagerFactoryAlgorithm = changedValues.containsKey(KEY_MANAGER_FACTORY_ALGORITHM) ? + (String)changedValues.get(KEY_MANAGER_FACTORY_ALGORITHM) : getKeyManagerFactoryAlgorithm(); + String certAlias = changedValues.containsKey(CERTIFICATE_ALIAS) ? (String)changedValues.get(CERTIFICATE_ALIAS) + : getCertificateAlias(); validateKeyStoreAttributes(keyStoreType, keyStorePath, keyStorePassword, certAlias, keyManagerFactoryAlgorithm); @@ -229,30 +319,41 @@ public class FileKeyStore extends AbstractKeyStoreAdapter<FileKeyStore> implemen } } - @Override + @ManagedAttribute( automate = true, mandatory = true) public String getPath() { return _path; } - @Override + @ManagedAttribute( automate = true ) public String getCertificateAlias() { return _certificateAlias; } - @Override + @ManagedAttribute( automate = true, defaultValue = "${keyStoreFile.keyManagerFactoryAlgorithm}" ) public String getKeyManagerFactoryAlgorithm() { return _keyManagerFactoryAlgorithm; } - @Override + @ManagedAttribute( automate = true, defaultValue = "${keyStoreFile.keyStoreType}" ) public String getKeyStoreType() { return _keyStoreType; } + @ManagedAttribute( secure = true, automate = true, mandatory = true ) + public String getPassword() + { + return _password; + } + + public void setPassword(String password) + { + _password = password; + } + public KeyManager[] getKeyManagers() throws GeneralSecurityException { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStore.java index c97668e5a9..adc187bd38 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStore.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; @@ -48,8 +49,36 @@ import org.apache.qpid.transport.network.security.ssl.QpidPeersOnlyTrustManager; import org.apache.qpid.transport.network.security.ssl.SSLUtil; @ManagedObject( category = false ) -public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> implements TrustStore<FileTrustStore> +public class FileTrustStore extends AbstractConfiguredObject<FileTrustStore> implements TrustStore<FileTrustStore> { + + + @ManagedContextDefault(name = "trustStoreFile.trustStoreType") + public static final RuntimeDefault<String> DEFAULT_TRUSTSTORE_TYPE = + new RuntimeDefault<String>() + { + @Override + public String value() + { + return java.security.KeyStore.getDefaultType(); + } + }; + @ManagedContextDefault(name = "trustStoreFile.trustManagerFactoryAlgorithm") + public static final RuntimeDefault<String> DEFAULT_TRUST_MANAGER_FACTORY_ALGORITHM = + new RuntimeDefault<String>() + { + @Override + public String value() + { + return KeyManagerFactory.getDefaultAlgorithm(); + } + }; + + public static final String TRUST_MANAGER_FACTORY_ALGORITHM = "trustManagerFactoryAlgorithm"; + public static final String PEERS_ONLY = "peersOnly"; + public static final String TRUST_STORE_TYPE = "trustStoreType"; + public static final String PASSWORD = "password"; + public static final String PATH = "path"; @SuppressWarnings("serial") public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ put(NAME, String.class); @@ -60,13 +89,6 @@ public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> impl put(TRUST_MANAGER_FACTORY_ALGORITHM, String.class); }}); - @SuppressWarnings("serial") - public static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{ - put(TrustStore.TRUST_STORE_TYPE, DEFAULT_KEYSTORE_TYPE); - put(TrustStore.PEERS_ONLY, Boolean.FALSE); - put(TrustStore.TRUST_MANAGER_FACTORY_ALGORITHM, TrustManagerFactory.getDefaultAlgorithm()); - }}); - @ManagedAttributeField private String _trustStoreType; @ManagedAttributeField @@ -75,13 +97,16 @@ public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> impl private String _path; @ManagedAttributeField private boolean _peersOnly; - + @ManagedAttributeField + private String _password; private Broker<?> _broker; public FileTrustStore(UUID id, Broker<?> broker, Map<String, Object> attributes) { - super(id, broker, DEFAULTS, attributes); + super(Collections.<Class<? extends ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, broker), + Collections.<String,Object>emptyMap(), combineIdWithAttributes(id, attributes), + broker.getTaskExecutor()); _broker = broker; } @@ -95,7 +120,43 @@ public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> impl @Override public Collection<String> getAttributeNames() { - return getAttributeNames(TrustStore.class); + return getAttributeNames(getClass()); + } + @Override + public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException + { + throw new IllegalStateException(); + } + + @Override + public State getState() + { + return State.ACTIVE; + } + + @Override + public boolean isDurable() + { + return true; + } + + @Override + public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException + { + throw new IllegalStateException(); + } + + @Override + public LifetimePolicy getLifetimePolicy() + { + return LifetimePolicy.PERMANENT; + } + + @Override + public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException, + IllegalArgumentException + { + throw new IllegalStateException(); } @Override @@ -189,10 +250,16 @@ public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> impl Map<String, Object> merged = generateEffectiveAttributes(changedValues); - String trustStorePath = (String)merged.get(TrustStore.PATH); - String trustStorePassword = (String) merged.get(TrustStore.PASSWORD); - String trustStoreType = (String)merged.get(TrustStore.TRUST_STORE_TYPE); - String trustManagerFactoryAlgorithm = (String)merged.get(TrustStore.TRUST_MANAGER_FACTORY_ALGORITHM); + String trustStorePath = changedValues.containsKey(PATH) ? (String) changedValues.get(PATH) : getPath(); + String trustStorePassword = + changedValues.containsKey(PASSWORD) ? (String) changedValues.get(PASSWORD) : getPassword(); + String trustStoreType = changedValues.containsKey(TRUST_STORE_TYPE) + ? (String) changedValues.get(TRUST_STORE_TYPE) + : getTrustStoreType(); + String trustManagerFactoryAlgorithm = + changedValues.containsKey(TRUST_MANAGER_FACTORY_ALGORITHM) + ? (String) changedValues.get(TRUST_MANAGER_FACTORY_ALGORITHM) + : getTrustManagerFactoryAlgorithm(); validateTrustStoreAttributes(trustStoreType, trustStorePath, trustStorePassword, trustManagerFactoryAlgorithm); @@ -223,29 +290,57 @@ public class FileTrustStore extends AbstractKeyStoreAdapter<FileTrustStore> impl } @Override + public Object getAttribute(String name) + { + if(STATE.equals(name)) + { + return getState(); + } + else if(DURABLE.equals(name)) + { + return isDurable(); + } + else if(org.apache.qpid.server.model.KeyStore.LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + + return super.getAttribute(name); + } + @ManagedAttribute( automate = true, mandatory = true ) public String getPath() { return _path; } - @Override + @ManagedAttribute( automate = true, defaultValue = "${trustStoreFile.trustManagerFactoryAlgorithm}") public String getTrustManagerFactoryAlgorithm() { return _trustManagerFactoryAlgorithm; } - @Override + @ManagedAttribute( automate = true, defaultValue = "${trustStoreFile.trustStoreType}") public String getTrustStoreType() { return _trustStoreType; } - @Override + @ManagedAttribute( automate = true, defaultValue = "false" ) public boolean isPeersOnly() { return _peersOnly; } + @ManagedAttribute( secure = true, automate = true, mandatory = true ) + public String getPassword() + { + return _password; + } + + public void setPassword(String password) + { + _password = password; + } public TrustManager[] getTrustManagers() throws GeneralSecurityException { String trustStorePath = _path; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java index 130413d99d..f681565767 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java @@ -356,7 +356,7 @@ public abstract class PrincipalDatabaseAuthenticationManager<T extends Principal public PrincipalAdapter(Principal user) { - super(Collections.<String,Object>emptyMap(), createPrincipalAttributes(PrincipalDatabaseAuthenticationManager.this, user), + super(createPrincipalAttributes(PrincipalDatabaseAuthenticationManager.this, user), PrincipalDatabaseAuthenticationManager.this.getTaskExecutor()); _user = user; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index 73e6133725..0c1016f012 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.virtualhost; -import java.lang.reflect.Type; import java.security.AccessControlException; import java.security.PrivilegedAction; import java.util.ArrayList; @@ -89,7 +88,6 @@ import org.apache.qpid.server.txn.DtxRegistry; import org.apache.qpid.server.txn.LocalTransaction; import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.MapValueConverter; -import org.apache.qpid.server.util.ParameterizedTypeImpl; public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> extends AbstractConfiguredObject<X> implements VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, IConnectionRegistry.RegistryChangeListener, EventListener, @@ -101,7 +99,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte private final long _createTime = System.currentTimeMillis(); - private final ScheduledThreadPoolExecutor _houseKeepingTasks; + private ScheduledThreadPoolExecutor _houseKeepingTasks; private final Broker<?> _broker; @@ -132,31 +130,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte private final EventLogger _eventLogger; - @SuppressWarnings("serial") - public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ - put(NAME, String.class); - put(TYPE, String.class); - put(STATE, State.class); - - put(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Boolean.class); - - put(HOUSEKEEPING_CHECK_PERIOD, Long.class); - put(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Long.class); - put(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Long.class); - put(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class); - put(STORE_TRANSACTION_OPEN_TIMEOUT_WARN, Long.class); - - put(MESSAGE_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class)); - put(CONFIGURATION_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class)); - - }}); - - @SuppressWarnings("serial") - private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{ - put(HOUSE_KEEPING_THREAD_COUNT, Runtime.getRuntime().availableProcessors()); - }}); - - private final Map<AMQConnectionModel, ConnectionAdapter> _connectionAdapters = new HashMap<AMQConnectionModel, ConnectionAdapter>(); @@ -187,10 +160,15 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte @ManagedAttributeField private long _storeTransactionOpenTimeoutWarn; + @ManagedAttributeField + private int _housekeepingThreadCount; + public AbstractVirtualHost(final Map<String, Object> attributes, Broker<?> broker) { - super(parentsMap(broker), DEFAULTS, enhanceWithId(attributes), broker.getTaskExecutor()); + super(parentsMap(broker), + Collections.<String,Object>emptyMap(), + enhanceWithId(attributes), broker.getTaskExecutor()); _broker = broker; _dtxRegistry = new DtxRegistry(); @@ -201,9 +179,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte _connectionRegistry = new ConnectionRegistry(); _connectionRegistry.addRegistryChangeListener(this); - _houseKeepingTasks = new ScheduledThreadPoolExecutor(getHouseKeepingThreadCount()); - - _queueRegistry = new DefaultQueueRegistry(this); _queueFactory = new AMQQueueFactory(this, _queueRegistry); @@ -249,6 +224,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte protected void onOpen() { super.onOpen(); + _houseKeepingTasks = new ScheduledThreadPoolExecutor(getHousekeepingThreadCount()); registerSystemNodes(); @@ -379,12 +355,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte throw new IllegalStateException(); } - - public String getType() - { - return (String)getAttribute(TYPE); - } - public String setType(final String currentType, final String desiredType) throws IllegalStateException, AccessControlException { @@ -526,19 +496,22 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte protected void shutdownHouseKeeping() { - _houseKeepingTasks.shutdown(); - - try + if(_houseKeepingTasks != null) { - if (!_houseKeepingTasks.awaitTermination(HOUSEKEEPING_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS)) + _houseKeepingTasks.shutdown(); + + try { - _houseKeepingTasks.shutdownNow(); + if (!_houseKeepingTasks.awaitTermination(HOUSEKEEPING_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS)) + { + _houseKeepingTasks.shutdownNow(); + } + } + catch (InterruptedException e) + { + _logger.warn("Interrupted during Housekeeping shutdown:", e); + Thread.currentThread().interrupt(); } - } - catch (InterruptedException e) - { - _logger.warn("Interrupted during Housekeeping shutdown:", e); - Thread.currentThread().interrupt(); } } @@ -1375,12 +1348,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte return AbstractVirtualHost.this; } - @Override - public org.apache.qpid.server.model.VirtualHost getVirtualHostModel() - { - return AbstractVirtualHost.this; - } - } @@ -1390,12 +1357,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte return isQueue_deadLetterQueueEnabled(); } - @Override - public org.apache.qpid.server.model.VirtualHost getModel() - { - return this; - } - public void executeTransaction(TransactionalOperation op) { @@ -1649,9 +1610,9 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } @Override - public int getHouseKeepingThreadCount() + public int getHousekeepingThreadCount() { - return (Integer)getAttribute(HOUSE_KEEPING_THREAD_COUNT); + return _housekeepingThreadCount; } @@ -1661,24 +1622,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte { if (desiredState == State.ACTIVE) { -/* - try - { - onOpen(); - } - catch(RuntimeException e) - { - changeAttribute(STATE, State.INITIALISING, State.ERRORED); - if (_broker.isManagementMode()) - { - _logger.warn("Failed to activate virtual host: " + getName(), e); - } - else - { - throw e; - } - } -*/ return true; } else if (desiredState == State.STOPPED) @@ -1722,7 +1665,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte _logger.warn("Exception occurred on store deletion", e); } } - setAttribute(org.apache.qpid.server.model.VirtualHost.STATE, getState(), State.DELETED); + setAttribute(VirtualHost.STATE, getState(), State.DELETED); deleted(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java index efbc7c5229..9a1390d2e8 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java @@ -126,7 +126,5 @@ public interface VirtualHostImpl< X extends VirtualHostImpl<X,Q,E>, Q extends AM TaskExecutor getTaskExecutor(); - org.apache.qpid.server.model.VirtualHost getModel(); - EventLogger getEventLogger(); } diff --git a/qpid/java/broker-core/src/main/resources/initial-config.json b/qpid/java/broker-core/src/main/resources/initial-config.json index efc98f6ac8..5cd53fa9cc 100644 --- a/qpid/java/broker-core/src/main/resources/initial-config.json +++ b/qpid/java/broker-core/src/main/resources/initial-config.json @@ -19,7 +19,7 @@ * */ { - "name": "Broker", + "name": "${broker.name}", "storeVersion": 1, "modelVersion": "1.4", "defaultVirtualHost" : "default", diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java index 280ee185ae..e5beb21810 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java @@ -20,6 +20,20 @@ */ package org.apache.qpid.server.configuration; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.StringWriter; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig; + import org.apache.qpid.server.BrokerOptions; import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore; import org.apache.qpid.server.configuration.updater.TaskExecutor; @@ -32,19 +46,6 @@ import org.apache.qpid.server.model.SystemContext; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.test.utils.TestFileUtils; import org.apache.qpid.util.FileUtils; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; - -import java.io.File; -import java.io.StringWriter; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class BrokerConfigurationStoreCreatorTest extends QpidTestCase { @@ -117,7 +118,7 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); - String defaultBrokerName = "Broker"; + String defaultBrokerName = "${broker.name}"; String testBrokerName = getTestName(); Map<String, Object> brokerObjectMap = new HashMap<String, Object>(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java index 9e3d38064f..23f71e4ac3 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java @@ -76,7 +76,11 @@ public class BrokerRecovererTest extends TestCase when(_brokerEntry.getId()).thenReturn(_brokerId); when(_brokerEntry.getType()).thenReturn(Broker.class.getSimpleName()); - when(_brokerEntry.getAttributes()).thenReturn(Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, Model.MODEL_VERSION)); + Map<String, Object> attributesMap = new HashMap<String, Object>(); + attributesMap.put(Broker.MODEL_VERSION, Model.MODEL_VERSION); + attributesMap.put(Broker.NAME, getName()); + + when(_brokerEntry.getAttributes()).thenReturn(attributesMap); when(_brokerEntry.getParents()).thenReturn(Collections.singletonMap(SystemContext.class.getSimpleName(), _systemContext.asObjectRecord())); //Add a base AuthenticationProvider for all tests @@ -90,6 +94,7 @@ public class BrokerRecovererTest extends TestCase public void testCreateBrokerAttributes() { Map<String, Object> attributes = new HashMap<String, Object>(); + attributes.put(Broker.NAME, getName()); attributes.put(Broker.DEFAULT_VIRTUAL_HOST, "test"); attributes.put(Broker.CONNECTION_SESSION_COUNT_LIMIT, 1000); attributes.put(Broker.CONNECTION_HEART_BEAT_DELAY, 2000); @@ -270,6 +275,7 @@ public class BrokerRecovererTest extends TestCase // need to reset all the shared objects for every iteration of the test setUp(); brokerAttributes.put(Broker.MODEL_VERSION, incompatibleVersion); + brokerAttributes.put(Broker.NAME, getName()); when(_brokerEntry.getAttributes()).thenReturn(brokerAttributes); try @@ -293,6 +299,8 @@ public class BrokerRecovererTest extends TestCase Map<String, Object> brokerAttributes = new HashMap<String, Object>(); String incompatibleVersion = Model.MODEL_MAJOR_VERSION + "." + Integer.MAX_VALUE; brokerAttributes.put(Broker.MODEL_VERSION, incompatibleVersion); + brokerAttributes.put(Broker.NAME, getName()); + when(_brokerEntry.getAttributes()).thenReturn(brokerAttributes); try @@ -311,6 +319,8 @@ public class BrokerRecovererTest extends TestCase public void testIncorrectModelVersion() throws Exception { Map<String, Object> brokerAttributes = new HashMap<String, Object>(); + brokerAttributes.put(Broker.NAME, getName()); + String[] versions = { Integer.MAX_VALUE + "_" + 0, "", null }; for (String modelVersion : versions) { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileKeyStoreCreationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileKeyStoreCreationTest.java index 177fecb72c..1470e68a90 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileKeyStoreCreationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileKeyStoreCreationTest.java @@ -32,12 +32,13 @@ import javax.security.auth.Subject; import junit.framework.TestCase; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectFactory; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory; -import org.apache.qpid.server.security.AbstractKeyStoreAdapter; +import org.apache.qpid.server.security.FileKeyStore; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.test.utils.TestSSLConstants; @@ -59,7 +60,7 @@ public class FileKeyStoreCreationTest extends TestCase Broker broker = mock(Broker.class); - final KeyStore keyStore = + final FileKeyStore keyStore = createKeyStore(attributes, broker); @@ -75,7 +76,7 @@ public class FileKeyStoreCreationTest extends TestCase assertNotNull(keyStore.getPassword()); assertEquals(TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD, keyStore.getPassword()); //verify that we haven't configured the key store with the actual dummy password value - assertFalse(AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK.equals(keyStore.getPassword())); + assertFalse(AbstractConfiguredObject.SECURED_STRING_VALUE.equals(keyStore.getPassword())); return null; } }); @@ -83,7 +84,7 @@ public class FileKeyStoreCreationTest extends TestCase // Verify the remaining attributes, including that the password value returned // via getAttribute is actually the dummy value and not the real password - attributesCopy.put(KeyStore.PASSWORD, AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK); + attributesCopy.put(FileKeyStore.PASSWORD, AbstractConfiguredObject.SECURED_STRING_VALUE); for (Map.Entry<String, Object> attribute : attributesCopy.entrySet()) { Object attributeValue = keyStore.getAttribute(attribute.getKey()); @@ -91,11 +92,11 @@ public class FileKeyStoreCreationTest extends TestCase } } - protected KeyStore createKeyStore(final Map<String, Object> attributes, final Broker broker) + protected FileKeyStore createKeyStore(final Map<String, Object> attributes, final Broker broker) { ConfiguredObjectTypeFactory configuredObjectTypeFactory = _factory.getConfiguredObjectTypeFactory(KeyStore.class, attributes); - return (KeyStore) configuredObjectTypeFactory.create(attributes, broker); + return (FileKeyStore) configuredObjectTypeFactory.create(attributes, broker); } public void testCreateWithMissedRequiredAttributes() @@ -105,7 +106,7 @@ public class FileKeyStoreCreationTest extends TestCase UUID id = UUID.randomUUID(); Broker broker = mock(Broker.class); - String[] mandatoryProperties = {KeyStore.NAME, KeyStore.PATH, KeyStore.PASSWORD}; + String[] mandatoryProperties = {KeyStore.NAME, FileKeyStore.PATH, FileKeyStore.PASSWORD}; for (int i = 0; i < mandatoryProperties.length; i++) { Map<String, Object> properties = new HashMap<String, Object>(attributes); @@ -127,11 +128,11 @@ public class FileKeyStoreCreationTest extends TestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.ID, UUID.randomUUID()); attributes.put(KeyStore.NAME, getName()); - attributes.put(KeyStore.PATH, TestSSLConstants.BROKER_KEYSTORE); - attributes.put(KeyStore.PASSWORD, TestSSLConstants.BROKER_KEYSTORE_PASSWORD); - attributes.put(KeyStore.KEY_STORE_TYPE, "jks"); - attributes.put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, KeyManagerFactory.getDefaultAlgorithm()); - attributes.put(KeyStore.CERTIFICATE_ALIAS, "java-broker"); + attributes.put(FileKeyStore.PATH, TestSSLConstants.BROKER_KEYSTORE); + attributes.put(FileKeyStore.PASSWORD, TestSSLConstants.BROKER_KEYSTORE_PASSWORD); + attributes.put(FileKeyStore.KEY_STORE_TYPE, "jks"); + attributes.put(FileKeyStore.KEY_MANAGER_FACTORY_ALGORITHM, KeyManagerFactory.getDefaultAlgorithm()); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, "java-broker"); return attributes; } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileTrustStoreCreationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileTrustStoreCreationTest.java index 25005407ae..66f31a4e3d 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileTrustStoreCreationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/FileTrustStoreCreationTest.java @@ -30,9 +30,9 @@ import java.util.UUID; import javax.net.ssl.TrustManagerFactory; import javax.security.auth.Subject; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.TrustStore; -import org.apache.qpid.server.security.AbstractKeyStoreAdapter; import org.apache.qpid.server.security.FileTrustStore; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.test.utils.QpidTestCase; @@ -48,7 +48,7 @@ public class FileTrustStoreCreationTest extends QpidTestCase UUID id = UUID.randomUUID(); Broker broker = mock(Broker.class); - final TrustStore trustStore = new FileTrustStore(id, broker, attributes); + final FileTrustStore trustStore = new FileTrustStore(id, broker, attributes); trustStore.open(); assertNotNull("Trust store configured object is not created", trustStore); assertEquals(id, trustStore.getId()); @@ -62,7 +62,7 @@ public class FileTrustStoreCreationTest extends QpidTestCase assertEquals(TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD, trustStore.getPassword()); assertNotNull(trustStore.getPassword()); //verify that we haven't configured the trust store with the actual dummy password value - assertFalse(AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK.equals(trustStore.getPassword())); + assertFalse(AbstractConfiguredObject.SECURED_STRING_VALUE.equals(trustStore.getPassword())); return null; } }); @@ -70,7 +70,7 @@ public class FileTrustStoreCreationTest extends QpidTestCase // Verify the remaining attributes, including that the password value returned // via getAttribute is actually the dummy value and not the real password - attributesCopy.put(TrustStore.PASSWORD, AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK); + attributesCopy.put(FileTrustStore.PASSWORD, AbstractConfiguredObject.SECURED_STRING_VALUE); for (Map.Entry<String, Object> attribute : attributesCopy.entrySet()) { Object attributeValue = trustStore.getAttribute(attribute.getKey()); @@ -85,7 +85,7 @@ public class FileTrustStoreCreationTest extends QpidTestCase UUID id = UUID.randomUUID(); Broker broker = mock(Broker.class); - String[] mandatoryProperties = {TrustStore.NAME, TrustStore.PATH, TrustStore.PASSWORD}; + String[] mandatoryProperties = {TrustStore.NAME, FileTrustStore.PATH, FileTrustStore.PASSWORD}; for (int i = 0; i < mandatoryProperties.length; i++) { Map<String, Object> properties = new HashMap<String, Object>(attributes); @@ -107,11 +107,11 @@ public class FileTrustStoreCreationTest extends QpidTestCase { Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, getName()); - attributes.put(TrustStore.PATH, TestSSLConstants.BROKER_TRUSTSTORE); - attributes.put(TrustStore.PASSWORD, TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD); - attributes.put(TrustStore.TRUST_STORE_TYPE, "jks"); - attributes.put(TrustStore.TRUST_MANAGER_FACTORY_ALGORITHM, TrustManagerFactory.getDefaultAlgorithm()); - attributes.put(TrustStore.PEERS_ONLY, Boolean.TRUE); + attributes.put(FileTrustStore.PATH, TestSSLConstants.BROKER_TRUSTSTORE); + attributes.put(FileTrustStore.PASSWORD, TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD); + attributes.put(FileTrustStore.TRUST_STORE_TYPE, "jks"); + attributes.put(FileTrustStore.TRUST_MANAGER_FACTORY_ALGORITHM, TrustManagerFactory.getDefaultAlgorithm()); + attributes.put(FileTrustStore.PEERS_ONLY, Boolean.TRUE); return attributes; } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java index 50a58f099a..42b66cbb85 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java @@ -76,7 +76,7 @@ public class VirtualHostCreationTest extends TestCase attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE); attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE)); - String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.TYPE, VirtualHost.MESSAGE_STORE_SETTINGS}; + String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.MESSAGE_STORE_SETTINGS}; checkMandatoryAttributesAreValidated(mandatoryAttributes, attributes); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java index 77acf559aa..4f8e0d99dc 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java @@ -39,6 +39,8 @@ import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.model.TrustStore; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider; +import org.apache.qpid.server.security.FileKeyStore; +import org.apache.qpid.server.security.FileTrustStore; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; import org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager; import org.apache.qpid.server.store.ConfiguredObjectRecord; @@ -303,10 +305,10 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase UUID trustStoreId = UUID.randomUUID(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, getName()); - attributes.put(TrustStore.PATH, "/path/to/truststore"); - attributes.put(TrustStore.PASSWORD, "my-secret-password"); - attributes.put(TrustStore.TRUST_STORE_TYPE, "NON-JKS"); - attributes.put(TrustStore.TRUST_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); + attributes.put(FileTrustStore.PATH, "/path/to/truststore"); + attributes.put(FileTrustStore.PASSWORD, "my-secret-password"); + attributes.put(FileTrustStore.TRUST_STORE_TYPE, "NON-JKS"); + attributes.put(FileTrustStore.TRUST_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); attributes.put(TrustStore.DESCRIPTION, "Description"); ConfigurationEntry @@ -327,12 +329,12 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase UUID keyStoreId = UUID.randomUUID(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, getName()); - attributes.put(KeyStore.PATH, "/path/to/truststore"); - attributes.put(KeyStore.PASSWORD, "my-secret-password"); - attributes.put(KeyStore.KEY_STORE_TYPE, "NON-JKS"); - attributes.put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); + attributes.put(FileKeyStore.PATH, "/path/to/truststore"); + attributes.put(FileKeyStore.PASSWORD, "my-secret-password"); + attributes.put(FileKeyStore.KEY_STORE_TYPE, "NON-JKS"); + attributes.put(FileKeyStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); attributes.put(KeyStore.DESCRIPTION, "Description"); - attributes.put(KeyStore.CERTIFICATE_ALIAS, "Alias"); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, "Alias"); ConfigurationEntry keyStoreEntry = new ConfigurationEntryImpl(keyStoreId, KeyStore.class.getSimpleName(), attributes, Collections.<UUID> emptySet(), _store); @@ -401,12 +403,12 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase UUID keyStoreId = UUID.randomUUID(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, getName()); - attributes.put(KeyStore.PATH, "/path/to/truststore"); - attributes.put(KeyStore.PASSWORD, "my-secret-password"); - attributes.put(KeyStore.KEY_STORE_TYPE, "NON-JKS"); - attributes.put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); + attributes.put(FileKeyStore.PATH, "/path/to/truststore"); + attributes.put(FileKeyStore.PASSWORD, "my-secret-password"); + attributes.put(FileKeyStore.KEY_STORE_TYPE, "NON-JKS"); + attributes.put(FileKeyStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD"); attributes.put(KeyStore.DESCRIPTION, "Description"); - attributes.put(KeyStore.CERTIFICATE_ALIAS, "Alias"); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, "Alias"); ConfigurationEntry keyStoreEntry = new ConfigurationEntryImpl(keyStoreId, KeyStore.class.getSimpleName(), attributes, Collections.<UUID> emptySet(), _store); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java index 99afa91367..3eeff61ca9 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java @@ -75,7 +75,7 @@ public class PortFactoryTest extends QpidTestCase setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES, null); setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES, null); _portFactory = new PortFactory(); - + _attributes.put(Port.NAME, getName()); _attributes.put(Port.PORT, _portNumber); _attributes.put(Port.TRANSPORTS, _tcpStringSet); _attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName); @@ -309,6 +309,7 @@ public class PortFactoryTest extends QpidTestCase _attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName); _attributes.put(Port.PORT, _portNumber); _attributes.put(Port.TRANSPORTS, _tcpStringSet); + _attributes.put(Port.NAME, getName()); Port port = _portFactory.createPort(_portId, _broker, _attributes); @@ -334,6 +335,7 @@ public class PortFactoryTest extends QpidTestCase _attributes.put(Port.PROTOCOLS, nonAmqpStringSet); _attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName); _attributes.put(Port.PORT, _portNumber); + _attributes.put(Port.NAME, getName()); Port port = _portFactory.createPort(_portId, _broker, _attributes); @@ -371,7 +373,7 @@ public class PortFactoryTest extends QpidTestCase { Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(Port.PORT, 1); - attributes.put(Port.NAME, getTestName()); + attributes.put(Port.NAME, getName()); attributes.put(Port.TRANSPORTS, Collections.singleton(Transport.TCP)); attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI)); @@ -396,7 +398,7 @@ public class PortFactoryTest extends QpidTestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(Port.PORT, 1); - attributes.put(Port.NAME, getTestName()); + attributes.put(Port.NAME, getName()); attributes.put(Port.TRANSPORTS, Collections.singleton(Transport.SSL)); attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI)); _attributes.put(Port.KEY_STORE, keyStoreName); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java index e75af3b89e..23d9aac93a 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java @@ -286,7 +286,7 @@ public class MockVirtualHost implements VirtualHostImpl<MockVirtualHost, AMQQueu } @Override - public int getHouseKeepingThreadCount() + public int getHousekeepingThreadCount() { return 0; } @@ -660,12 +660,6 @@ public class MockVirtualHost implements VirtualHostImpl<MockVirtualHost, AMQQueu } @Override - public org.apache.qpid.server.model.VirtualHost getModel() - { - return null; - } - - @Override public EventLogger getEventLogger() { return null; diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java index be2f2e3163..0c7361de90 100644 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java +++ b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java @@ -50,9 +50,6 @@ public class ACLFileAccessControlProvider @ManagedAttributeField private String _path; - @ManagedAttributeField - private String _type; - public ACLFileAccessControlProvider(Broker broker, Map<String, Object> attributes) { @@ -80,12 +77,6 @@ public class ACLFileAccessControlProvider return _path; } - @ManagedAttribute( automate = true ) - public String getType() - { - return _type; - } - @Override public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException { diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java index 8c752061ef..07345e7f0a 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java @@ -20,6 +20,9 @@ */ package org.apache.qpid.server.protocol.v0_10; +import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CHANNEL_FORMAT; +import static org.apache.qpid.util.Serial.gt; + import java.security.AccessController; import java.security.Principal; import java.security.PrivilegedAction; @@ -44,16 +47,14 @@ import java.util.concurrent.atomic.AtomicReference; import javax.security.auth.Subject; -import org.apache.qpid.server.connection.SessionPrincipal; -import org.apache.qpid.server.consumer.ConsumerImpl; -import org.apache.qpid.server.model.ConfigurationChangeListener; -import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.model.Consumer; -import org.apache.qpid.server.protocol.ConsumerListener; -import org.apache.qpid.server.store.StoreException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.TransactionTimeoutHelper; import org.apache.qpid.server.TransactionTimeoutHelper.CloseAction; +import org.apache.qpid.server.connection.SessionPrincipal; +import org.apache.qpid.server.consumer.ConsumerImpl; import org.apache.qpid.server.logging.LogMessage; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.ChannelMessages; @@ -61,11 +62,16 @@ import org.apache.qpid.server.logging.subjects.ChannelLogSubject; 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.model.ConfigurationChangeListener; +import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Consumer; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.protocol.CapacityChecker; +import org.apache.qpid.server.protocol.ConsumerListener; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.AuthorizationHolder; import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.StoreFuture; import org.apache.qpid.server.store.TransactionLogResource; import org.apache.qpid.server.txn.AlreadyKnownDtxException; @@ -84,12 +90,21 @@ import org.apache.qpid.server.txn.UnknownDtxBranchException; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.Deletable; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import org.apache.qpid.transport.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CHANNEL_FORMAT; -import static org.apache.qpid.util.Serial.gt; +import org.apache.qpid.transport.Binary; +import org.apache.qpid.transport.Connection; +import org.apache.qpid.transport.MessageCreditUnit; +import org.apache.qpid.transport.MessageFlow; +import org.apache.qpid.transport.MessageFlowMode; +import org.apache.qpid.transport.MessageSetFlowMode; +import org.apache.qpid.transport.MessageStop; +import org.apache.qpid.transport.MessageTransfer; +import org.apache.qpid.transport.Method; +import org.apache.qpid.transport.Range; +import org.apache.qpid.transport.RangeSet; +import org.apache.qpid.transport.RangeSetFactory; +import org.apache.qpid.transport.Session; +import org.apache.qpid.transport.SessionDelegate; +import org.apache.qpid.transport.Xid; public class ServerSession extends Session implements AuthorizationHolder, 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 e6fd437b90..2c6bc1b44e 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 @@ -20,6 +20,24 @@ */ package org.apache.qpid.server.management.amqp; +import java.nio.charset.Charset; +import java.security.AccessControlException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + import org.apache.qpid.server.consumer.ConsumerImpl; import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.filter.FilterManager; @@ -32,12 +50,12 @@ import org.apache.qpid.server.message.MessageSource; 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.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Model; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.plugin.SystemNodeCreator; import org.apache.qpid.server.protocol.AMQSessionModel; @@ -50,13 +68,6 @@ import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.StateChangeListener; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import java.nio.charset.Charset; -import java.security.AccessControlException; -import java.text.MessageFormat; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; - class ManagementNode implements MessageSource, MessageDestination { diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java index cdb71f4859..ab1fd7cf38 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java @@ -27,7 +27,7 @@ public class ManagementNodeCreator implements SystemNodeCreator @Override public void register(final SystemNodeRegistry registry) { - ManagementNode managementNode = new ManagementNode(registry,registry.getVirtualHostModel()); + ManagementNode managementNode = new ManagementNode(registry,registry.getVirtualHost()); registry.registerSystemNode(managementNode); } 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 b4ce0ccf9a..59c5a4428d 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 @@ -20,7 +20,35 @@ */ package org.apache.qpid.server.management.plugin; +import java.lang.reflect.Type; +import java.net.SocketAddress; +import java.security.GeneralSecurityException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.UUID; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import javax.servlet.DispatcherType; + import org.apache.log4j.Logger; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.SessionManager; +import org.eclipse.jetty.server.nio.SelectChannelConnector; +import org.eclipse.jetty.server.ssl.SslSocketConnector; +import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.util.ssl.SslContextFactory; + import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.logging.messages.ManagementConsoleMessages; import org.apache.qpid.server.management.plugin.filter.ForbiddingAuthorisationFilter; @@ -28,32 +56,23 @@ import org.apache.qpid.server.management.plugin.filter.RedirectingAuthorisationF import org.apache.qpid.server.management.plugin.servlet.DefinedFileServlet; import org.apache.qpid.server.management.plugin.servlet.FileServlet; import org.apache.qpid.server.management.plugin.servlet.LogFileServlet; -import org.apache.qpid.server.management.plugin.servlet.rest.*; +import org.apache.qpid.server.management.plugin.servlet.rest.HelperServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.LogFileListingServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.LogRecordsServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.LoggedOnUserPreferencesServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.SaslServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.StructureServlet; +import org.apache.qpid.server.management.plugin.servlet.rest.UserPreferencesServlet; import org.apache.qpid.server.model.*; -import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.adapter.AbstractPluginAdapter; +import org.apache.qpid.server.model.port.PortWithAuthProvider; import org.apache.qpid.server.util.MapValueConverter; import org.apache.qpid.server.util.ServerScopedRuntimeException; import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager; -import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.SessionManager; -import org.eclipse.jetty.server.nio.SelectChannelConnector; -import org.eclipse.jetty.server.ssl.SslSocketConnector; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.util.ssl.SslContextFactory; - -import javax.net.ssl.KeyManager; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import javax.servlet.DispatcherType; -import java.lang.reflect.Type; -import java.net.SocketAddress; -import java.security.GeneralSecurityException; -import java.util.*; @ManagedObject( category = false, type = "MANAGEMENT-HTTP" ) public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implements HttpManagementConfiguration<HttpManagement> @@ -62,12 +81,6 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem // 10 minutes by default public static final int DEFAULT_TIMEOUT_IN_SECONDS = 60 * 10; - public static final boolean DEFAULT_HTTP_BASIC_AUTHENTICATION_ENABLED = false; - public static final boolean DEFAULT_HTTPS_BASIC_AUTHENTICATION_ENABLED = true; - public static final boolean DEFAULT_HTTP_SASL_AUTHENTICATION_ENABLED = true; - public static final boolean DEFAULT_HTTPS_SASL_AUTHENTICATION_ENABLED = true; - public static final String DEFAULT_NAME = "httpManagement"; - public static final String TIME_OUT = "sessionTimeout"; public static final String HTTP_BASIC_AUTHENTICATION_ENABLED = "httpBasicAuthenticationEnabled"; public static final String HTTPS_BASIC_AUTHENTICATION_ENABLED = "httpsBasicAuthenticationEnabled"; @@ -80,17 +93,6 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem @SuppressWarnings("serial") - public static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>() - {{ - put(HTTP_BASIC_AUTHENTICATION_ENABLED, DEFAULT_HTTP_BASIC_AUTHENTICATION_ENABLED); - put(HTTPS_BASIC_AUTHENTICATION_ENABLED, DEFAULT_HTTPS_BASIC_AUTHENTICATION_ENABLED); - put(HTTP_SASL_AUTHENTICATION_ENABLED, DEFAULT_HTTP_SASL_AUTHENTICATION_ENABLED); - put(HTTPS_SASL_AUTHENTICATION_ENABLED, DEFAULT_HTTPS_SASL_AUTHENTICATION_ENABLED); - put(TIME_OUT, DEFAULT_TIMEOUT_IN_SECONDS); - put(NAME, DEFAULT_NAME); - }}); - - @SuppressWarnings("serial") private static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{ put(HTTP_BASIC_AUTHENTICATION_ENABLED, Boolean.class); put(HTTPS_BASIC_AUTHENTICATION_ENABLED, Boolean.class); @@ -105,9 +107,24 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem private Server _server; + @ManagedAttributeField + private boolean _httpsSaslAuthenticationEnabled; + + @ManagedAttributeField + private boolean _httpSaslAuthenticationEnabled; + + @ManagedAttributeField + private boolean _httpsBasicAuthenticationEnabled; + + @ManagedAttributeField + private boolean _httpBasicAuthenticationEnabled; + + @ManagedAttributeField + private int _sessionTimeout; + public HttpManagement(UUID id, Broker broker, Map<String, Object> attributes) { - super(id, DEFAULTS, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES), broker); + super(id, Collections.<String,Object>emptyMap(), attributes, broker); } @Override @@ -165,7 +182,7 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem public int getSessionTimeout() { - return (Integer)getAttribute(TIME_OUT); + return _sessionTimeout; } @SuppressWarnings("unchecked") @@ -201,8 +218,8 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem throw new IllegalConfigurationException("Key store is not configured. Cannot start management on HTTPS port without keystore"); } SslContextFactory factory = new SslContextFactory(); - final boolean needClientAuth = Boolean.valueOf(String.valueOf(port.getAttribute(Port.NEED_CLIENT_AUTH))); - final boolean wantClientAuth = Boolean.valueOf(String.valueOf(port.getAttribute(Port.WANT_CLIENT_AUTH))); + final boolean needClientAuth = port instanceof PortWithAuthProvider && ((PortWithAuthProvider)port).getNeedClientAuth(); + final boolean wantClientAuth = port instanceof PortWithAuthProvider && ((PortWithAuthProvider)port).getWantClientAuth(); boolean needClientCert = needClientAuth || wantClientAuth; if (needClientCert && trustStores.isEmpty()) { @@ -419,25 +436,25 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem @Override public boolean isHttpsSaslAuthenticationEnabled() { - return (Boolean)getAttribute(HTTPS_SASL_AUTHENTICATION_ENABLED); + return _httpsSaslAuthenticationEnabled; } @Override public boolean isHttpSaslAuthenticationEnabled() { - return (Boolean)getAttribute(HTTP_SASL_AUTHENTICATION_ENABLED); + return _httpSaslAuthenticationEnabled; } @Override public boolean isHttpsBasicAuthenticationEnabled() { - return (Boolean)getAttribute(HTTPS_BASIC_AUTHENTICATION_ENABLED); + return _httpsBasicAuthenticationEnabled; } @Override public boolean isHttpBasicAuthenticationEnabled() { - return (Boolean)getAttribute(HTTP_BASIC_AUTHENTICATION_ENABLED); + return _httpBasicAuthenticationEnabled; } @Override @@ -475,10 +492,4 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem } } - - @Override - public String getPluginType() - { - return PLUGIN_TYPE; - } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java index 227271d439..aebe76b9bd 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java @@ -23,26 +23,24 @@ package org.apache.qpid.server.management.plugin; import java.net.SocketAddress; import org.apache.qpid.server.model.AuthenticationProvider; -import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttribute; -import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Plugin; public interface HttpManagementConfiguration<X extends HttpManagementConfiguration<X>> extends Plugin<X> { - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "true" ) boolean isHttpsSaslAuthenticationEnabled(); - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "true" ) boolean isHttpSaslAuthenticationEnabled(); - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "true" ) boolean isHttpsBasicAuthenticationEnabled(); - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "false" ) boolean isHttpBasicAuthenticationEnabled(); - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "600" ) public int getSessionTimeout(); AuthenticationProvider getAuthenticationProvider(SocketAddress localAddress); diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementFactoryTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementFactoryTest.java index 2fd057437a..2cb611d382 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementFactoryTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementFactoryTest.java @@ -18,15 +18,15 @@ */ package org.apache.qpid.server.management.plugin; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.test.utils.QpidTestCase; +import static org.mockito.Mockito.mock; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import static org.mockito.Mockito.mock; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.test.utils.QpidTestCase; public class HttpManagementFactoryTest extends QpidTestCase { @@ -40,11 +40,13 @@ public class HttpManagementFactoryTest extends QpidTestCase public void testCreateInstance() throws Exception { + _attributes.put(ConfiguredObject.NAME, getName()); _attributes.put(ConfiguredObject.TYPE, HttpManagement.PLUGIN_TYPE); _attributes.put(HttpManagement.TIME_OUT, SESSION_TIMEOUT); _attributes.put(ConfiguredObject.ID, _id); HttpManagement management = _pluginFactory.createInstance(_attributes, _broker); + management.open(); assertEquals(_broker, management.getParent(Broker.class)); assertEquals(SESSION_TIMEOUT, management.getSessionTimeout()); diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java index d0a357fd28..ff96a4223e 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java @@ -31,7 +31,6 @@ import java.util.UUID; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.security.SubjectCreator; import org.apache.qpid.test.utils.QpidTestCase; public class HttpManagementTest extends QpidTestCase @@ -54,6 +53,7 @@ public class HttpManagementTest extends QpidTestCase attributes.put(HttpManagement.NAME, getTestName()); attributes.put(HttpManagement.TIME_OUT, 10000l); _management = new HttpManagement(_id, _broker, attributes); + _management.open(); } public void testGetSessionTimeout() 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 53eacf18d1..2d656a992a 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,6 +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.Map; import java.util.UUID; @@ -44,6 +45,7 @@ import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider; import org.apache.qpid.server.model.Port; @@ -71,13 +73,6 @@ public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implemen public static final boolean DEFAULT_USE_PLATFORM_MBEAN_SERVER = true; @SuppressWarnings("serial") - private static final Map<String, Object> DEFAULTS = new HashMap<String, Object>(){{ - put(USE_PLATFORM_MBEAN_SERVER, DEFAULT_USE_PLATFORM_MBEAN_SERVER); - put(NAME, DEFAULT_NAME); - put(TYPE, PLUGIN_TYPE); - }}; - - @SuppressWarnings("serial") private static final Map<String, Type> ATTRIBUTE_TYPES = new HashMap<String, Type>(){{ put(USE_PLATFORM_MBEAN_SERVER, Boolean.class); put(NAME, String.class); @@ -89,9 +84,12 @@ public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implemen private final Map<ConfiguredObject, AMQManagedObject> _children = new HashMap<ConfiguredObject, AMQManagedObject>(); + @ManagedAttributeField + private boolean _usePlatformMBeanServer; + public JMXManagement(UUID id, Broker broker, Map<String, Object> attributes) { - super(id, DEFAULTS, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES), broker); + super(id, Collections.<String,Object>emptyMap(), attributes, broker); } @Override @@ -363,15 +361,9 @@ public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implemen } } - @Override - public String getPluginType() - { - return PLUGIN_TYPE; - } - - @ManagedAttribute + @ManagedAttribute( automate = true, defaultValue = "true" ) public boolean getUsePlatformMBeanServer() { - return (Boolean)getAttribute(USE_PLATFORM_MBEAN_SERVER); + return _usePlatformMBeanServer; } } diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/JMXManagementFactoryTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/JMXManagementFactoryTest.java index d0da48fb3a..e1e3db763c 100644 --- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/JMXManagementFactoryTest.java +++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/JMXManagementFactoryTest.java @@ -39,13 +39,13 @@ public class JMXManagementFactoryTest extends QpidTestCase { _attributes.put(ConfiguredObject.ID,UUID.randomUUID()); _attributes.put(ConfiguredObject.TYPE, JMXManagement.PLUGIN_TYPE); + _attributes.put(ConfiguredObject.NAME, getName()); JMXManagement jmxManagement = _jmxManagementFactory.createInstance( _attributes, _broker); jmxManagement.open(); assertNotNull(jmxManagement); assertEquals("Unexpected plugin type", JMXManagement.PLUGIN_TYPE, jmxManagement.getType()); assertEquals("Unexpected default mbean platform", JMXManagement.DEFAULT_USE_PLATFORM_MBEAN_SERVER, jmxManagement.getAttribute(JMXManagement.USE_PLATFORM_MBEAN_SERVER)); - assertEquals("Unexpected default name", JMXManagement.DEFAULT_NAME, jmxManagement.getAttribute(JMXManagement.NAME)); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java index c3c8e58cc7..e58fa0c45d 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java @@ -44,6 +44,7 @@ import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.model.TrustStore; +import org.apache.qpid.server.security.FileTrustStore; import org.apache.qpid.test.utils.JMXTestUtils; import org.apache.qpid.test.utils.QpidBrokerTestCase; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -199,9 +200,9 @@ public class ExternalAuthenticationTest extends QpidBrokerTestCase //add the peersOnly store to the config Map<String, Object> sslTrustStoreAttributes = new HashMap<String, Object>(); sslTrustStoreAttributes.put(TrustStore.NAME, peerStoreName); - sslTrustStoreAttributes.put(TrustStore.PATH, BROKER_PEERSTORE); - sslTrustStoreAttributes.put(TrustStore.PASSWORD, BROKER_PEERSTORE_PASSWORD); - sslTrustStoreAttributes.put(TrustStore.PEERS_ONLY, true); + sslTrustStoreAttributes.put(FileTrustStore.PATH, BROKER_PEERSTORE); + sslTrustStoreAttributes.put(FileTrustStore.PASSWORD, BROKER_PEERSTORE_PASSWORD); + sslTrustStoreAttributes.put(FileTrustStore.PEERS_ONLY, true); getBrokerConfiguration().addObjectConfiguration(TrustStore.class, sslTrustStoreAttributes); super.setUp(); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/HttpManagementRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/HttpManagementRestTest.java index ab38d77b6c..fcf969e979 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/HttpManagementRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/HttpManagementRestTest.java @@ -38,11 +38,11 @@ public class HttpManagementRestTest extends QpidRestTestCase details.get(HttpManagement.TIME_OUT)); assertEquals("Unexpected http basic auth enabled", true, details.get(HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected https basic auth enabled", HttpManagement.DEFAULT_HTTPS_BASIC_AUTHENTICATION_ENABLED, + assertEquals("Unexpected https basic auth enabled", true, details.get(HttpManagement.HTTPS_BASIC_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected http sasl auth enabled", HttpManagement.DEFAULT_HTTP_SASL_AUTHENTICATION_ENABLED, + assertEquals("Unexpected http sasl auth enabled", true, details.get(HttpManagement.HTTP_SASL_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected https sasl auth enabled", HttpManagement.DEFAULT_HTTPS_SASL_AUTHENTICATION_ENABLED, + assertEquals("Unexpected https sasl auth enabled", true, details.get(HttpManagement.HTTPS_SASL_AUTHENTICATION_ENABLED)); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java index 680f807a9b..834beb542c 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java @@ -30,10 +30,11 @@ import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Transport; -import org.apache.qpid.server.security.AbstractKeyStoreAdapter; +import org.apache.qpid.server.security.FileKeyStore; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestSSLConstants; @@ -107,8 +108,8 @@ public class KeyStoreRestTest extends QpidRestTestCase //add a new key store config to use Map<String, Object> sslKeyStoreAttributes = new HashMap<String, Object>(); sslKeyStoreAttributes.put(KeyStore.NAME, name); - sslKeyStoreAttributes.put(KeyStore.PATH, TestSSLConstants.BROKER_KEYSTORE); - sslKeyStoreAttributes.put(KeyStore.PASSWORD, TestSSLConstants.BROKER_KEYSTORE_PASSWORD); + sslKeyStoreAttributes.put(FileKeyStore.PATH, TestSSLConstants.BROKER_KEYSTORE); + sslKeyStoreAttributes.put(FileKeyStore.PASSWORD, TestSSLConstants.BROKER_KEYSTORE_PASSWORD); getBrokerConfiguration().addObjectConfiguration(KeyStore.class,sslKeyStoreAttributes); //add the SSL port using it @@ -152,7 +153,7 @@ public class KeyStoreRestTest extends QpidRestTestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, name); - attributes.put(KeyStore.PATH, TestSSLConstants.UNTRUSTED_KEYSTORE); + attributes.put(FileKeyStore.PATH, TestSSLConstants.UNTRUSTED_KEYSTORE); int responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + name , "PUT", attributes); assertEquals("Unexpected response code for keystore update", 200, responseCode); @@ -175,7 +176,7 @@ public class KeyStoreRestTest extends QpidRestTestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, name); - attributes.put(KeyStore.PATH, "does.not.exist"); + attributes.put(FileKeyStore.PATH, "does.not.exist"); int responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + name , "PUT", attributes); assertEquals("Unexpected response code for keystore update", 409, responseCode); @@ -204,7 +205,7 @@ public class KeyStoreRestTest extends QpidRestTestCase //Update the certAlias from app1 to app2 Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, name); - attributes.put(KeyStore.CERTIFICATE_ALIAS, "app2"); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, "app2"); int responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + name , "PUT", attributes); assertEquals("Unexpected response code for keystore update", 200, responseCode); @@ -217,7 +218,7 @@ public class KeyStoreRestTest extends QpidRestTestCase //Update the certAlias to clear it (i.e go from from app1 to null) attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, name); - attributes.put(KeyStore.CERTIFICATE_ALIAS, null); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, null); responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + name , "PUT", attributes); assertEquals("Unexpected response code for keystore update", 200, responseCode); @@ -242,9 +243,9 @@ public class KeyStoreRestTest extends QpidRestTestCase { Map<String, Object> keyStoreAttributes = new HashMap<String, Object>(); keyStoreAttributes.put(KeyStore.NAME, name); - keyStoreAttributes.put(KeyStore.PATH, TestSSLConstants.KEYSTORE); - keyStoreAttributes.put(KeyStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); - keyStoreAttributes.put(KeyStore.CERTIFICATE_ALIAS, certAlias); + keyStoreAttributes.put(FileKeyStore.PATH, TestSSLConstants.KEYSTORE); + keyStoreAttributes.put(FileKeyStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); + keyStoreAttributes.put(FileKeyStore.CERTIFICATE_ALIAS, certAlias); int responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + name, "PUT", keyStoreAttributes); assertEquals("Unexpected response code", 201, responseCode); @@ -255,17 +256,17 @@ public class KeyStoreRestTest extends QpidRestTestCase assertEquals("default systests key store is missing", name, keystore.get(KeyStore.NAME)); assertEquals("unexpected path to key store", - path, keystore.get(KeyStore.PATH)); + path, keystore.get(FileKeyStore.PATH)); assertEquals("unexpected (dummy) password of default systests key store", - AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK, keystore.get(KeyStore.PASSWORD)); + AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.PASSWORD)); assertEquals("unexpected type of default systests key store", - java.security.KeyStore.getDefaultType(), keystore.get(KeyStore.KEY_STORE_TYPE)); + java.security.KeyStore.getDefaultType(), keystore.get(FileKeyStore.KEY_STORE_TYPE)); assertEquals("unexpected certificateAlias value", - certAlias, keystore.get(KeyStore.CERTIFICATE_ALIAS)); + certAlias, keystore.get(FileKeyStore.CERTIFICATE_ALIAS)); if(certAlias == null) { assertFalse("should not be a certificateAlias attribute", - keystore.containsKey(KeyStore.CERTIFICATE_ALIAS)); + keystore.containsKey(FileKeyStore.CERTIFICATE_ALIAS)); } } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java index 3d1a0af9eb..d50da1c1f9 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java @@ -30,10 +30,11 @@ import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.model.TrustStore; -import org.apache.qpid.server.security.AbstractKeyStoreAdapter; +import org.apache.qpid.server.security.FileTrustStore; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestSSLConstants; @@ -105,8 +106,8 @@ public class TrustStoreRestTest extends QpidRestTestCase //add a new trust store config to use Map<String, Object> sslTrustStoreAttributes = new HashMap<String, Object>(); sslTrustStoreAttributes.put(TrustStore.NAME, name); - sslTrustStoreAttributes.put(TrustStore.PATH, TestSSLConstants.TRUSTSTORE); - sslTrustStoreAttributes.put(TrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD); + sslTrustStoreAttributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE); + sslTrustStoreAttributes.put(FileTrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD); getBrokerConfiguration().addObjectConfiguration(TrustStore.class,sslTrustStoreAttributes); //add the SSL port using it @@ -151,7 +152,7 @@ public class TrustStoreRestTest extends QpidRestTestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, name); - attributes.put(TrustStore.PATH, TestSSLConstants.TRUSTSTORE); + attributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE); int responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + name , "PUT", attributes); assertEquals("Unexpected response code for truststore update", 200, responseCode); @@ -174,7 +175,7 @@ public class TrustStoreRestTest extends QpidRestTestCase Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, name); - attributes.put(TrustStore.PATH, "does.not.exist"); + attributes.put(FileTrustStore.PATH, "does.not.exist"); int responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + name , "PUT", attributes); assertEquals("Unexpected response code for trust store update", 409, responseCode); @@ -199,7 +200,7 @@ public class TrustStoreRestTest extends QpidRestTestCase //update the peersOnly attribute from false to true Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, name); - attributes.put(TrustStore.PEERS_ONLY, true); + attributes.put(FileTrustStore.PEERS_ONLY, true); int responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + name , "PUT", attributes); assertEquals("Unexpected response code for trust store update", 200, responseCode); @@ -212,7 +213,7 @@ public class TrustStoreRestTest extends QpidRestTestCase //Update peersOnly to clear it (i.e go from from true to null, which will default to false) attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, name); - attributes.put(TrustStore.PEERS_ONLY, null); + attributes.put(FileTrustStore.PEERS_ONLY, null); responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + name , "PUT", attributes); assertEquals("Unexpected response code for trust store update", 200, responseCode); @@ -238,9 +239,9 @@ public class TrustStoreRestTest extends QpidRestTestCase Map<String, Object> trustStoreAttributes = new HashMap<String, Object>(); trustStoreAttributes.put(TrustStore.NAME, name); //deliberately using the client trust store to differentiate from the one we are already for broker - trustStoreAttributes.put(TrustStore.PATH, TestSSLConstants.TRUSTSTORE); - trustStoreAttributes.put(TrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD); - trustStoreAttributes.put(TrustStore.PEERS_ONLY, peersOnly); + trustStoreAttributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE); + trustStoreAttributes.put(FileTrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD); + trustStoreAttributes.put(FileTrustStore.PEERS_ONLY, peersOnly); int responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + name, "PUT", trustStoreAttributes); assertEquals("Unexpected response code", 201, responseCode); @@ -251,12 +252,12 @@ public class TrustStoreRestTest extends QpidRestTestCase assertEquals("default systests trust store is missing", name, truststore.get(TrustStore.NAME)); assertEquals("unexpected path to trust store", - path, truststore.get(TrustStore.PATH)); + path, truststore.get(FileTrustStore.PATH)); assertEquals("unexpected (dummy) password of default systests trust store", - AbstractKeyStoreAdapter.DUMMY_PASSWORD_MASK, truststore.get(TrustStore.PASSWORD)); + AbstractConfiguredObject.SECURED_STRING_VALUE, truststore.get(FileTrustStore.PASSWORD)); assertEquals("unexpected type of default systests trust store", - java.security.KeyStore.getDefaultType(), truststore.get(TrustStore.TRUST_STORE_TYPE)); + java.security.KeyStore.getDefaultType(), truststore.get(FileTrustStore.TRUST_STORE_TYPE)); assertEquals("unexpected peersOnly value", - peersOnly, truststore.get(TrustStore.PEERS_ONLY)); + peersOnly, truststore.get(FileTrustStore.PEERS_ONLY)); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java index 37b705f2f3..1a39d9c3b0 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java @@ -41,6 +41,8 @@ import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.TrustStore; import org.apache.qpid.server.model.VirtualHost; +import org.apache.qpid.server.security.FileKeyStore; +import org.apache.qpid.server.security.FileTrustStore; import org.apache.qpid.server.security.access.FileAccessControlProviderConstants; import org.apache.qpid.server.security.acl.AbstractACLTestCase; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManagerFactory; @@ -433,16 +435,16 @@ public class BrokerACLTest extends QpidRestTestCase assertKeyStoreExistence(keyStoreName, true); Map<String, Object> keyStore = getRestTestHelper().getJsonAsSingletonList("/rest/keystore/" + keyStoreName); - assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(KeyStore.CERTIFICATE_ALIAS)); + assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(FileKeyStore.CERTIFICATE_ALIAS)); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, keyStoreName); - attributes.put(KeyStore.CERTIFICATE_ALIAS, updatedCertAlias); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, updatedCertAlias); responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + keyStoreName, "PUT", attributes); assertEquals("Setting of keystore attributes should be allowed", 200, responseCode); keyStore = getRestTestHelper().getJsonAsSingletonList("/rest/keystore/" + keyStoreName); - assertEquals("Unexpected certificateAlias attribute value", updatedCertAlias, keyStore.get(KeyStore.CERTIFICATE_ALIAS)); + assertEquals("Unexpected certificateAlias attribute value", updatedCertAlias, keyStore.get(FileKeyStore.CERTIFICATE_ALIAS)); } public void testSetKeyStoreAttributesDenied() throws Exception @@ -460,18 +462,18 @@ public class BrokerACLTest extends QpidRestTestCase assertKeyStoreExistence(keyStoreName, true); Map<String, Object> keyStore = getRestTestHelper().getJsonAsSingletonList("/rest/keystore/" + keyStoreName); - assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(KeyStore.CERTIFICATE_ALIAS)); + assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(FileKeyStore.CERTIFICATE_ALIAS)); getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(KeyStore.NAME, keyStoreName); - attributes.put(KeyStore.CERTIFICATE_ALIAS, updatedCertAlias); + attributes.put(FileKeyStore.CERTIFICATE_ALIAS, updatedCertAlias); responseCode = getRestTestHelper().submitRequest("/rest/keystore/" + keyStoreName, "PUT", attributes); assertEquals("Setting of keystore attributes should be denied", 403, responseCode); keyStore = getRestTestHelper().getJsonAsSingletonList("/rest/keystore/" + keyStoreName); - assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(KeyStore.CERTIFICATE_ALIAS)); + assertEquals("Unexpected certificateAlias attribute value", initialCertAlias, keyStore.get(FileKeyStore.CERTIFICATE_ALIAS)); } /* === TrustStore === */ @@ -561,16 +563,16 @@ public class BrokerACLTest extends QpidRestTestCase assertTrustStoreExistence(trustStoreName, true); Map<String, Object> trustStore = getRestTestHelper().getJsonAsSingletonList("/rest/truststore/" + trustStoreName); - assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(TrustStore.PEERS_ONLY)); + assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(FileTrustStore.PEERS_ONLY)); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, trustStoreName); - attributes.put(TrustStore.PEERS_ONLY, updatedPeersOnly); + attributes.put(FileTrustStore.PEERS_ONLY, updatedPeersOnly); responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + trustStoreName, "PUT", attributes); assertEquals("Setting of truststore attributes should be allowed", 200, responseCode); trustStore = getRestTestHelper().getJsonAsSingletonList("/rest/truststore/" + trustStoreName); - assertEquals("Unexpected peersOnly attribute value", updatedPeersOnly, trustStore.get(TrustStore.PEERS_ONLY)); + assertEquals("Unexpected peersOnly attribute value", updatedPeersOnly, trustStore.get(FileTrustStore.PEERS_ONLY)); } public void testSetTrustStoreAttributesDenied() throws Exception @@ -588,18 +590,18 @@ public class BrokerACLTest extends QpidRestTestCase assertTrustStoreExistence(trustStoreName, true); Map<String, Object> trustStore = getRestTestHelper().getJsonAsSingletonList("/rest/truststore/" + trustStoreName); - assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(TrustStore.PEERS_ONLY)); + assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(FileTrustStore.PEERS_ONLY)); getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(TrustStore.NAME, trustStoreName); - attributes.put(TrustStore.PEERS_ONLY, updatedPeersOnly); + attributes.put(FileTrustStore.PEERS_ONLY, updatedPeersOnly); responseCode = getRestTestHelper().submitRequest("/rest/truststore/" + trustStoreName, "PUT", attributes); assertEquals("Setting of truststore attributes should be denied", 403, responseCode); trustStore = getRestTestHelper().getJsonAsSingletonList("/rest/truststore/" + trustStoreName); - assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(TrustStore.PEERS_ONLY)); + assertEquals("Unexpected peersOnly attribute value", initialPeersOnly, trustStore.get(FileTrustStore.PEERS_ONLY)); } /* === Broker === */ @@ -928,11 +930,11 @@ public class BrokerACLTest extends QpidRestTestCase details.get(HttpManagement.TIME_OUT)); assertEquals("Unexpected http basic auth enabled", true, details.get(HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected https basic auth enabled", HttpManagement.DEFAULT_HTTPS_BASIC_AUTHENTICATION_ENABLED, + assertEquals("Unexpected https basic auth enabled", true, details.get(HttpManagement.HTTPS_BASIC_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected http sasl auth enabled", HttpManagement.DEFAULT_HTTP_SASL_AUTHENTICATION_ENABLED, + assertEquals("Unexpected http sasl auth enabled", true, details.get(HttpManagement.HTTP_SASL_AUTHENTICATION_ENABLED)); - assertEquals("Unexpected https sasl auth enabled", HttpManagement.DEFAULT_HTTPS_SASL_AUTHENTICATION_ENABLED, + assertEquals("Unexpected https sasl auth enabled", true, details.get(HttpManagement.HTTPS_SASL_AUTHENTICATION_ENABLED)); } @@ -1041,9 +1043,9 @@ public class BrokerACLTest extends QpidRestTestCase { Map<String, Object> keyStoreAttributes = new HashMap<String, Object>(); keyStoreAttributes.put(KeyStore.NAME, name); - keyStoreAttributes.put(KeyStore.PATH, TestSSLConstants.KEYSTORE); - keyStoreAttributes.put(KeyStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); - keyStoreAttributes.put(KeyStore.CERTIFICATE_ALIAS, certAlias); + keyStoreAttributes.put(FileKeyStore.PATH, TestSSLConstants.KEYSTORE); + keyStoreAttributes.put(FileKeyStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); + keyStoreAttributes.put(FileKeyStore.CERTIFICATE_ALIAS, certAlias); return getRestTestHelper().submitRequest("/rest/keystore/" + name, "PUT", keyStoreAttributes); } @@ -1052,9 +1054,9 @@ public class BrokerACLTest extends QpidRestTestCase { Map<String, Object> trustStoreAttributes = new HashMap<String, Object>(); trustStoreAttributes.put(TrustStore.NAME, name); - trustStoreAttributes.put(TrustStore.PATH, TestSSLConstants.KEYSTORE); - trustStoreAttributes.put(TrustStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); - trustStoreAttributes.put(TrustStore.PEERS_ONLY, peersOnly); + trustStoreAttributes.put(FileTrustStore.PATH, TestSSLConstants.KEYSTORE); + trustStoreAttributes.put(FileTrustStore.PASSWORD, TestSSLConstants.KEYSTORE_PASSWORD); + trustStoreAttributes.put(FileTrustStore.PEERS_ONLY, peersOnly); return getRestTestHelper().submitRequest("/rest/truststore/" + name, "PUT", trustStoreAttributes); } |
