diff options
| author | Andrew MacBean <macbean@apache.org> | 2014-06-26 11:19:54 +0000 |
|---|---|---|
| committer | Andrew MacBean <macbean@apache.org> | 2014-06-26 11:19:54 +0000 |
| commit | 8a1190a3bc398233b3cb9a295add11eef0f3cec4 (patch) | |
| tree | 15ecfb671967401f81b9dce15e46aa9f1a33489c | |
| parent | 4ad072fd1cca374bcf36292bcf83aba74f18f08c (diff) | |
| download | qpid-python-8a1190a3bc398233b3cb9a295add11eef0f3cec4.tar.gz | |
QPID-5821: [Java Broker] Refactor MessageStore and DurableConfigurationStore interfaces to remove message store settings map.
VirtualHost model objects now have attributes.
Work done by Keith Wall <kwall@apache.org> and me.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1605737 13f79535-47bb-0310-9956-ffa450edef68
86 files changed, 1004 insertions, 613 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java index e8555dd819..7fb973d089 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java @@ -46,6 +46,7 @@ import org.apache.qpid.server.store.ConfiguredObjectRecord; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreProvider; +import org.apache.qpid.server.store.SizeMonitorSettings; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.berkeleydb.entry.HierarchyKey; import org.apache.qpid.server.store.berkeleydb.tuple.ConfiguredObjectBinding; @@ -89,7 +90,7 @@ public class BDBConfigurationStore implements MessageStoreProvider, DurableConfi } @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) { if (_configurationStoreOpen.compareAndSet(false, true)) { @@ -97,7 +98,7 @@ public class BDBConfigurationStore implements MessageStoreProvider, DurableConfi if (_environmentFacade == null) { - _environmentFacade = _environmentFacadeFactory.createEnvironmentFacade(parent, storeSettings); + _environmentFacade = _environmentFacadeFactory.createEnvironmentFacade(parent); _storeLocation = _environmentFacade.getStoreLocation(); } else @@ -500,23 +501,15 @@ public class BDBConfigurationStore implements MessageStoreProvider, DurableConfi private ConfiguredObject<?> _parent; @Override - public void openMessageStore(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + public void openMessageStore(final ConfiguredObject<?> parent) { if (_messageStoreOpen.compareAndSet(false, true)) { _parent = parent; - Object overfullAttr = messageStoreSettings.get(OVERFULL_SIZE); - Object underfullAttr = messageStoreSettings.get(UNDERFULL_SIZE); - - _persistentSizeHighThreshold = overfullAttr == null ? -1l : - overfullAttr instanceof Number - ? ((Number) overfullAttr).longValue() - : Long.parseLong(overfullAttr.toString()); - _persistentSizeLowThreshold = underfullAttr == null ? _persistentSizeHighThreshold : - underfullAttr instanceof Number - ? ((Number) underfullAttr).longValue() - : Long.parseLong(underfullAttr.toString()); + final SizeMonitorSettings sizeMonitorSettings = (SizeMonitorSettings) parent; + _persistentSizeHighThreshold = sizeMonitorSettings.getStoreOverfullSize(); + _persistentSizeLowThreshold = sizeMonitorSettings.getStoreUnderfullSize(); if (_persistentSizeLowThreshold > _persistentSizeHighThreshold || _persistentSizeLowThreshold < 0l) { diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java index c3969090be..5b7573c17f 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java @@ -21,13 +21,13 @@ package org.apache.qpid.server.store.berkeleydb; import java.io.File; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import com.sleepycat.je.DatabaseException; import org.apache.log4j.Logger; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.store.SizeMonitorSettings; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.util.FileUtils; @@ -61,26 +61,22 @@ public class BDBMessageStore extends AbstractBDBMessageStore } @Override - public void openMessageStore(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + public void openMessageStore(final ConfiguredObject<?> parent) { if (_messageStoreOpen.compareAndSet(false, true)) { _parent = parent; - Object overfullAttr = messageStoreSettings.get(OVERFULL_SIZE); - Object underfullAttr = messageStoreSettings.get(UNDERFULL_SIZE); + final SizeMonitorSettings sizeMonitorSettings = (SizeMonitorSettings) parent; + _persistentSizeHighThreshold = sizeMonitorSettings.getStoreOverfullSize(); + _persistentSizeLowThreshold = sizeMonitorSettings.getStoreUnderfullSize(); - _persistentSizeHighThreshold = overfullAttr == null ? -1l : - overfullAttr instanceof Number ? ((Number) overfullAttr).longValue() : Long.parseLong(overfullAttr.toString()); - _persistentSizeLowThreshold = underfullAttr == null ? _persistentSizeHighThreshold : - underfullAttr instanceof Number ? ((Number) underfullAttr).longValue() : Long.parseLong(underfullAttr.toString()); - - if(_persistentSizeLowThreshold > _persistentSizeHighThreshold || _persistentSizeLowThreshold < 0l) + if (_persistentSizeLowThreshold > _persistentSizeHighThreshold || _persistentSizeLowThreshold < 0l) { _persistentSizeLowThreshold = _persistentSizeHighThreshold; } - _environmentFacade = _environmentFacadeFactory.createEnvironmentFacade(parent, messageStoreSettings); + _environmentFacade = _environmentFacadeFactory.createEnvironmentFacade(parent); _storeLocation = _environmentFacade.getStoreLocation(); } } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacadeFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacadeFactory.java index 3a4ace2238..39f8827754 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacadeFactory.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacadeFactory.java @@ -26,7 +26,6 @@ import org.apache.qpid.server.model.ConfiguredObject; public interface EnvironmentFacadeFactory { - EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent, - Map<String, Object> storeSettings); + EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/MessageStoreProvidingVirtualHostNode.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/HASettings.java index 4cb85dafd4..31e9987182 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/MessageStoreProvidingVirtualHostNode.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/HASettings.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,17 +15,23 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.qpid.server.virtualhostnode; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.MessageStore; +package org.apache.qpid.server.store.berkeleydb; -@ManagedObject( category = false ) -public interface MessageStoreProvidingVirtualHostNode<X extends MessageStoreProvidingVirtualHostNode<X>> - extends VirtualHostNode<X> +import org.apache.qpid.server.store.FileBasedSettings; + +public interface HASettings extends FileBasedSettings { - MessageStore getProvidedMessageStore(); + String getGroupName(); + + String getAddress(); + + String getHelperAddress(); + + boolean isDesignatedPrimary(); + + int getPriority(); + + int getQuorumOverride(); } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java index 9c760d12e3..ab0d1ab9ef 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java @@ -28,17 +28,16 @@ import com.sleepycat.je.config.ConfigParam; import com.sleepycat.je.config.EnvironmentParams; import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.FileBasedSettings; public class StandardEnvironmentFacadeFactory implements EnvironmentFacadeFactory { - @SuppressWarnings("unchecked") @Override - public EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent, - final Map<String, Object> messageStoreSettings) + public EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent) { - final String storeLocation = (String) messageStoreSettings.get(MessageStore.STORE_PATH); + final FileBasedSettings settings = (FileBasedSettings)parent; + final String storeLocation = settings.getStorePath(); StandardEnvironmentConfiguration sec = new StandardEnvironmentConfiguration() { diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeFactory.java index 6bab0db62b..d7b01bc829 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeFactory.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeFactory.java @@ -30,25 +30,27 @@ import com.sleepycat.je.config.EnvironmentParams; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.store.berkeleydb.EnvironmentFacade; import org.apache.qpid.server.store.berkeleydb.EnvironmentFacadeFactory; -import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; +import org.apache.qpid.server.store.berkeleydb.HASettings; public class ReplicatedEnvironmentFacadeFactory implements EnvironmentFacadeFactory { @Override - public EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + public EnvironmentFacade createEnvironmentFacade(final ConfiguredObject<?> parent) { + final HASettings settings = (HASettings) parent; + ReplicatedEnvironmentConfiguration configuration = new ReplicatedEnvironmentConfiguration() { @Override public boolean isDesignatedPrimary() { - return (Boolean)messageStoreSettings.get(BDBHAVirtualHostNode.DESIGNATED_PRIMARY); + return settings.isDesignatedPrimary(); } @Override public String getStorePath() { - return (String) messageStoreSettings.get(BDBHAVirtualHostNode.STORE_PATH); + return settings.getStorePath(); } @Override @@ -66,37 +68,37 @@ public class ReplicatedEnvironmentFacadeFactory implements EnvironmentFacadeFact @Override public int getQuorumOverride() { - return (Integer)messageStoreSettings.get(BDBHAVirtualHostNode.QUORUM_OVERRIDE); + return settings.getQuorumOverride(); } @Override public int getPriority() { - return (Integer)messageStoreSettings.get(BDBHAVirtualHostNode.PRIORITY); + return settings.getPriority(); } @Override public String getName() { - return (String)messageStoreSettings.get(BDBHAVirtualHostNode.NAME); + return parent.getName(); } @Override public String getHostPort() { - return (String)messageStoreSettings.get(BDBHAVirtualHostNode.ADDRESS); + return settings.getAddress(); } @Override public String getHelperHostPort() { - return (String)messageStoreSettings.get(BDBHAVirtualHostNode.HELPER_ADDRESS); + return settings.getHelperAddress(); } @Override public String getGroupName() { - return (String)messageStoreSettings.get(BDBHAVirtualHostNode.GROUP_NAME); + return settings.getGroupName(); } }; return new ReplicatedEnvironmentFacade(configuration); diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java index ab81755f53..74242df7c6 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java @@ -66,9 +66,6 @@ public class BDBHAReplicaVirtualHost extends AbstractConfiguredObject<BDBHARepli private final StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived; @ManagedAttributeField - private Map<String, Object> _messageStoreSettings; - - @ManagedAttributeField private boolean _queue_deadLetterQueueEnabled; @ManagedAttributeField @@ -220,12 +217,6 @@ public class BDBHAReplicaVirtualHost extends AbstractConfiguredObject<BDBHARepli } @Override - public Map<String, Object> getMessageStoreSettings() - { - return null; - } - - @Override public long getQueueCount() { return 0; diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java index 8cecbe172e..600aa66be6 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java @@ -24,14 +24,16 @@ import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.DerivedAttribute; import org.apache.qpid.server.model.ManagedAttribute; import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.store.SizeMonitorSettings; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -public interface BDBHAVirtualHost<X extends BDBHAVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>> +public interface BDBHAVirtualHost<X extends BDBHAVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, SizeMonitorSettings { String REMOTE_TRANSACTION_SYNCHRONIZATION_POLICY = "remoteTransactionSynchronizationPolicy"; String LOCAL_TRANSACTION_SYNCHRONIZATION_POLICY = "localTransactionSynchronizationPolicy"; String COALESCING_SYNC = "coalescingSync"; String DURABILITY = "durability"; + String STORE_PATH = "storePath"; @ManagedAttribute( defaultValue = "SYNC") String getLocalTransactionSynchronizationPolicy(); @@ -44,4 +46,10 @@ public interface BDBHAVirtualHost<X extends BDBHAVirtualHost<X>> extends Virtual @DerivedAttribute String getDurability(); + + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreUnderfullSize(); + + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreOverfullSize(); } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHostImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHostImpl.java index d28435b484..ba210b470c 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHostImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHostImpl.java @@ -35,10 +35,10 @@ import org.apache.qpid.server.virtualhost.AbstractVirtualHost; import com.sleepycat.je.Durability.SyncPolicy; -@ManagedObject( category = false, type = "BDB_HA" ) +@ManagedObject( category = false, type = BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE ) public class BDBHAVirtualHostImpl extends AbstractVirtualHost<BDBHAVirtualHostImpl> implements BDBHAVirtualHost<BDBHAVirtualHostImpl> { - public static final String TYPE = "BDB_HA"; + public static final String VIRTUAL_HOST_TYPE = "BDB_HA"; private final BDBConfigurationStore _configurationStore; @@ -48,6 +48,12 @@ public class BDBHAVirtualHostImpl extends AbstractVirtualHost<BDBHAVirtualHostIm @ManagedAttributeField private String _remoteTransactionSynchronizationPolicy; + @ManagedAttributeField + private Long _storeUnderfullSize; + + @ManagedAttributeField + private Long _storeOverfullSize; + @ManagedObjectFactoryConstructor public BDBHAVirtualHostImpl(final Map<String, Object> attributes, VirtualHostNode<?> virtualHostNode) { @@ -140,4 +146,16 @@ public class BDBHAVirtualHostImpl extends AbstractVirtualHost<BDBHAVirtualHostIm return (ReplicatedEnvironmentFacade) _configurationStore.getEnvironmentFacade(); } + @Override + public Long getStoreUnderfullSize() + { + return _storeUnderfullSize; + } + + @Override + public Long getStoreOverfullSize() + { + return _storeOverfullSize; + } + } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java index 7c2dcc507d..335b39def3 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,36 +15,27 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ + package org.apache.qpid.server.virtualhost.berkeleydb; -import java.util.Map; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore; -import org.apache.qpid.server.store.berkeleydb.BDBMessageStore; -import org.apache.qpid.server.virtualhost.AbstractVirtualHost; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.virtualhost.VirtualHostImpl; -@ManagedObject(category = false, type = BDBVirtualHost.VIRTUAL_HOST_TYPE) -public class BDBVirtualHost extends AbstractVirtualHost<BDBVirtualHost> +public interface BDBVirtualHost<X extends BDBVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, org.apache.qpid.server.store.FileBasedSettings, org.apache.qpid.server.store.SizeMonitorSettings { - public static final String VIRTUAL_HOST_TYPE = "BDB"; - @ManagedObjectFactoryConstructor - public BDBVirtualHost(final Map<String, Object> attributes, - final VirtualHostNode<?> virtualHostNode) - { - super(attributes, virtualHostNode); - } + String STORE_PATH = "storePath"; + + @ManagedAttribute(mandatory = true) + String getStorePath(); + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreUnderfullSize(); - @Override - protected MessageStore createMessageStore() - { - return new BDBMessageStore(); - } + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreOverfullSize(); } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java new file mode 100644 index 0000000000..ad1398ae76 --- /dev/null +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java @@ -0,0 +1,78 @@ +/* + * + * 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.virtualhost.berkeleydb; + +import java.util.Map; + +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.berkeleydb.BDBMessageStore; +import org.apache.qpid.server.virtualhost.AbstractVirtualHost; + +@ManagedObject(category = false, type = BDBVirtualHostImpl.VIRTUAL_HOST_TYPE) +public class BDBVirtualHostImpl extends AbstractVirtualHost<BDBVirtualHostImpl> implements BDBVirtualHost<BDBVirtualHostImpl> +{ + public static final String VIRTUAL_HOST_TYPE = "BDB"; + + @ManagedAttributeField + private String _storePath; + + @ManagedAttributeField + private Long _storeUnderfullSize; + + @ManagedAttributeField + private Long _storeOverfullSize; + + @ManagedObjectFactoryConstructor + public BDBVirtualHostImpl(final Map<String, Object> attributes, + final VirtualHostNode<?> virtualHostNode) + { + super(attributes, virtualHostNode); + } + + + @Override + protected MessageStore createMessageStore() + { + return new BDBMessageStore(); + } + + @Override + public String getStorePath() + { + return _storePath; + } + + @Override + public Long getStoreUnderfullSize() + { + return _storeUnderfullSize; + } + + @Override + public Long getStoreOverfullSize() + { + return _storeOverfullSize; + } +} diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java index fbf3041054..5e738e7701 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java @@ -24,8 +24,9 @@ import java.util.Map; import org.apache.qpid.server.model.DerivedAttribute; import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.store.berkeleydb.HASettings; -public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends BDBVirtualHostNode<X> +public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends BDBVirtualHostNode<X>, HASettings { public static final String GROUP_NAME = "groupName"; public static final String ADDRESS = "address"; @@ -35,7 +36,6 @@ public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends public static final String PRIORITY = "priority"; public static final String QUORUM_OVERRIDE = "quorumOverride"; public static final String ROLE = "role"; - public static final String REPLICATED_ENVIRONMENT_CONFIGURATION = "replicatedEnvironmentConfiguration"; public static final String LAST_KNOWN_REPLICATION_TRANSACTION_ID = "lastKnownReplicationTransactionId"; public static final String JOIN_TIME = "joinTime"; @@ -60,9 +60,6 @@ public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends @ManagedAttribute(persist = false) String getRole(); - @ManagedAttribute - Map<String, String> getReplicatedEnvironmentConfiguration(); - @DerivedAttribute Long getLastKnownReplicationTransactionId(); diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java index 74d273a660..cf1cea3efa 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java @@ -107,10 +107,6 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu @ManagedAttributeField(afterSet="postSetRole") private String _role; - @ManagedAttributeField - private Map<String, String> _replicatedEnvironmentConfiguration; - - @ManagedObjectFactoryConstructor public BDBHAVirtualHostNodeImpl(Map<String, Object> attributes, Broker<?> broker) { @@ -206,12 +202,6 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu return -1L; } - @Override - public Map<String, String> getReplicatedEnvironmentConfiguration() - { - return _replicatedEnvironmentConfiguration; - } - @SuppressWarnings("rawtypes") @Override public Collection<? extends RemoteReplicationNode> getRemoteReplicationNodes() @@ -264,9 +254,7 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu LOGGER.debug("Activating virtualhost node " + this); } - Map<String, Object> attributes = buildAttributesForStore(); - - getConfigurationStore().openConfigurationStore(this, attributes); + getConfigurationStore().openConfigurationStore(this); getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.CREATED()); getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.STORE_LOCATION(getStorePath())); diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java index 65a2fc1d30..763b59146b 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java @@ -20,11 +20,12 @@ */ package org.apache.qpid.server.virtualhostnode.berkeleydb; -import java.util.Map; - import org.apache.qpid.server.model.ManagedAttribute; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; -public interface BDBVirtualHostNode<X extends BDBVirtualHostNode<X>> extends FileBasedVirtualHostNode<X> +public interface BDBVirtualHostNode<X extends BDBVirtualHostNode<X>> extends org.apache.qpid.server.model.VirtualHostNode<X>, org.apache.qpid.server.store.FileBasedSettings { + String STORE_PATH = "storePath"; + + @ManagedAttribute(mandatory = true) + String getStorePath(); } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java index d37c626b57..27a2177b80 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.virtualhostnode.berkeleydb; import java.util.Map; +import org.apache.qpid.server.logging.messages.ConfigStoreMessages; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObject; @@ -45,6 +46,12 @@ public class BDBVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<BDBV } @Override + protected void writeLocationEventLog() + { + getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.STORE_LOCATION(getStorePath())); + } + + @Override protected DurableConfigurationStore createConfigurationStore() { return new BDBConfigurationStore(); diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java index 8657a3a0b1..e4e7286e5a 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java @@ -20,12 +20,26 @@ */ package org.apache.qpid.server.store.berkeleydb; +import org.apache.qpid.server.model.ConfiguredObjectFactory; +import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.AbstractDurableConfigurationStoreTestCase; import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBVirtualHostNode; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class BDBMessageStoreConfigurationTest extends AbstractDurableConfigurationStoreTestCase { @Override + protected VirtualHostNode createVirtualHostNode(String storeLocation, ConfiguredObjectFactory factory) + { + final BDBVirtualHostNode parent = mock(BDBVirtualHostNode.class); + when(parent.getStorePath()).thenReturn(storeLocation); + return parent; + } + + @Override protected DurableConfigurationStore createConfigStore() throws Exception { return new BDBConfigurationStore(); diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreQuotaEventsTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreQuotaEventsTest.java index 65fc0e9168..847f857491 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreQuotaEventsTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreQuotaEventsTest.java @@ -21,17 +21,17 @@ package org.apache.qpid.server.store.berkeleydb; import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import org.apache.log4j.Logger; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreQuotaEventsTestBase; +import org.apache.qpid.server.virtualhost.berkeleydb.BDBVirtualHost; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class BDBMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTestBase { - private static final Logger _logger = Logger.getLogger(BDBMessageStoreQuotaEventsTest.class); - /* * Notes on calculation of quota limits. * @@ -47,8 +47,8 @@ public class BDBMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTestB private static final int NUMBER_OF_MESSAGES_TO_OVERFILL_STORE = 150; - private static final int OVERFULL_SIZE = 4000000; // ~4MB - private static final int UNDERFULL_SIZE = 3500000; // ~3.5MB + private static final long OVERFULL_SIZE = 4000000; // ~4MB + private static final long UNDERFULL_SIZE = 3500000; // ~3.5MB @Override protected int getNumberOfMessagesToFillStore() @@ -56,24 +56,17 @@ public class BDBMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTestB return NUMBER_OF_MESSAGES_TO_OVERFILL_STORE; } - @Override - protected Map<String, Object>createStoreSettings(String storeLocation) + protected VirtualHost createVirtualHost(String storeLocation) { - _logger.debug("Applying store specific config. overfull-size=" + OVERFULL_SIZE + ", underfull-size=" + UNDERFULL_SIZE); - - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_PATH, storeLocation); - messageStoreSettings.put(MessageStore.OVERFULL_SIZE, OVERFULL_SIZE); - messageStoreSettings.put(MessageStore.UNDERFULL_SIZE, UNDERFULL_SIZE); - return messageStoreSettings; + final BDBVirtualHost parent = mock(BDBVirtualHost.class); + when(parent.getContext()).thenReturn(Collections.singletonMap("je.log.fileMax", MAX_BDB_LOG_SIZE)); + when(parent.getStorePath()).thenReturn(storeLocation); + when(parent.getStoreOverfullSize()).thenReturn(OVERFULL_SIZE); + when(parent.getStoreUnderfullSize()).thenReturn(UNDERFULL_SIZE); + return parent; } - @Override - protected Map<String, String> createContextSettings() - { - return Collections.singletonMap("je.log.fileMax", MAX_BDB_LOG_SIZE); - } @Override protected MessageStore createStore() throws Exception diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java index e40c6213cf..a96dc8b142 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java @@ -23,8 +23,6 @@ package org.apache.qpid.server.store.berkeleydb; import java.io.File; import java.nio.ByteBuffer; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicContentHeaderProperties; @@ -32,6 +30,7 @@ import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.MethodRegistry; import org.apache.qpid.framing.ProtocolVersion; import org.apache.qpid.framing.abstraction.MessagePublishInfo; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.protocol.v0_10.MessageMetaDataType_0_10; import org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10; import org.apache.qpid.server.protocol.v0_8.MessageMetaData; @@ -41,6 +40,7 @@ import org.apache.qpid.server.store.MessageStoreTestCase; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.StoredMessage; +import org.apache.qpid.server.virtualhost.berkeleydb.BDBVirtualHost; import org.apache.qpid.transport.DeliveryProperties; import org.apache.qpid.transport.Header; import org.apache.qpid.transport.MessageAcceptMode; @@ -50,7 +50,9 @@ import org.apache.qpid.transport.MessageDeliveryPriority; import org.apache.qpid.transport.MessageProperties; import org.apache.qpid.transport.MessageTransfer; import org.apache.qpid.util.FileUtils; -import org.apache.qpid.server.store.berkeleydb.BDBMessageStore; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Subclass of MessageStoreTestCase which runs the standard tests from the superclass against @@ -406,14 +408,14 @@ public class BDBMessageStoreTest extends MessageStoreTestCase @Override - protected Map<String, Object> getStoreSettings() throws Exception + protected VirtualHost createVirtualHost() { _storeLocation = TMP_FOLDER + File.separator + getTestName(); deleteStoreIfExists(); - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_PATH, _storeLocation); - return messageStoreSettings; + final BDBVirtualHost parent = mock(BDBVirtualHost.class); + when(parent.getStorePath()).thenReturn(_storeLocation); + return parent; } private void deleteStoreIfExists() diff --git a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java index 1ac4c681ff..209a5145e2 100644 --- a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java +++ b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java @@ -48,6 +48,7 @@ import org.apache.qpid.server.management.plugin.HttpManagement; import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeImpl; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java index 78adb46622..1bbeaaca9d 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java @@ -25,7 +25,6 @@ import java.io.IOException; import java.io.InputStream; import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; -import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Set; @@ -150,7 +149,7 @@ public class Broker store = new ManagementModeStoreHandler(store, options); } - store.openConfigurationStore(systemContext, Collections.<String, Object>emptyMap()); + store.openConfigurationStore(systemContext); _applicationRegistry = new ApplicationRegistry(store,systemContext); try diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java index 2ee4d3500b..db8af346a6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.configuration.store; import java.io.File; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Map; import java.util.UUID; @@ -144,7 +143,7 @@ public class JsonConfigurationEntryStore extends MemoryConfigurationEntryStore } }; - initialStore.openConfigurationStore(_parentObject, Collections.<String,Object>emptyMap()); + initialStore.openConfigurationStore(_parentObject); initialStore.visitConfiguredObjectRecords(replayHandler); update(true, records.toArray(new ConfiguredObjectRecord[records.size()])); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java index d5bbd51fe1..04ca68efae 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java @@ -73,11 +73,11 @@ public class ManagementModeStoreHandler implements DurableConfigurationStore } @Override - public void openConfigurationStore(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) + public void openConfigurationStore(final ConfiguredObject<?> parent) throws StoreException { _parent = parent; - _store.openConfigurationStore(parent,storeSettings); + _store.openConfigurationStore(parent); _records = new HashMap<UUID, ConfiguredObjectRecord>(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index d95d58a9cf..d13fb29c2b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -141,7 +141,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } }; - initialStore.openConfigurationStore(parentObject, Collections.<String,Object>emptyMap()); + initialStore.openConfigurationStore(parentObject); initialStore.visitConfiguredObjectRecords(replayHandler); update(true, records.toArray(new ConfiguredObjectRecord[records.size()])); @@ -344,7 +344,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } @Override - public void openConfigurationStore(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) + public void openConfigurationStore(final ConfiguredObject<?> parent) throws StoreException { _parent = parent; 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 f568422d99..e084ea0f1d 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 @@ -30,6 +30,7 @@ import java.lang.reflect.Proxy; import java.security.AccessControlException; import java.security.PrivilegedAction; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -308,7 +309,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im case 1: return candidates.iterator().next(); default: - throw new ServerScopedRuntimeException("The configured object class " + getClass().getSimpleName() + " implements no single common interface which extends ConfiguredObject"); + ArrayList<Class<? extends ConfiguredObject>> list = new ArrayList<>(candidates); + + throw new ServerScopedRuntimeException("The configured object class " + getClass().getSimpleName() + + " implements no single common interface which extends ConfiguredObject" + + " Identified candidates were : " + Arrays.toString(list.toArray())); } } 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 6608b57024..518141a21d 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 @@ -43,7 +43,6 @@ public interface VirtualHost<X extends VirtualHost<X, Q, E>, Q extends Queue<?>, String SUPPORTED_EXCHANGE_TYPES = "supportedExchangeTypes"; String SUPPORTED_QUEUE_TYPES = "supportedQueueTypes"; String HOUSE_KEEPING_THREAD_COUNT = "houseKeepingThreadCount"; - String MESSAGE_STORE_SETTINGS = "messageStoreSettings"; String MODEL_VERSION = "modelVersion"; // TODO - this isn't really an attribute @@ -104,9 +103,6 @@ public interface VirtualHost<X extends VirtualHost<X, Q, E>, Q extends Queue<?>, @ManagedAttribute( defaultValue = "${virtualhost.housekeepingThreadCount}") int getHousekeepingThreadCount(); - @ManagedAttribute - Map<String, Object> getMessageStoreSettings(); - @DerivedAttribute( persist = true ) String getModelVersion(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java index c6b350d65b..f2ab47bfbb 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java @@ -27,13 +27,14 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.store.jdbc.ConnectionProvider; public interface JDBCConnectionProviderFactory extends Pluggable { String getType(); - ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> storeSettings) + ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl) throws SQLException; static final class TYPES diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java index 48608dde4f..92184e9b81 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java @@ -22,7 +22,6 @@ package org.apache.qpid.server.store; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -73,7 +72,7 @@ abstract class AbstractMemoryStore implements DurableConfigurationStore, Message } @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) { } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java index e353b55e68..1efd415e6a 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java @@ -28,16 +28,12 @@ import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler; public interface DurableConfigurationStore { - String STORE_TYPE = "storeType"; - String STORE_PATH = "storePath"; - /** * Initializes and opens the configuration store. + * @param parent * - * @param parent - * @param storeSettings store settings */ - void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) throws StoreException; + void openConfigurationStore(ConfiguredObject<?> parent) throws StoreException; /** * Requests that the store performs any upgrade work on the store's structure. If there is no diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/FileBasedSettings.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/FileBasedSettings.java new file mode 100644 index 0000000000..a061f9c45d --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/FileBasedSettings.java @@ -0,0 +1,24 @@ +/* + * 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.store; + +public interface FileBasedSettings extends Settings +{ + public String getStorePath(); +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java index f787bd63ad..d733c351c4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java @@ -55,9 +55,6 @@ import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler; public class JsonFileConfigStore implements DurableConfigurationStore { - - public static final String TYPE = "JSON"; - private final Map<UUID, ConfiguredObjectRecord> _objectsById = new HashMap<UUID, ConfiguredObjectRecord>(); private final Map<String, List<UUID>> _idsByType = new HashMap<String, List<UUID>>(); private final ObjectMapper _objectMapper = new ObjectMapper(); @@ -112,12 +109,13 @@ public class JsonFileConfigStore implements DurableConfigurationStore } @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) { _parent = parent; _name = parent.getName(); _classNameMapping = generateClassNameMap(_parent.getModel(), _rootClass); - setup(storeSettings); + FileBasedSettings fileBasedSettings = (FileBasedSettings)_parent; + setup(fileBasedSettings); load(); } @@ -138,14 +136,13 @@ public class JsonFileConfigStore implements DurableConfigurationStore } - private void setup(final Map<String, Object> configurationStoreSettings) + private void setup(final FileBasedSettings configurationStoreSettings) { - Object storePathAttr = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH); - if(!(storePathAttr instanceof String)) + if(configurationStoreSettings.getStorePath() == null) { throw new StoreException("Cannot determine path for configuration storage"); } - _directoryName = (String) storePathAttr; + _directoryName = configurationStoreSettings.getStorePath(); _configFileName = _name + ".json"; _backupFileName = _name + ".bak"; checkDirectoryIsWritable(_directoryName); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java index 21a94113cf..3df1ffb6bc 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java @@ -181,7 +181,7 @@ public class MemoryMessageStore implements MessageStore @Override - public void openMessageStore(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + public void openMessageStore(final ConfiguredObject<?> parent) { } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java index e82f9dbbb0..642fcbdc54 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.store; -import java.util.Map; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.store.handler.DistributedTransactionHandler; @@ -33,22 +32,16 @@ import org.apache.qpid.server.store.handler.MessageInstanceHandler; */ public interface MessageStore { - String STORE_TYPE = "storeType"; - String STORE_PATH = "storePath"; - String UNDERFULL_SIZE = "storeUnderfullSize"; - String OVERFULL_SIZE = "storeOverfullSize"; - String getStoreLocation(); void addEventListener(EventListener eventListener, Event... events); /** * Initializes and opens the message store. + * @param parent parent object * - * @param parent parent object - * @param messageStoreSettings store settings */ - void openMessageStore(ConfiguredObject<?> parent, Map<String, Object> messageStoreSettings); + void openMessageStore(ConfiguredObject<?> parent); /** * Requests that the store performs any upgrade work on the store's structure. If there is no diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java index a6657f48a8..8848dcdd94 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java @@ -19,7 +19,6 @@ */ package org.apache.qpid.server.store; -import java.util.Map; import java.util.UUID; import org.apache.qpid.server.model.ConfiguredObject; @@ -37,7 +36,7 @@ public abstract class NullMessageStore implements MessageStore, DurableConfigura } @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) { } @@ -63,7 +62,7 @@ public abstract class NullMessageStore implements MessageStore, DurableConfigura } @Override - public void openMessageStore(ConfiguredObject<?> parent, Map<String, Object> messageStoreSettings) + public void openMessageStore(ConfiguredObject<?> parent) { } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/Settings.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/Settings.java new file mode 100644 index 0000000000..6d0ffe0b82 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/Settings.java @@ -0,0 +1,24 @@ +/* + * 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.store; + +public interface Settings +{ + +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitorSettings.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitorSettings.java new file mode 100644 index 0000000000..189e06a6d7 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitorSettings.java @@ -0,0 +1,26 @@ +/* + * 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.store; + +public interface SizeMonitorSettings extends Settings +{ + public Long getStoreUnderfullSize(); + public Long getStoreOverfullSize(); +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitoringSettings.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitoringSettings.java new file mode 100644 index 0000000000..dc05889e5e --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/SizeMonitoringSettings.java @@ -0,0 +1,26 @@ +/* + * 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.store; + +public interface SizeMonitoringSettings extends Settings +{ + public Long getStoreUnderfullSize(); + public Long getStoreOverfullSize(); +} 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 6e3f9bd643..3c63c5b869 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 @@ -86,8 +86,7 @@ import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.MapValueConverter; public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> extends AbstractConfiguredObject<X> - implements VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, IConnectionRegistry.RegistryChangeListener, EventListener, - VirtualHost<X,AMQQueue<?>, ExchangeImpl<?>> + implements VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, IConnectionRegistry.RegistryChangeListener, EventListener { public static final String DEFAULT_DLQ_NAME_SUFFIX = "_DLQ"; public static final String DLQ_ROUTING_KEY = "dlq"; @@ -130,9 +129,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte private MessageStoreLogSubject _messageStoreLogSubject; @ManagedAttributeField - private Map<String, Object> _messageStoreSettings; - - @ManagedAttributeField private boolean _queue_deadLetterQueueEnabled; @ManagedAttributeField @@ -1082,12 +1078,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } @Override - public Map<String, Object> getMessageStoreSettings() - { - return _messageStoreSettings; - } - - @Override public long getQueueCount() { return getQueues().size(); @@ -1328,12 +1318,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte _houseKeepingTasks = new ScheduledThreadPoolExecutor(getHousekeepingThreadCount()); MessageStore messageStore = getMessageStore(); - Map<String, Object> messageStoreSettings = getMessageStoreSettings(); - if (messageStoreSettings == null) - { - messageStoreSettings = Collections.emptyMap(); - } - messageStore.openMessageStore(this, messageStoreSettings); + messageStore.openMessageStore(this); if (!(_virtualHostNode.getConfigurationStore() instanceof MessageStoreProvider)) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java index 347ef820d3..8f6fbea80f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,55 +15,20 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.qpid.server.virtualhost; -import java.util.Map; +package org.apache.qpid.server.virtualhost; -import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.MessageStoreProvider; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.queue.AMQQueue; -@ManagedObject(category = false, type = ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE) -public class ProvidedStoreVirtualHost extends AbstractVirtualHost<ProvidedStoreVirtualHost> +public interface ProvidedStoreVirtualHost<X extends ProvidedStoreVirtualHost<X>> extends VirtualHostImpl<X,AMQQueue<?>,ExchangeImpl<?>>, org.apache.qpid.server.store.SizeMonitorSettings { - public static final String VIRTUAL_HOST_TYPE = "ProvidedStore"; + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreUnderfullSize(); - @ManagedObjectFactoryConstructor - public ProvidedStoreVirtualHost(final Map<String, Object> attributes, - final VirtualHostNode<?> virtualHostNode) - { - super(attributes, virtualHostNode); - } + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreOverfullSize(); - @Override - public void onValidate() - { - super.onValidate(); - - VirtualHostNode<?> virtualHostNode = getParent(VirtualHostNode.class); - DurableConfigurationStore configurationStore = virtualHostNode.getConfigurationStore(); - if (!(configurationStore instanceof MessageStoreProvider)) - { - throw new IllegalConfigurationException(VIRTUAL_HOST_TYPE + - " virtual host can only be used where the node's store (" - + configurationStore.getClass().getName() - + ") is a message store provider. "); - } - } - - @Override - protected MessageStore createMessageStore() - { - VirtualHostNode<?> virtualHostNode = getParent(VirtualHostNode.class); - MessageStoreProvider messageStoreProvider = (MessageStoreProvider) virtualHostNode.getConfigurationStore(); - return messageStoreProvider.getMessageStore(); - } } - - diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHostImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHostImpl.java new file mode 100644 index 0000000000..8586f32828 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHostImpl.java @@ -0,0 +1,91 @@ +/* + * + * 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.virtualhost; + +import java.util.Map; + +import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.MessageStoreProvider; + +@ManagedObject(category = false, type = ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE) +public class ProvidedStoreVirtualHostImpl extends AbstractVirtualHost<ProvidedStoreVirtualHostImpl> implements ProvidedStoreVirtualHost<ProvidedStoreVirtualHostImpl> +{ + public static final String VIRTUAL_HOST_TYPE = "ProvidedStore"; + public static final String STORE_PATH = "storePath"; + + @ManagedAttributeField + private Long _storeUnderfullSize; + + @ManagedAttributeField + private Long _storeOverfullSize; + + @ManagedObjectFactoryConstructor + public ProvidedStoreVirtualHostImpl(final Map<String, Object> attributes, + final VirtualHostNode<?> virtualHostNode) + { + super(attributes, virtualHostNode); + } + + @Override + public void onValidate() + { + super.onValidate(); + + VirtualHostNode<?> virtualHostNode = getParent(VirtualHostNode.class); + DurableConfigurationStore configurationStore = virtualHostNode.getConfigurationStore(); + if (!(configurationStore instanceof MessageStoreProvider)) + { + throw new IllegalConfigurationException(VIRTUAL_HOST_TYPE + + " virtual host can only be used where the node's store (" + + configurationStore.getClass().getName() + + ") is a message store provider. "); + } + } + + @Override + protected MessageStore createMessageStore() + { + VirtualHostNode<?> virtualHostNode = getParent(VirtualHostNode.class); + MessageStoreProvider messageStoreProvider = (MessageStoreProvider) virtualHostNode.getConfigurationStore(); + return messageStoreProvider.getMessageStore(); + } + + @Override + public Long getStoreUnderfullSize() + { + return _storeUnderfullSize; + } + + @Override + public Long getStoreOverfullSize() + { + return _storeOverfullSize; + } + +} + + diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java index 6705185637..2a286379f4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java @@ -73,19 +73,12 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard LOGGER.debug("Activating virtualhost node " + this); } - Map<String, Object> attributes = buildAttributesForStore(); - - getConfigurationStore().openConfigurationStore(this, attributes); + getConfigurationStore().openConfigurationStore(this); getConfigurationStore().upgradeStoreStructure(); getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.CREATED()); - if (this instanceof FileBasedVirtualHostNode) - { - @SuppressWarnings("rawtypes") - FileBasedVirtualHostNode fileBasedVirtualHostNode = (FileBasedVirtualHostNode) this; - getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.STORE_LOCATION(fileBasedVirtualHostNode.getStorePath())); - } + writeLocationEventLog(); getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.RECOVERY_START()); @@ -151,6 +144,8 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard } } + protected abstract void writeLocationEventLog(); + @Override public String toString() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java index d0a065438e..44bc923f0e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java @@ -20,19 +20,7 @@ */ package org.apache.qpid.server.virtualhostnode; -import java.security.AccessControlException; -import java.security.PrivilegedAction; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; - -import javax.security.auth.Subject; - import org.apache.log4j.Logger; - import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.messages.ConfigStoreMessages; import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject; @@ -40,17 +28,20 @@ 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.LifetimePolicy; -import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; import org.apache.qpid.server.model.SystemContext; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.MessageStoreProvider; + +import java.security.AccessControlException; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode<X>> extends AbstractConfiguredObject<X> implements VirtualHostNode<X> { @@ -163,26 +154,6 @@ public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode< return _configurationStoreLogSubject; } - protected Map<String, Object> buildAttributesForStore() - { - final Map<String, Object> attributes = new HashMap<String, Object>(); - Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new PrivilegedAction<Object>() - { - @Override - public Object run() - { - for (String attributeName : getAttributeNames()) - { - Object value = getAttribute(attributeName); - attributes.put(attributeName, value); - } - return null; - } - }); - - return attributes; - } - @StateTransition( currentState = { State.ACTIVE, State.STOPPED, State.ERRORED}, desiredState = State.DELETED ) protected void doDelete() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/FileBasedVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNode.java index 6274ee6c21..34a18c884f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/FileBasedVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNode.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,18 +15,17 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ + package org.apache.qpid.server.virtualhostnode; import org.apache.qpid.server.model.ManagedAttribute; -import org.apache.qpid.server.model.VirtualHostNode; -public interface FileBasedVirtualHostNode<X extends FileBasedVirtualHostNode<X>> extends VirtualHostNode<X> +public interface JsonVirtualHostNode<X extends JsonVirtualHostNode<X>> extends org.apache.qpid.server.model.VirtualHostNode<X>, org.apache.qpid.server.store.FileBasedSettings { - public static final String STORE_PATH = "storePath"; - @ManagedAttribute(mandatory = true) - public String getStorePath(); + String STORE_PATH = "storePath"; + @ManagedAttribute(mandatory = true) + String getStorePath(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java index 6d26decd72..004ad652f4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.virtualhostnode; import java.util.Map; +import org.apache.qpid.server.logging.messages.ConfigStoreMessages; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObject; @@ -30,7 +31,7 @@ import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.JsonFileConfigStore; @ManagedObject(type=JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category=false) -public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JsonVirtualHostNodeImpl> implements FileBasedVirtualHostNode<JsonVirtualHostNodeImpl> +public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JsonVirtualHostNodeImpl> implements JsonVirtualHostNode<JsonVirtualHostNodeImpl> { public static final String VIRTUAL_HOST_NODE_TYPE = "JSON"; @@ -44,6 +45,12 @@ public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<Jso } @Override + protected void writeLocationEventLog() + { + getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.STORE_LOCATION(getStorePath())); + } + + @Override protected DurableConfigurationStore createConfigurationStore() { return new JsonFileConfigStore(); 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 d220fefa50..a7c00da02e 100644 --- a/qpid/java/broker-core/src/main/resources/initial-config.json +++ b/qpid/java/broker-core/src/main/resources/initial-config.json @@ -57,7 +57,7 @@ "type" : "JSON", "storePath" : "${qpid.work_dir}/default/config", "context" : { - "virtualhostBlueprint" : "{ \"type\" : \"DERBY\", \"messageStoreSettings\" : { \"storePath\" : \"${qpid.work_dir}/default/messages\" }}" + "virtualhostBlueprint" : "{ \"type\" : \"DERBY\", \"storePath\" : \"${qpid.work_dir}/default/messages\" }" } } ], "plugins" : [ { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java index 45290d506d..c648011116 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java @@ -111,7 +111,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase _options = new BrokerOptions(); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); } @Override @@ -153,7 +153,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeHttpPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord root = getRootEntry(); assertEquals("Unexpected root id", _rootId, root.getId()); Collection<UUID> childrenIds = getChildrenIds(root); @@ -165,7 +165,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeRmiPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord root = getRootEntry(); assertEquals("Unexpected root id", _rootId, root.getId()); @@ -178,7 +178,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeJmxPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord root = getRootEntry(); assertEquals("Unexpected root id", _rootId, root.getId()); @@ -193,7 +193,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord root = getRootEntry(); assertEquals("Unexpected root id", _rootId, root.getId()); @@ -221,7 +221,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeJmxPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); UUID optionsPort = getOptionsPortId(); @@ -233,7 +233,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeHttpPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); UUID optionsPort = getOptionsPortId(); @@ -248,7 +248,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeHttpPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord portEntry = getEntry(_portEntryId); @@ -262,7 +262,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeRmiPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord portEntry = getEntry(_portEntryId); @@ -276,7 +276,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeRmiPortOverride(9090); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord portEntry = getEntry(_portEntryId); @@ -327,7 +327,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase } _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord hostEntry = getEntry(virtualHostId); Map<String, Object> hostAttributes = new HashMap<String, Object>(hostEntry.getAttributes()); @@ -353,7 +353,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(Port.NAME, "TEST"); @@ -370,7 +370,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord root = getRootEntry(); Map<String, Object> attributes = new HashMap<String, Object>(); @@ -385,7 +385,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeHttpPortOverride(1000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); UUID portId = getOptionsPortId(); Map<String, Object> attributes = new HashMap<String, Object>(); @@ -409,7 +409,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeHttpPortOverride(1000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); ConfiguredObjectRecord record = new ConfiguredObjectRecord() { @@ -445,7 +445,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase { _options.setManagementModeHttpPortOverride(1000); _handler = new ManagementModeStoreHandler(_store, _options); - _handler.openConfigurationStore(_systemContext,Collections.<String,Object>emptyMap()); + _handler.openConfigurationStore(_systemContext); UUID portId = getOptionsPortId(); ConfiguredObjectRecord record = mock(ConfiguredObjectRecord.class); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java index 96ee8195a2..6b6de5b66a 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java @@ -34,6 +34,8 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; +import org.apache.qpid.server.model.ConfiguredObjectFactory; +import org.apache.qpid.server.model.VirtualHostNode; import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.invocation.InvocationOnMock; @@ -83,7 +85,6 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest private UUID _queueId; private UUID _exchangeId; private DurableConfigurationStore _configStore; - protected Map<String, Object> _configurationStoreSettings; private ConfiguredObjectFactoryImpl _factory; private ConfiguredObject<?> _parent; @@ -94,13 +95,11 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest { super.setUp(); - _configurationStoreSettings = new HashMap<String, Object>(); _queueId = UUIDGenerator.generateRandomUUID(); _exchangeId = UUIDGenerator.generateRandomUUID(); _factory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance()); _storeName = getName(); _storePath = TMP_FOLDER + File.separator + _storeName; - _configurationStoreSettings.put(MessageStore.STORE_PATH, _storePath); FileUtils.delete(new File(_storePath), true); setTestSystemProperty("QPID_WORK", TMP_FOLDER); @@ -112,18 +111,16 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest String argValue = "some selector expression"; _bindingArgs.put(argKey, argValue); - - _parent = mock(ConfiguredObject.class); - when(_parent.getName()).thenReturn("testName"); - when(_parent.getObjectFactory()).thenReturn(_factory); - when(_parent.getModel()).thenReturn(_factory.getModel()); + _parent = createVirtualHostNode(_storePath, _factory); _configStore = createConfigStore(); - _configStore.openConfigurationStore(_parent, _configurationStoreSettings); + _configStore.openConfigurationStore(_parent); _rootRecord = new ConfiguredObjectRecordImpl(UUID.randomUUID(), VirtualHost.class.getSimpleName(), Collections.<String, Object>emptyMap()); _configStore.create(_rootRecord); } + protected abstract VirtualHostNode createVirtualHostNode(String storeLocation, ConfiguredObjectFactory factory); + public void tearDown() throws Exception { try @@ -529,7 +526,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest { closeConfigStore(); _configStore = createConfigStore(); - _configStore.openConfigurationStore(_parent, _configurationStoreSettings); + _configStore.openConfigurationStore(_parent); } protected abstract DurableConfigurationStore createConfigStore() throws Exception; diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java index 2c9583490a..7eb5e3b63c 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.store; -import static org.mockito.Matchers.contains; import static org.mockito.Mockito.mock; import java.util.Collections; @@ -273,7 +272,7 @@ public class BrokerStoreUpgraderAndRecovererTest extends QpidTestCase } @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) throws StoreException + public void openConfigurationStore(ConfiguredObject<?> parent) throws StoreException { } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreConfigurationTest.java index 2400a68c93..62cbe409a9 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreConfigurationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreConfigurationTest.java @@ -20,9 +20,28 @@ */ package org.apache.qpid.server.store; +import org.apache.qpid.server.model.ConfiguredObjectFactory; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class JsonFileConfigStoreConfigurationTest extends AbstractDurableConfigurationStoreTestCase { @Override + protected VirtualHostNode createVirtualHostNode(String storeLocation, ConfiguredObjectFactory factory) + { + final JsonVirtualHostNode parent = mock(JsonVirtualHostNode.class); + when(parent.getStorePath()).thenReturn(storeLocation); + when(parent.getName()).thenReturn("testName"); + when(parent.getObjectFactory()).thenReturn(factory); + when(parent.getModel()).thenReturn(factory.getModel()); + + return parent; + } + + @Override protected DurableConfigurationStore createConfigStore() throws Exception { return new JsonFileConfigStore(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java index 6012b1802d..e9f3ba3d21 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java @@ -35,12 +35,12 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.server.model.BrokerModel; -import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectFactory; import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler; import org.apache.qpid.server.util.ServerScopedRuntimeException; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.test.utils.TestFileUtils; import org.apache.qpid.util.FileUtils; @@ -50,8 +50,7 @@ import org.mockito.InOrder; public class JsonFileConfigStoreTest extends QpidTestCase { private JsonFileConfigStore _store; - private HashMap<String, Object> _configurationStoreSettings; - private ConfiguredObject<?> _parent; + private JsonVirtualHostNode<?> _parent; private File _storeLocation; private ConfiguredObjectRecordHandler _handler; @@ -68,14 +67,13 @@ public class JsonFileConfigStoreTest extends QpidTestCase ConfiguredObjectFactory factory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance()); - _parent = mock(ConfiguredObject.class); + _parent = mock(JsonVirtualHostNode.class); when(_parent.getName()).thenReturn(getName()); when(_parent.getObjectFactory()).thenReturn(factory); when(_parent.getModel()).thenReturn(factory.getModel()); _storeLocation = TestFileUtils.createTestDirectory("json", true); - _configurationStoreSettings = new HashMap<String, Object>(); - _configurationStoreSettings.put(JsonFileConfigStore.STORE_TYPE, JsonFileConfigStore.TYPE); - _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, _storeLocation.getAbsolutePath()); + when(_parent.getStorePath()).thenReturn(_storeLocation.getAbsolutePath()); + _store = new JsonFileConfigStore(); _handler = mock(ConfiguredObjectRecordHandler.class); @@ -97,10 +95,11 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testNoStorePath() throws Exception { - _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, null); + when(_parent.getStorePath()).thenReturn(null); + try { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); fail("Store should not successfully configure if there is no path set"); } catch (ServerScopedRuntimeException e) @@ -112,10 +111,10 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testInvalidStorePath() throws Exception { - _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, System.getProperty("file.separator")); + when(_parent.getStorePath()).thenReturn(System.getProperty("file.separator")); try { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); fail("Store should not successfully configure if there is an invalid path set"); } catch (ServerScopedRuntimeException e) @@ -126,7 +125,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testVisitEmptyStore() { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); InOrder inorder = inOrder(_handler); @@ -139,17 +138,17 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testInsertAndUpdateTopLevelObject() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); Map<String, Object> newAttributes = new HashMap<String, Object>(_rootRecord.getAttributes()); newAttributes.put("attributeName", "attributeValue"); _store.update(false, new ConfiguredObjectRecordImpl(_rootRecord.getId(), _rootRecord.getType(), newAttributes)); _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); @@ -160,7 +159,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testCreateObject() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID queueId = new UUID(0, 1); @@ -170,7 +169,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase _store.create(new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr, getRootAsParentMap())); _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); verify(_handler).handle(matchesRecord(queueId, queueType, queueAttr)); @@ -180,7 +179,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testCreateAndUpdateObject() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID queueId = new UUID(0, 1); @@ -195,7 +194,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); verify(_handler, times(1)).handle(matchesRecord(queueId, queueType, queueAttr)); _store.closeConfigurationStore(); @@ -204,7 +203,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testCreateAndRemoveObject() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID queueId = new UUID(0, 1); @@ -219,7 +218,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); verify(_handler, times(1)).handle(matchesRecord(ANY_UUID, VIRTUAL_HOST_TYPE, ANY_MAP)); _store.closeConfigurationStore(); @@ -227,7 +226,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testCreateUnknownObjectType() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); try @@ -243,7 +242,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testTwoObjectsWithSameId() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID id = UUID.randomUUID(); @@ -262,13 +261,13 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testChangeTypeOfObject() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID id = UUID.randomUUID(); _store.create(new ConfiguredObjectRecordImpl(id, "Queue", Collections.<String, Object>emptyMap(), getRootAsParentMap())); _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); try { @@ -283,13 +282,13 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testLockFileGuaranteesExclusiveAccess() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); JsonFileConfigStore secondStore = new JsonFileConfigStore(); try { - secondStore.openConfigurationStore(_parent, _configurationStoreSettings); + secondStore.openConfigurationStore(_parent); fail("Should not be able to open a second store with the same path"); } catch(ServerScopedRuntimeException e) @@ -297,7 +296,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase // pass } _store.closeConfigurationStore(); - secondStore.openConfigurationStore(_parent, _configurationStoreSettings); + secondStore.openConfigurationStore(_parent); } public void testStoreFileLifecycle() @@ -308,7 +307,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase assertFalse("JSON store should not exist", expectedJsonFile.exists()); assertFalse("JSON backup should not exist", expectedJsonFileBak.exists()); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); assertTrue("JSON store should exist after open", expectedJsonFile.exists()); assertFalse("JSON backup should not exist after open", expectedJsonFileBak.exists()); @@ -322,7 +321,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase public void testCreatedNestedObjects() throws Exception { - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); createRootRecord(); final UUID queueId = new UUID(0, 1); @@ -355,7 +354,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase new ConfiguredObjectRecordImpl(binding2Id, "Binding", EMPTY_ATTR, binding2Parents); _store.update(true, bindingRecord, binding2Record); _store.closeConfigurationStore(); - _store.openConfigurationStore(_parent, _configurationStoreSettings); + _store.openConfigurationStore(_parent); _store.visitConfiguredObjectRecords(_handler); verify(_handler).handle(matchesRecord(queueId, "Queue", EMPTY_ATTR)); verify(_handler).handle(matchesRecord(queue2Id, "Queue", EMPTY_ATTR)); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MemoryMessageStoreTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MemoryMessageStoreTest.java index 8fd3cbb1fe..f05da247ea 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MemoryMessageStoreTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MemoryMessageStoreTest.java @@ -20,16 +20,19 @@ */ package org.apache.qpid.server.store; -import java.util.Collections; -import java.util.Map; +import org.apache.qpid.server.model.VirtualHost; +import org.apache.qpid.server.virtualhost.TestMemoryVirtualHost; + +import static org.mockito.Mockito.mock; public class MemoryMessageStoreTest extends MessageStoreTestCase { @Override - protected Map<String, Object> getStoreSettings() throws Exception + protected VirtualHost createVirtualHost() { - return Collections.<String, Object>emptyMap(); + final TestMemoryVirtualHost parent = mock(TestMemoryVirtualHost.class); + return parent; } @Override diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java index baab5dd6d3..51b33276ec 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java @@ -21,7 +21,6 @@ package org.apache.qpid.server.store; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.io.File; import java.nio.ByteBuffer; @@ -33,6 +32,7 @@ import java.util.UUID; import org.apache.log4j.Logger; import org.apache.qpid.server.message.EnqueueableMessage; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.util.FileUtils; @@ -49,8 +49,6 @@ public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase imple private UUID _transactionResource; protected abstract MessageStore createStore() throws Exception; - protected abstract Map<String, Object> createStoreSettings(String storeLocation); - protected abstract Map<String, String> createContextSettings(); protected abstract int getNumberOfMessagesToFillStore(); @Override @@ -61,22 +59,18 @@ public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase imple _storeLocation = new File(new File(TMP_FOLDER), getTestName()); FileUtils.delete(_storeLocation, true); - - Map<String, Object> storeSettings = createStoreSettings(_storeLocation.getAbsolutePath()); - _store = createStore(); - ConfiguredObject<?> parent = mock(ConfiguredObject.class); - when(parent.getName()).thenReturn("test"); - when(parent.getContext()).thenReturn(createContextSettings()); + ConfiguredObject<?> parent = createVirtualHost(_storeLocation.getAbsolutePath()); - _store.openMessageStore(parent, storeSettings); + _store.openMessageStore(parent); _transactionResource = UUID.randomUUID(); _events = new ArrayList<Event>(); _store.addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL); } + protected abstract VirtualHost createVirtualHost(String storeLocation); @Override public void tearDown() throws Exception diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java index c0968794f5..d4b990da07 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -37,6 +38,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.apache.qpid.server.message.EnqueueableMessage; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.Transaction.Record; import org.apache.qpid.server.store.handler.DistributedTransactionHandler; import org.apache.qpid.server.store.handler.MessageHandler; @@ -49,25 +51,20 @@ import org.mockito.ArgumentMatcher; public abstract class MessageStoreTestCase extends QpidTestCase { private MessageStore _store; - private Map<String, Object> _storeSettings; private ConfiguredObject<?> _parent; public void setUp() throws Exception { super.setUp(); - _parent = mock(ConfiguredObject.class); - when(_parent.getName()).thenReturn("test"); - - _storeSettings = getStoreSettings(); + _parent = createVirtualHost(); _store = createMessageStore(); - _store.openMessageStore(_parent, _storeSettings); - + _store.openMessageStore(_parent); } - protected abstract Map<String, Object> getStoreSettings() throws Exception; + protected abstract VirtualHost createVirtualHost(); protected abstract MessageStore createMessageStore(); @@ -81,7 +78,7 @@ public abstract class MessageStoreTestCase extends QpidTestCase _store.closeMessageStore(); _store = createMessageStore(); - _store.openMessageStore(_parent, _storeSettings); + _store.openMessageStore(_parent); } public void testAddAndRemoveRecordXid() throws Exception diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java index 321a050747..e151391142 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java @@ -52,8 +52,6 @@ import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.SubjectCreator; import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.TestMemoryMessageStore; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; import org.apache.qpid.server.virtualhost.QueueExistsException; import org.apache.qpid.server.virtualhost.TestMemoryVirtualHost; @@ -134,11 +132,6 @@ public class BrokerTestHelper { Map<String,Object> attributes = new HashMap<String, Object>(); attributes.put(org.apache.qpid.server.model.VirtualHost.TYPE, TestMemoryVirtualHost.VIRTUAL_HOST_TYPE); - - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE); - - attributes.put(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings); attributes.put(org.apache.qpid.server.model.VirtualHost.NAME, name); return createVirtualHost(attributes); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java index 18d394d4f7..277ef8b400 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java @@ -52,4 +52,8 @@ public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVir return _store; } + @Override + protected void writeLocationEventLog() + { + } } diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java index 0a121ad476..e75a4c8065 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java @@ -28,15 +28,10 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.store.AbstractJDBCMessageStore; -import org.apache.qpid.server.store.Event; -import org.apache.qpid.server.store.JdbcUtils; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.StoreException; +import org.apache.qpid.server.store.*; public abstract class AbstractDerbyMessageStore extends AbstractJDBCMessageStore { @@ -50,7 +45,7 @@ public abstract class AbstractDerbyMessageStore extends AbstractJDBCMessageStore private ConfiguredObject<?> _parent; @Override - public final void openMessageStore(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + public final void openMessageStore(final ConfiguredObject<?> parent) { if (_messageStoreOpen.compareAndSet(false, true)) { @@ -58,33 +53,24 @@ public abstract class AbstractDerbyMessageStore extends AbstractJDBCMessageStore DerbyUtils.loadDerbyDriver(); - doOpen(parent, messageStoreSettings); + doOpen(parent); - Object overfullAttr = messageStoreSettings.get(MessageStore.OVERFULL_SIZE); - Object underfullAttr = messageStoreSettings.get(MessageStore.UNDERFULL_SIZE); - - _persistentSizeHighThreshold = overfullAttr == null ? -1l : - overfullAttr instanceof Number - ? ((Number) overfullAttr).longValue() - : Long.parseLong(overfullAttr.toString()); - _persistentSizeLowThreshold = underfullAttr == null ? _persistentSizeHighThreshold : - underfullAttr instanceof Number - ? ((Number) underfullAttr).longValue() - : Long.parseLong(underfullAttr.toString()); + final SizeMonitorSettings sizeMonitorSettings = (SizeMonitorSettings) parent; + _persistentSizeHighThreshold = sizeMonitorSettings.getStoreOverfullSize(); + _persistentSizeLowThreshold = sizeMonitorSettings.getStoreUnderfullSize(); if (_persistentSizeLowThreshold > _persistentSizeHighThreshold || _persistentSizeLowThreshold < 0l) { _persistentSizeLowThreshold = _persistentSizeHighThreshold; } - createOrOpenMessageStoreDatabase(); setInitialSize(); setMaximumMessageId(); } } - protected abstract void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings); + protected abstract void doOpen(final ConfiguredObject<?> parent); @Override public final void upgradeStoreStructure() throws StoreException diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java index 6596b5b621..fdf08a9940 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java @@ -25,21 +25,16 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.log4j.Logger; import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.store.AbstractJDBCConfigurationStore; -import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.MessageStoreProvider; -import org.apache.qpid.server.store.StoreException; +import org.apache.qpid.server.store.*; /** * Implementation of a DurableConfigurationStore backed by Apache Derby - * that also provides a MessageStore. + * that also provides a MessageStore.A */ public class DerbyConfigurationStore extends AbstractJDBCConfigurationStore implements MessageStoreProvider, DurableConfigurationStore @@ -55,7 +50,7 @@ public class DerbyConfigurationStore extends AbstractJDBCConfigurationStore private ConfiguredObject<?> _parent; @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) throws StoreException { if (_configurationStoreOpen.compareAndSet(false, true)) @@ -63,10 +58,9 @@ public class DerbyConfigurationStore extends AbstractJDBCConfigurationStore _parent = parent; DerbyUtils.loadDerbyDriver(); - String databasePath = (String) storeSettings.get(MessageStore.STORE_PATH); - - _storeLocation = databasePath; - _connectionURL = DerbyUtils.createConnectionUrl(parent.getName(), databasePath); + final FileBasedSettings settings = (FileBasedSettings)parent; + _storeLocation = settings.getStorePath(); + _connectionURL = DerbyUtils.createConnectionUrl(parent.getName(), _storeLocation); createOrOpenConfigurationStoreDatabase(); } @@ -188,7 +182,7 @@ public class DerbyConfigurationStore extends AbstractJDBCConfigurationStore private class ProvidedMessageStore extends AbstractDerbyMessageStore { @Override - protected void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + protected void doOpen(final ConfiguredObject<?> parent) { // Nothing to do, store provided by DerbyConfigurationStore } diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java index 9e2a2f63d4..d9948fe21e 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java @@ -24,12 +24,11 @@ package org.apache.qpid.server.store.derby; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; -import java.util.Map; import org.apache.log4j.Logger; import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.FileBasedSettings; import org.apache.qpid.server.store.StoreException; /** @@ -43,13 +42,12 @@ public class DerbyMessageStore extends AbstractDerbyMessageStore private String _storeLocation; @Override - protected void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + protected void doOpen(final ConfiguredObject<?> parent) { - String databasePath = (String) messageStoreSettings.get(MessageStore.STORE_PATH); - String name = parent.getName(); + final FileBasedSettings settings = (FileBasedSettings)parent; + _storeLocation = settings.getStorePath(); - _storeLocation = databasePath; - _connectionURL = DerbyUtils.createConnectionUrl(name, databasePath); + _connectionURL = DerbyUtils.createConnectionUrl(parent.getName(), _storeLocation); } @Override diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHost.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHost.java index fc67d2fa50..4355447971 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHost.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHost.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,36 +15,25 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.qpid.server.virtualhost.derby; -import java.util.Map; +package org.apache.qpid.server.virtualhost.derby; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.derby.DerbyMessageStore; -import org.apache.qpid.server.virtualhost.AbstractVirtualHost; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.virtualhost.VirtualHostImpl; -@ManagedObject(category = false, type = DerbyVirtualHost.VIRTUAL_HOST_TYPE) -public class DerbyVirtualHost extends AbstractVirtualHost<DerbyVirtualHost> +public interface DerbyVirtualHost<X extends DerbyVirtualHost<X>> extends VirtualHostImpl<X,AMQQueue<?>,ExchangeImpl<?>>, org.apache.qpid.server.store.FileBasedSettings, org.apache.qpid.server.store.SizeMonitorSettings { - public static final String VIRTUAL_HOST_TYPE = "DERBY"; - - @ManagedObjectFactoryConstructor - public DerbyVirtualHost(final Map<String, Object> attributes, - final VirtualHostNode<?> virtualHostNode) - { - super(attributes, virtualHostNode); - } + String STORE_PATH = "storePath"; + @ManagedAttribute(mandatory = true) + String getStorePath(); - @Override - protected MessageStore createMessageStore() - { - return new DerbyMessageStore(); - } + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreUnderfullSize(); + @ManagedAttribute(mandatory = true, defaultValue = "0") + Long getStoreOverfullSize(); } diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java new file mode 100644 index 0000000000..5089090643 --- /dev/null +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java @@ -0,0 +1,78 @@ +/* + * + * 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.virtualhost.derby; + +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.derby.DerbyMessageStore; +import org.apache.qpid.server.virtualhost.AbstractVirtualHost; + +import java.util.Map; + +@ManagedObject(category = false, type = DerbyVirtualHostImpl.VIRTUAL_HOST_TYPE) +public class DerbyVirtualHostImpl extends AbstractVirtualHost<DerbyVirtualHostImpl> implements DerbyVirtualHost<DerbyVirtualHostImpl> +{ + public static final String VIRTUAL_HOST_TYPE = "DERBY"; + + @ManagedAttributeField + private String _storePath; + + @ManagedAttributeField + private Long _storeUnderfullSize; + + @ManagedAttributeField + private Long _storeOverfullSize; + + @ManagedObjectFactoryConstructor + public DerbyVirtualHostImpl(final Map<String, Object> attributes, + final VirtualHostNode<?> virtualHostNode) + { + super(attributes, virtualHostNode); + } + + + @Override + protected MessageStore createMessageStore() + { + return new DerbyMessageStore(); + } + + @Override + public String getStorePath() + { + return _storePath; + } + + @Override + public Long getStoreUnderfullSize() + { + return _storeUnderfullSize; + } + + @Override + public Long getStoreOverfullSize() + { + return _storeOverfullSize; + } +} diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java index 340d046033..3b31f4e7e0 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,51 +15,17 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ package org.apache.qpid.server.virtualhostnode.derby; -import java.util.Map; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ManagedAttributeField; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.derby.DerbyConfigurationStore; -import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; +import org.apache.qpid.server.model.ManagedAttribute; -@ManagedObject( category = false, type = DerbyVirtualHostNode.VIRTUAL_HOST_NODE_TYPE ) -public class DerbyVirtualHostNode extends AbstractStandardVirtualHostNode<DerbyVirtualHostNode> implements FileBasedVirtualHostNode<DerbyVirtualHostNode> +public interface DerbyVirtualHostNode<X extends DerbyVirtualHostNode<X>> extends org.apache.qpid.server.model.VirtualHostNode<X>, org.apache.qpid.server.store.FileBasedSettings { - public static final String VIRTUAL_HOST_NODE_TYPE = "DERBY"; - - @ManagedAttributeField - private String _storePath; - - @ManagedObjectFactoryConstructor - public DerbyVirtualHostNode(Map<String, Object> attributes, Broker<?> parent) - { - super(attributes, parent); - } - - @Override - protected DurableConfigurationStore createConfigurationStore() - { - return new DerbyConfigurationStore(); - } - - @Override - public String getStorePath() - { - return _storePath; - } + String STORE_PATH = "storePath"; - @Override - public String toString() - { - return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]"; - } + @ManagedAttribute(mandatory = true) + String getStorePath(); } diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java new file mode 100644 index 0000000000..ae440014c7 --- /dev/null +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java @@ -0,0 +1,72 @@ +/* + * + * 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.virtualhostnode.derby; + +import java.util.Map; + +import org.apache.qpid.server.logging.messages.ConfigStoreMessages; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.store.derby.DerbyConfigurationStore; +import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; + +@ManagedObject( category = false, type = DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE ) +public class DerbyVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<DerbyVirtualHostNodeImpl> implements DerbyVirtualHostNode<DerbyVirtualHostNodeImpl> +{ + public static final String VIRTUAL_HOST_NODE_TYPE = "DERBY"; + + @ManagedAttributeField + private String _storePath; + + @ManagedObjectFactoryConstructor + public DerbyVirtualHostNodeImpl(Map<String, Object> attributes, Broker<?> parent) + { + super(attributes, parent); + } + + @Override + protected void writeLocationEventLog() + { + getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.STORE_LOCATION(getStorePath())); + } + + @Override + protected DurableConfigurationStore createConfigurationStore() + { + return new DerbyConfigurationStore(); + } + + @Override + public String getStorePath() + { + return _storePath; + } + + @Override + public String toString() + { + return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]"; + } +} diff --git a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreConfigurationTest.java b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreConfigurationTest.java index 08c421b606..849bd066c7 100644 --- a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreConfigurationTest.java +++ b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreConfigurationTest.java @@ -20,12 +20,26 @@ */ package org.apache.qpid.server.store.derby; +import org.apache.qpid.server.model.ConfiguredObjectFactory; +import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.AbstractDurableConfigurationStoreTestCase; +import org.apache.qpid.server.virtualhostnode.derby.DerbyVirtualHostNode; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class DerbyMessageStoreConfigurationTest extends AbstractDurableConfigurationStoreTestCase { @Override + protected VirtualHostNode createVirtualHostNode(String storeLocation, ConfiguredObjectFactory factory) + { + final DerbyVirtualHostNode parent = mock(DerbyVirtualHostNode.class); + when(parent.getStorePath()).thenReturn(storeLocation); + return parent; + } + + @Override protected DerbyConfigurationStore createConfigStore() throws Exception { return new DerbyConfigurationStore(); diff --git a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java index 348d81fadd..5c8eb94d91 100644 --- a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java +++ b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java @@ -21,26 +21,27 @@ package org.apache.qpid.server.store.derby; import java.util.Collections; -import java.util.HashMap; import java.util.Map; -import org.apache.log4j.Logger; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreQuotaEventsTestBase; +import org.apache.qpid.server.virtualhost.derby.DerbyVirtualHost; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class DerbyMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTestBase { - private static final Logger _logger = Logger.getLogger(DerbyMessageStoreQuotaEventsTest.class); - private static final int NUMBER_OF_MESSAGES_TO_OVERFILL_STORE = 10; /** * Estimated using an assumption that a physical disk space occupied by a * message is 3 times bigger then a message size */ - private static final int OVERFULL_SIZE = (int) (MESSAGE_DATA.length * 3 * NUMBER_OF_MESSAGES_TO_OVERFILL_STORE * 0.8); + private static final long OVERFULL_SIZE = (long) (MESSAGE_DATA.length * 3 * NUMBER_OF_MESSAGES_TO_OVERFILL_STORE * 0.8); - private static final int UNDERFULL_SIZE = (int) (OVERFULL_SIZE * 0.8); + private static final long UNDERFULL_SIZE = (long) (OVERFULL_SIZE * 0.8); @Override protected int getNumberOfMessagesToFillStore() @@ -49,27 +50,26 @@ public class DerbyMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTes } @Override - protected MessageStore createStore() throws Exception + protected VirtualHost createVirtualHost(String storeLocation) { - return new DerbyMessageStore(); + final DerbyVirtualHost parent = mock(DerbyVirtualHost.class); + when(parent.getContext()).thenReturn(createContextSettings()); + when(parent.getStorePath()).thenReturn(storeLocation); + when(parent.getStoreOverfullSize()).thenReturn(OVERFULL_SIZE); + when(parent.getStoreUnderfullSize()).thenReturn(UNDERFULL_SIZE); + return parent; } @Override - protected Map<String, Object> createStoreSettings(String storeLocation) + protected MessageStore createStore() throws Exception { - _logger.debug("Applying store specific config. overfull-size=" + OVERFULL_SIZE + ", underfull-size=" + UNDERFULL_SIZE); - - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_PATH, storeLocation); - messageStoreSettings.put(MessageStore.OVERFULL_SIZE, OVERFULL_SIZE); - messageStoreSettings.put(MessageStore.UNDERFULL_SIZE, UNDERFULL_SIZE); - return messageStoreSettings; + return new DerbyMessageStore(); } - @Override - protected Map<String, String> createContextSettings() + private Map<String, String> createContextSettings() { return Collections.emptyMap(); } + } diff --git a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java index 9a2d945494..ad3246290c 100644 --- a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java +++ b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java @@ -22,13 +22,16 @@ package org.apache.qpid.server.store.derby; import java.io.File; -import java.util.HashMap; -import java.util.Map; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreTestCase; +import org.apache.qpid.server.virtualhost.derby.DerbyVirtualHost; import org.apache.qpid.util.FileUtils; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class DerbyMessageStoreTest extends MessageStoreTestCase { private String _storeLocation; @@ -59,13 +62,14 @@ public class DerbyMessageStoreTest extends MessageStoreTestCase } @Override - protected Map<String, Object> getStoreSettings() throws Exception + protected VirtualHost createVirtualHost() { _storeLocation = TMP_FOLDER + File.separator + getTestName(); deleteStoreIfExists(); - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_PATH, _storeLocation); - return messageStoreSettings; + + final DerbyVirtualHost parent = mock(DerbyVirtualHost.class); + when(parent.getStorePath()).thenReturn(_storeLocation); + return parent; } private void deleteStoreIfExists() diff --git a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java index 4dfb05ff4f..75efababc0 100644 --- a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java +++ b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java @@ -22,8 +22,8 @@ package org.apache.qpid.server.store.jdbc.bonecp; import com.jolbox.bonecp.BoneCP; import com.jolbox.bonecp.BoneCPConfig; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.store.jdbc.ConnectionProvider; -import org.apache.qpid.server.util.MapValueConverter; import java.sql.Connection; import java.sql.SQLException; @@ -42,17 +42,38 @@ public class BoneCPConnectionProvider implements ConnectionProvider private final BoneCP _connectionPool; - public BoneCPConnectionProvider(String connectionUrl, Map<String, Object> storeSettings) throws SQLException + public BoneCPConnectionProvider(String connectionUrl, ConfiguredObject<?> storeSettings) throws SQLException { // TODO change interface to pass through username and password BoneCPConfig config = new BoneCPConfig(); config.setJdbcUrl(connectionUrl); - config.setMinConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MIN_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MIN_CONNECTIONS_PER_PARTITION)); - config.setMaxConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MAX_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MAX_CONNECTIONS_PER_PARTITION)); - config.setPartitionCount(MapValueConverter.getIntegerAttribute(PARTITION_COUNT, storeSettings, DEFAULT_PARTITION_COUNT)); + Map<String, String> context = storeSettings.getContext(); + + config.setMinConnectionsPerPartition(getContextValueAsInt(MIN_CONNECTIONS_PER_PARTITION, context, DEFAULT_MIN_CONNECTIONS_PER_PARTITION)); + config.setMaxConnectionsPerPartition(getContextValueAsInt(MAX_CONNECTIONS_PER_PARTITION, context, DEFAULT_MAX_CONNECTIONS_PER_PARTITION)); + config.setPartitionCount(getContextValueAsInt(PARTITION_COUNT, context, DEFAULT_PARTITION_COUNT)); + _connectionPool = new BoneCP(config); } + private int getContextValueAsInt(String key, Map<String, String> context, int defaultValue) + { + if (context.containsKey(key)) + { + try + { + return Integer.parseInt(context.get(key)); + } + catch (NumberFormatException e) + { + return defaultValue; + } + } + else + { + return defaultValue; + } + } @Override public Connection getConnection() throws SQLException { diff --git a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java index c1345cfe54..e7dc8bd16c 100644 --- a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java +++ b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java @@ -21,8 +21,8 @@ package org.apache.qpid.server.store.jdbc.bonecp; import java.sql.SQLException; -import java.util.Map; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory; import org.apache.qpid.server.plugin.PluggableService; import org.apache.qpid.server.store.jdbc.ConnectionProvider; @@ -36,9 +36,9 @@ public class BoneCPConnectionProviderFactory implements JDBCConnectionProviderFa return "BONECP"; } - public ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> storeSettings) + public ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl) throws SQLException { - return new BoneCPConnectionProvider(connectionUrl, storeSettings); + return new BoneCPConnectionProvider(connectionUrl, parent); } } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java index d528ab9253..2d8eec2021 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java @@ -20,8 +20,7 @@ */ package org.apache.qpid.server.store.jdbc; -import java.util.Map; - +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory; import org.apache.qpid.server.plugin.PluggableService; @@ -38,7 +37,7 @@ public class DefaultConnectionProviderFactory implements JDBCConnectionProviderF } @Override - public ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> settings) + public ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl) { return new DefaultConnectionProvider(connectionUrl); } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericAbstractJDBCMessageStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericAbstractJDBCMessageStore.java index bd245fa4f4..ce612ec0b6 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericAbstractJDBCMessageStore.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericAbstractJDBCMessageStore.java @@ -20,7 +20,6 @@ package org.apache.qpid.server.store.jdbc; import java.util.List; -import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; @@ -37,20 +36,20 @@ public abstract class GenericAbstractJDBCMessageStore extends org.apache.qpid.se private ConfiguredObject<?> _parent; @Override - public final void openMessageStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public final void openMessageStore(ConfiguredObject<?> parent) { if (_messageStoreOpen.compareAndSet(false, true)) { _parent = parent; - doOpen(parent, storeSettings); + doOpen(parent); createOrOpenMessageStoreDatabase(); setMaximumMessageId(); } } - protected abstract void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) + protected abstract void doOpen(final ConfiguredObject<?> parent) throws StoreException; @Override diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java index aa8c38cbb0..479ebd953b 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java @@ -24,7 +24,6 @@ import java.sql.Blob; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.log4j.Logger; @@ -43,9 +42,6 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor private static final Logger LOGGER = Logger.getLogger(GenericJDBCConfigurationStore.class); - public static final String CONNECTION_URL = "connectionUrl"; - public static final String CONNECTION_POOL_TYPE = "connectionPoolType"; - private final AtomicBoolean _configurationStoreOpen = new AtomicBoolean(); private final MessageStore _providedMessageStore = new ProvidedMessageStore(); @@ -60,14 +56,15 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor private ConfiguredObject<?> _parent; @Override - public void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) + public void openConfigurationStore(ConfiguredObject<?> parent) throws StoreException { if (_configurationStoreOpen.compareAndSet(false, true)) { _parent = parent; - _connectionURL = String.valueOf(storeSettings.get(CONNECTION_URL)); - Object poolAttribute = storeSettings.get(CONNECTION_POOL_TYPE); + + JDBCSettings settings = (JDBCSettings)parent; + _connectionURL = settings.getConnectionUrl(); JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); @@ -82,7 +79,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor + " Using settings : " + details); } - String connectionPoolType = poolAttribute == null ? DefaultConnectionProviderFactory.TYPE : String.valueOf(poolAttribute); + String connectionPoolType = settings.getConnectionPoolType() == null ? DefaultConnectionProviderFactory.TYPE : settings.getConnectionPoolType(); JDBCConnectionProviderFactory connectionProviderFactory = JDBCConnectionProviderFactory.FACTORIES.get(connectionPoolType); @@ -96,7 +93,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor try { - _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL, storeSettings); + _connectionProvider = connectionProviderFactory.getConnectionProvider(parent, _connectionURL); } catch (SQLException e) { @@ -218,7 +215,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor private class ProvidedMessageStore extends GenericAbstractJDBCMessageStore { @Override - protected void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> messageStoreSettings) + protected void doOpen(final ConfiguredObject<?> parent) { // Nothing to do, store provided by DerbyConfigurationStore } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java index 680f6b5d10..aa8964f84f 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java @@ -25,15 +25,12 @@ import java.sql.Blob; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collections; -import java.util.Map; import org.apache.log4j.Logger; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory; import org.apache.qpid.server.store.StoreException; -import org.apache.qpid.server.util.MapValueConverter; /** * Implementation of a MessageStore backed by a Generic JDBC Database. @@ -43,9 +40,6 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore private static final Logger _logger = Logger.getLogger(GenericJDBCMessageStore.class); - public static final String CONNECTION_URL = "connectionUrl"; - public static final String CONNECTION_POOL_TYPE = "connectionPoolType"; - protected String _connectionURL; private ConnectionProvider _connectionProvider; @@ -55,9 +49,10 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore private boolean _useBytesMethodsForBlob; @Override - protected void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) throws StoreException + protected void doOpen(final ConfiguredObject<?> parent) throws StoreException { - _connectionURL = String.valueOf(storeSettings.get(CONNECTION_URL)); + JDBCSettings settings = (JDBCSettings)parent; + _connectionURL = settings.getConnectionUrl(); JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); @@ -77,9 +72,7 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob(); _bigIntType = details.getBigintType(); - - Object poolAttribute = storeSettings.get(CONNECTION_POOL_TYPE); - String connectionPoolType = poolAttribute == null ? DefaultConnectionProviderFactory.TYPE : String.valueOf(poolAttribute); + String connectionPoolType = settings.getConnectionPoolType() == null ? DefaultConnectionProviderFactory.TYPE : settings.getConnectionPoolType(); JDBCConnectionProviderFactory connectionProviderFactory = JDBCConnectionProviderFactory.FACTORIES.get(connectionPoolType); @@ -92,7 +85,7 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore try { // TODO: Pass parent to the connenction provider? - _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL, storeSettings); + _connectionProvider = connectionProviderFactory.getConnectionProvider(parent, _connectionURL); } catch (SQLException e) { diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java new file mode 100644 index 0000000000..3f3b53eb06 --- /dev/null +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java @@ -0,0 +1,29 @@ +/* + * 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.store.jdbc; + +import org.apache.qpid.server.store.Settings; + +public interface JDBCSettings extends Settings +{ + String getConnectionUrl(); + + String getConnectionPoolType(); +} diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java index 85e8f89dbe..9f794ac707 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java @@ -1,5 +1,4 @@ /* - * * 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 @@ -16,35 +15,24 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.qpid.server.virtualhost.jdbc; -import java.util.Map; +package org.apache.qpid.server.virtualhost.jdbc; -import org.apache.qpid.server.model.ManagedObject; -import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.jdbc.GenericJDBCMessageStore; -import org.apache.qpid.server.virtualhost.AbstractVirtualHost; +import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.model.ManagedAttribute; +import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.store.jdbc.DefaultConnectionProviderFactory; +import org.apache.qpid.server.store.jdbc.JDBCSettings; +import org.apache.qpid.server.virtualhost.VirtualHostImpl; -@ManagedObject(category = false, type = JDBCVirtualHost.VIRTUAL_HOST_TYPE) -public class JDBCVirtualHost extends AbstractVirtualHost<JDBCVirtualHost> +public interface JDBCVirtualHost<X extends JDBCVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, + JDBCSettings { - public static final String VIRTUAL_HOST_TYPE = "JDBC"; - - @ManagedObjectFactoryConstructor - public JDBCVirtualHost(final Map<String, Object> attributes, - final VirtualHostNode<?> virtualHostNode) - { - super(attributes, virtualHostNode); - } + @ManagedAttribute(mandatory=true) + String getConnectionUrl(); + @ManagedAttribute(defaultValue= DefaultConnectionProviderFactory.TYPE) + String getConnectionPoolType(); - @Override - protected MessageStore createMessageStore() - { - return new GenericJDBCMessageStore(); - } } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java new file mode 100644 index 0000000000..f4e597c6a1 --- /dev/null +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java @@ -0,0 +1,68 @@ +/* + * + * 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.virtualhost.jdbc; + +import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.MessageStore; +import org.apache.qpid.server.store.jdbc.GenericJDBCMessageStore; +import org.apache.qpid.server.virtualhost.AbstractVirtualHost; + +import java.util.Map; + +@ManagedObject(category = false, type = JDBCVirtualHostImpl.VIRTUAL_HOST_TYPE) +public class JDBCVirtualHostImpl extends AbstractVirtualHost<JDBCVirtualHostImpl> implements JDBCVirtualHost<JDBCVirtualHostImpl> +{ + public static final String VIRTUAL_HOST_TYPE = "JDBC"; + + @ManagedAttributeField + private String _connectionUrl; + + @ManagedAttributeField + private String _connectionPoolType; + + @ManagedObjectFactoryConstructor + public JDBCVirtualHostImpl(final Map<String, Object> attributes, + final VirtualHostNode<?> virtualHostNode) + { + super(attributes, virtualHostNode); + } + + @Override + protected MessageStore createMessageStore() + { + return new GenericJDBCMessageStore(); + } + + @Override + public String getConnectionUrl() + { + return _connectionUrl; + } + + @Override + public String getConnectionPoolType() + { + return _connectionPoolType; + } +} diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java index f9756fec65..a649dc1048 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java @@ -23,8 +23,9 @@ package org.apache.qpid.server.virtualhostnode.jdbc; import org.apache.qpid.server.model.ManagedAttribute; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.jdbc.DefaultConnectionProviderFactory; +import org.apache.qpid.server.store.jdbc.JDBCSettings; -public interface JDBCVirtualHostNode<X extends JDBCVirtualHostNode<X>> extends VirtualHostNode<X> +public interface JDBCVirtualHostNode<X extends JDBCVirtualHostNode<X>> extends VirtualHostNode<X>, JDBCSettings { //TODO: Split this attribute into connectionUrl, username and password. Make the password attribute secure. @ManagedAttribute(mandatory=true) @@ -33,4 +34,5 @@ public interface JDBCVirtualHostNode<X extends JDBCVirtualHostNode<X>> extends V @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE) String getConnectionPoolType(); + //add username and passwd managed attrs } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java index 9098434b69..0c51d397bf 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java @@ -48,6 +48,11 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB } @Override + protected void writeLocationEventLog() + { + } + + @Override protected DurableConfigurationStore createConfigurationStore() { return new GenericJDBCConfigurationStore(); diff --git a/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java index 8261e93347..3f48a8fc5a 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java +++ b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java @@ -20,18 +20,21 @@ */ package org.apache.qpid.server.store.jdbc; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreTestCase; +import org.apache.qpid.server.virtualhost.jdbc.JDBCVirtualHost; public class JDBCMessageStoreTest extends MessageStoreTestCase { @@ -61,12 +64,13 @@ public class JDBCMessageStoreTest extends MessageStoreTestCase } @Override - protected Map<String, Object> getStoreSettings() + protected VirtualHost createVirtualHost() { _connectionURL = "jdbc:derby:memory:/" + getTestName() + ";create=true"; - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(GenericJDBCMessageStore.CONNECTION_URL, _connectionURL); - return messageStoreSettings; + + final JDBCVirtualHost jdbcVirtualHost = mock(JDBCVirtualHost.class); + when(jdbcVirtualHost.getConnectionUrl()).thenReturn(_connectionURL); + return jdbcVirtualHost; } diff --git a/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java b/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java index fec2432d5b..d9b564305c 100644 --- a/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java +++ b/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java @@ -41,6 +41,11 @@ public class MemoryVirtualHostNode extends AbstractStandardVirtualHostNode<Memor } @Override + protected void writeLocationEventLog() + { + } + + @Override protected DurableConfigurationStore createConfigurationStore() { return new MemoryConfigurationStore(); diff --git a/qpid/java/pom.xml b/qpid/java/pom.xml index 71984fe9ed..af0247f20d 100644 --- a/qpid/java/pom.xml +++ b/qpid/java/pom.xml @@ -617,7 +617,7 @@ <!-- Split store profiles. Virtual host configuration can be overridden by setting blueprint property like below - -Dprofile.virtualhostnode.context.blueprint='{"type":"BDB","messageStoreSettings":{"storePath":"${QPID_WORK}/${this:name}/bdb"}}' + -Dprofile.virtualhostnode.context.blueprint='{"type":"BDB","storePath":"${QPID_WORK}/${this:name}/bdb"}' --> <profile> <id>java-json.0-9-1</id> @@ -634,7 +634,7 @@ <profile.qpid.broker_default_amqp_protocol_excludes>AMQP_1_0,AMQP_0_10</profile.qpid.broker_default_amqp_protocol_excludes> <profile.broker.persistent>true</profile.broker.persistent> <profile.virtualhostnode.type>JSON</profile.virtualhostnode.type> - <profile.virtualhostnode.context.blueprint>{"type":"DERBY","messageStoreSettings":{"storePath":"${dollar.sign}{QPID_WORK}/${dollar.sign}{this:name}/derby"}}</profile.virtualhostnode.context.blueprint> + <profile.virtualhostnode.context.blueprint>{"type":"DERBY","storePath":"${dollar.sign}{QPID_WORK}/${dollar.sign}{this:name}/derby"}</profile.virtualhostnode.context.blueprint> </properties> </profile> @@ -653,7 +653,7 @@ <profile.qpid.broker_default_amqp_protocol_excludes>AMQP_1_0</profile.qpid.broker_default_amqp_protocol_excludes> <profile.broker.persistent>true</profile.broker.persistent> <profile.virtualhostnode.type>JSON</profile.virtualhostnode.type> - <profile.virtualhostnode.context.blueprint>{"type":"DERBY","messageStoreSettings":{"storePath":"${dollar.sign}{QPID_WORK}/${dollar.sign}{this:name}/derby"}}</profile.virtualhostnode.context.blueprint> + <profile.virtualhostnode.context.blueprint>{"type":"DERBY","storePath":"${dollar.sign}{QPID_WORK}/${dollar.sign}{this:name}/derby"}</profile.virtualhostnode.context.blueprint> </properties> </profile> diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java index 7605c8a024..dcab2cbe76 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java @@ -22,7 +22,6 @@ package org.apache.qpid.server.store; import java.io.File; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import javax.jms.Connection; @@ -34,7 +33,8 @@ import javax.jms.Session; import org.apache.qpid.configuration.ClientProperties; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNodeImpl; import org.apache.qpid.test.utils.QpidBrokerTestCase; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; @@ -76,7 +76,7 @@ public class SplitStoreTest extends QpidBrokerTestCase public void testJsonConfigurationStoreWithPersistentMessageStore() throws Exception { - doTest(JsonFileConfigStore.TYPE, getTestProfileVirtualHostNodeType()); + doTest(JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, getTestProfileVirtualHostNodeType()); } public void testSeparateConfigurationAndMessageStoresOfTheSameType() throws Exception @@ -87,14 +87,14 @@ public class SplitStoreTest extends QpidBrokerTestCase private void configureAndStartBroker(String virtualHostNodeType, String virtualHostType) throws Exception { final String blueprint = String.format( - "{ \"type\" : \"%s\", \"messageStoreSettings\" : { \"storePath\" : \"%s\" } }", virtualHostType, _messageStorePath); + "{ \"type\" : \"%s\", \"storePath\" : \"%s\" }", virtualHostType, _messageStorePath); final Map<String, String> contextMap = Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, blueprint); TestBrokerConfiguration config = getBrokerConfiguration(); config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, VirtualHostNode.TYPE, virtualHostNodeType); config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, VirtualHostNode.CONTEXT, contextMap); - config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, FileBasedVirtualHostNode.STORE_PATH, _configStorePath); + config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, JsonVirtualHostNode.STORE_PATH, _configStorePath); super.startBroker(); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java index 278de6cf41..2c38a04895 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java @@ -74,8 +74,7 @@ import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.TestMemoryVirtualHost; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.util.FileUtils; import org.codehaus.jackson.map.ObjectMapper; @@ -138,7 +137,7 @@ public class VirtualHostMessageStoreTest extends QpidTestCase ConfiguredObjectFactory factory = broker.getObjectFactory(); Map<String, Object> nodeAttributes = new HashMap<>(); nodeAttributes.put(ConfiguredObject.TYPE, getTestProfileVirtualHostNodeType()); - nodeAttributes.put(FileBasedVirtualHostNode.STORE_PATH, _storePath); + nodeAttributes.put(JsonVirtualHostNode.STORE_PATH, _storePath); nodeAttributes.put(VirtualHostNode.NAME, nodeName); _node = factory.create(VirtualHostNode.class, nodeAttributes, broker); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java index efbd68f9e0..71f911627e 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java @@ -36,7 +36,7 @@ import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; -import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHostImpl; import org.apache.qpid.server.virtualhostnode.memory.MemoryVirtualHostNode; import org.apache.qpid.systest.rest.QpidRestTestCase; import org.apache.qpid.test.utils.JMXTestUtils; @@ -97,7 +97,7 @@ public class MBeanLifeCycleTest extends QpidRestTestCase Map<String, Object> virtualhostData = new HashMap<>(); virtualhostData.put(VirtualHost.NAME, nodeName); - virtualhostData.put(VirtualHost.TYPE, ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); + virtualhostData.put(VirtualHost.TYPE, ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE); getRestTestHelper().submitRequest("virtualhost/" + nodeName + "/" + hostName, "PUT", virtualhostData, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java index 666409048c..3ac79076d6 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java @@ -77,8 +77,7 @@ public class Asserts ConfiguredObject.CONTEXT, ConfiguredObject.DESIRED_STATE, VirtualHost.SUPPORTED_QUEUE_TYPES, - VirtualHost.TYPE, - VirtualHost.MESSAGE_STORE_SETTINGS); + VirtualHost.TYPE); assertEquals("Unexpected value of attribute " + VirtualHost.NAME, virtualHostName, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java index 8004a91168..3e49f63cff 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java @@ -31,7 +31,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.test.utils.TestBrokerConfiguration; /** @@ -149,7 +149,7 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase Map<String, Object> nodeData = new HashMap<String, Object>(); nodeData.put(VirtualHostNode.NAME, nodeName); nodeData.put(VirtualHostNode.TYPE, storeType); - nodeData.put(FileBasedVirtualHostNode.STORE_PATH, configStorePath); + nodeData.put(JsonVirtualHostNode.STORE_PATH, configStorePath); getRestTestHelper().submitRequest("virtualhostnode/" + nodeName, "PUT", diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java index e287c9d5c1..da89772a22 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java @@ -30,10 +30,11 @@ import java.util.Map; import javax.jms.Session; import javax.servlet.http.HttpServletResponse; -import org.apache.qpid.server.virtualhost.TestMemoryVirtualHost; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHostImpl; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.Queue; @@ -43,7 +44,7 @@ import org.apache.qpid.server.queue.LastValueQueue; import org.apache.qpid.server.queue.PriorityQueue; import org.apache.qpid.server.queue.SortedQueue; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; + import org.apache.qpid.util.FileUtils; public class VirtualHostRestTest extends QpidRestTestCase @@ -534,13 +535,13 @@ public class VirtualHostRestTest extends QpidRestTestCase Map<String, Object> nodeData = new HashMap<>(); nodeData.put(VirtualHostNode.NAME, virtualHostName); nodeData.put(VirtualHostNode.TYPE, virtualHostNodeType); - nodeData.put(FileBasedVirtualHostNode.STORE_PATH, storePath); + nodeData.put(JsonVirtualHostNode.STORE_PATH, storePath); getRestTestHelper().submitRequest("virtualhostnode/" + virtualHostName, "PUT", nodeData, HttpServletResponse.SC_CREATED); Map<String, Object> virtualhostData = new HashMap<>(); virtualhostData.put(VirtualHost.NAME, virtualHostName); - virtualhostData.put(VirtualHost.TYPE, TestMemoryVirtualHost.VIRTUAL_HOST_TYPE); + virtualhostData.put(VirtualHost.TYPE, ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE); getRestTestHelper().submitRequest("virtualhost/" + virtualHostName + "/" + virtualHostName, "PUT", 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 4fd0695545..a7874155df 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 @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.apache.qpid.server.management.plugin.HttpManagement; @@ -49,7 +50,6 @@ import org.apache.qpid.server.security.access.FileAccessControlProviderConstants import org.apache.qpid.server.security.acl.AbstractACLTestCase; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; import org.apache.qpid.server.security.auth.manager.PlainPasswordDatabaseAuthenticationManager; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.systest.rest.QpidRestTestCase; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; @@ -982,7 +982,7 @@ public class BrokerACLTest extends QpidRestTestCase Map<String, Object> data = new HashMap<String, Object>(); data.put(VirtualHostNode.NAME, virtualHostNodeName); data.put(VirtualHostNode.TYPE, getTestProfileVirtualHostNodeType()); - data.put(FileBasedVirtualHostNode.STORE_PATH, getStoreLocation(virtualHostNodeName)); + data.put(JsonVirtualHostNode.STORE_PATH, getStoreLocation(virtualHostNodeName)); return getRestTestHelper().submitRequest("virtualhostnode/" + virtualHostNodeName, "PUT", data); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java index 92d163f05a..31f740c82e 100755 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java @@ -68,10 +68,9 @@ import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MemoryConfigurationStore; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode; import org.apache.qpid.url.URLSyntaxException; import org.apache.qpid.util.FileUtils; import org.apache.qpid.util.SystemUtils; @@ -251,7 +250,7 @@ public class QpidBrokerTestCase extends QpidTestCase configuration.setObjectAttribute(Port.class, TestBrokerConfiguration.ENTRY_NAME_JMX_PORT, Port.PORT, getManagementPort(actualPort) + JMXPORT_CONNECTORSERVER_OFFSET); String workDir = System.getProperty("QPID_WORK") + File.separator + TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST + File.separator + actualPort; - configuration.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, DurableConfigurationStore.STORE_PATH, workDir); + configuration.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, JsonVirtualHostNode.STORE_PATH, workDir); } return configuration; @@ -869,9 +868,11 @@ public class QpidBrokerTestCase extends QpidTestCase attributes.put(VirtualHostNode.TYPE, storeType); if (storeDir != null) { - attributes.put(FileBasedVirtualHostNode.STORE_PATH, storeDir); + attributes.put(JsonVirtualHostNode.STORE_PATH, storeDir); } + final String blueprint = getTestProfileVirtualHostNodeBlueprint(); + attributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, blueprint)); |
