summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-04-07 12:44:42 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-04-07 12:44:42 +0000
commit6121e960f95fe74b0a93cb3d1e27c7439d585eb3 (patch)
tree165a7d92f132bace4ee6bb542505cf471d069ad5 /qpid/java
parenta465268557507d5f0ac1b151f183c1cd294ad372 (diff)
downloadqpid-python-6121e960f95fe74b0a93cb3d1e27c7439d585eb3.tar.gz
QPID-5665 : [Java Broker] Unify VirtualHost model and implementation classes
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1585471 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java4
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHost.java65
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapter.java39
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapterFactory.java51
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java63
-rw-r--r--qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory2
-rw-r--r--qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory19
-rw-r--r--qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/VirtualHostTest.java29
-rw-r--r--qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AMQUnknownExchangeType.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java12
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java10
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java22
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java44
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapter.java38
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java (renamed from qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapterFactory.java)20
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java1092
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java33
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java85
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefaultQueueRegistry.java12
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRegistry.java12
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java1064
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueExistsException.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ReservedExchangeNameException.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java59
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java89
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java2
-rwxr-xr-xqpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java28
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java65
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostState.java (renamed from qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/State.java)2
-rw-r--r--qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory2
-rw-r--r--qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory19
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java46
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java41
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java4
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java78
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java20
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java2
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java4
-rw-r--r--qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionOpenMethodHandler.java8
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java19
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java31
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java37
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java4
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java2
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java18
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java6
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java7
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java34
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java9
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java4
-rwxr-xr-xqpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java4
56 files changed, 1436 insertions, 1942 deletions
diff --git a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
index 24d7513c5f..410ef941cd 100644
--- a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
+++ b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
@@ -28,7 +28,7 @@ import org.apache.qpid.server.jmx.MBeanProvider;
import org.apache.qpid.server.jmx.ManagedObject;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostFactory;
+import org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHost;
import org.apache.qpid.server.store.berkeleydb.BDBMessageStore;
import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
@@ -49,7 +49,7 @@ public class BDBHAMessageStoreManagerMBeanProvider implements MBeanProvider
@Override
public boolean isChildManageableByMBean(ConfiguredObject child)
{
- return (child instanceof VirtualHost && BDBHAVirtualHostFactory.TYPE.equals(child.getType()));
+ return (child instanceof VirtualHost && BDBHAVirtualHost.TYPE.equals(child.getType()));
}
@Override
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHost.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHost.java
index a58bc274a9..3bb44b3e9c 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHost.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHost.java
@@ -23,12 +23,16 @@ package org.apache.qpid.server.store.berkeleydb;
import java.util.HashMap;
import java.util.Map;
+import com.sleepycat.je.rep.StateChangeEvent;
+import com.sleepycat.je.rep.StateChangeListener;
import org.apache.log4j.Logger;
+
import org.apache.qpid.server.connection.IConnectionRegistry;
import org.apache.qpid.server.logging.messages.MessageStoreMessages;
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.ConfiguredObjectRecordRecoveverAndUpgrader;
import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.MessageStore;
@@ -37,30 +41,55 @@ import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironment
import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
import org.apache.qpid.server.virtualhost.MessageStoreRecoverer;
-import org.apache.qpid.server.virtualhost.State;
-import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-
-import com.sleepycat.je.rep.StateChangeEvent;
-import com.sleepycat.je.rep.StateChangeListener;
+import org.apache.qpid.server.virtualhost.VirtualHostState;
-public class BDBHAVirtualHost extends AbstractVirtualHost
+@ManagedObject( category = false, type = "BDB_HA" )
+public class BDBHAVirtualHost extends AbstractVirtualHost<BDBHAVirtualHost>
{
+ public static final String TYPE = "BDB_HA";
private static final Logger LOGGER = Logger.getLogger(BDBHAVirtualHost.class);
private BDBMessageStore _messageStore;
private MessageStoreLogSubject _messageStoreLogSubject;
- BDBHAVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- org.apache.qpid.server.security.SecurityManager parentSecurityManager,
- VirtualHost virtualHost)
+ BDBHAVirtualHost(final Map<String, Object> attributes, Broker<?> broker)
{
- super(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, virtualHost);
+ super(attributes, broker);
+ }
+
+
+ @Override
+ protected void validateAttributes()
+ {
+ super.validateAttributes();
+ Map<String, Object> attributes = getActualAttributes();
+ @SuppressWarnings("unchecked")
+ Map<String, Object> messageStoreSettings = (Map<String, Object>)attributes.get(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
+ if (messageStoreSettings == null)
+ {
+ throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + "' is required.");
+ }
+
+ validateAttribute(MessageStore.STORE_PATH, String.class, messageStoreSettings);
+ validateAttribute(ReplicatedEnvironmentFacadeFactory.GROUP_NAME, String.class, messageStoreSettings);
+ validateAttribute(ReplicatedEnvironmentFacadeFactory.NODE_NAME, String.class, messageStoreSettings);
+ validateAttribute(ReplicatedEnvironmentFacadeFactory.NODE_ADDRESS, String.class, messageStoreSettings);
+ validateAttribute(ReplicatedEnvironmentFacadeFactory.HELPER_ADDRESS, String.class, messageStoreSettings);
+ }
+
+ private void validateAttribute(String attrName, Class<?> clazz, Map<String, Object> attributes)
+ {
+ Object attr = attributes.get(attrName);
+ if(!clazz.isInstance(attr))
+ {
+ throw new IllegalArgumentException("Attribute '"+ attrName
+ +"' is required and must be of type "+clazz.getSimpleName()+".");
+ }
}
protected void initialiseStorage(VirtualHost virtualHost)
{
- setState(State.PASSIVE);
+ setState(VirtualHostState.PASSIVE);
_messageStoreLogSubject = new MessageStoreLogSubject(getName(), BDBMessageStore.class.getSimpleName());
_messageStore = new BDBMessageStore(new ReplicatedEnvironmentFacadeFactory());
@@ -92,7 +121,7 @@ public class BDBHAVirtualHost extends AbstractVirtualHost
return _messageStore;
}
- private void activate()
+ private void onMaster()
{
try
{
@@ -115,7 +144,7 @@ public class BDBHAVirtualHost extends AbstractVirtualHost
private void passivate()
{
- State finalState = State.ERRORED;
+ VirtualHostState finalState = VirtualHostState.ERRORED;
try
{
@@ -132,12 +161,12 @@ public class BDBHAVirtualHost extends AbstractVirtualHost
getExchangeRegistry().clearAndUnregisterMbeans();
getDtxRegistry().close();
- finalState = State.PASSIVE;
+ finalState = VirtualHostState.PASSIVE;
}
finally
{
setState(finalState);
- reportIfError(getState());
+ reportIfError(getVirtualHostState());
}
}
@@ -163,7 +192,7 @@ public class BDBHAVirtualHost extends AbstractVirtualHost
switch (state)
{
case MASTER:
- activate();
+ onMaster();
break;
case REPLICA:
passivate();
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapter.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapter.java
deleted file mode 100644
index 6d249ddc34..0000000000
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.store.berkeleydb;
-
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.ManagedObject;
-import org.apache.qpid.server.model.adapter.VirtualHostAdapter;
-
-import java.util.Map;
-import java.util.UUID;
-
-@ManagedObject( category = false, type = "BDB_HA" )
-public class BDBHAVirtualHostAdapter extends VirtualHostAdapter<BDBHAVirtualHostAdapter>
-{
- public BDBHAVirtualHostAdapter(final UUID id,
- final Map<String, Object> attributes,
- final Broker<?> broker)
- {
- super(id, attributes, broker);
- }
-}
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapterFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapterFactory.java
deleted file mode 100644
index 7d1d6ea664..0000000000
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostAdapterFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.store.berkeleydb;
-
-import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.ConfiguredObject;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-public class BDBHAVirtualHostAdapterFactory extends AbstractConfiguredObjectTypeFactory<BDBHAVirtualHostAdapter>
-{
-
- public BDBHAVirtualHostAdapterFactory()
- {
- super(BDBHAVirtualHostAdapter.class);
- }
-
- @Override
- public BDBHAVirtualHostAdapter createInstance(final Map<String, Object> attributes,
- final ConfiguredObject<?>... parents)
- {
- Map<String,Object> attributesWithoutId = new HashMap<String, Object>(attributes);
- Object idObj = attributesWithoutId.remove(ConfiguredObject.ID);
- UUID id = idObj == null ? UUID.randomUUID() : idObj instanceof UUID ? (UUID) idObj : UUID.fromString(idObj.toString());
- final Broker broker = getParent(Broker.class, parents);
- return new BDBHAVirtualHostAdapter(id, attributesWithoutId, broker);
- }
-
-
-}
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java
index 6fb84b8a4d..2a28a61eca 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java
@@ -1,4 +1,4 @@
-package org.apache.qpid.server.store.berkeleydb;/*
+/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -18,64 +18,31 @@ package org.apache.qpid.server.store.berkeleydb;/*
* under the License.
*
*/
+package org.apache.qpid.server.store.berkeleydb;
-import java.util.Map;
+import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
-import org.apache.qpid.server.stats.StatisticsGatherer;
-import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory;
-import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
-public class BDBHAVirtualHostFactory implements VirtualHostFactory
+public class BDBHAVirtualHostFactory extends AbstractConfiguredObjectTypeFactory<BDBHAVirtualHost>
{
- public static final String TYPE = "BDB_HA";
-
- @Override
- public String getType()
+ public BDBHAVirtualHostFactory()
{
- return TYPE;
+ super(BDBHAVirtualHost.class);
}
@Override
- public VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- org.apache.qpid.server.security.SecurityManager parentSecurityManager,
- org.apache.qpid.server.model.VirtualHost virtualHost)
+ public BDBHAVirtualHost createInstance(final Map<String, Object> attributes,
+ final ConfiguredObject<?>... parents)
{
- return new BDBHAVirtualHost(virtualHostRegistry,
- brokerStatisticsGatherer,
- parentSecurityManager,
- virtualHost);
+ final Broker broker = getParent(Broker.class, parents);
+ return new BDBHAVirtualHost(attributes, broker);
}
- @Override
- public void validateAttributes(Map<String, Object> attributes)
- {
- @SuppressWarnings("unchecked")
- Map<String, Object> messageStoreSettings = (Map<String, Object>)attributes.get(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
- if (messageStoreSettings == null)
- {
- throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + "' is required.");
- }
-
- validateAttribute(MessageStore.STORE_PATH, String.class, messageStoreSettings);
- validateAttribute(ReplicatedEnvironmentFacadeFactory.GROUP_NAME, String.class, messageStoreSettings);
- validateAttribute(ReplicatedEnvironmentFacadeFactory.NODE_NAME, String.class, messageStoreSettings);
- validateAttribute(ReplicatedEnvironmentFacadeFactory.NODE_ADDRESS, String.class, messageStoreSettings);
- validateAttribute(ReplicatedEnvironmentFacadeFactory.HELPER_ADDRESS, String.class, messageStoreSettings);
- }
-
- private void validateAttribute(String attrName, Class<?> clazz, Map<String, Object> attributes)
- {
- Object attr = attributes.get(attrName);
- if(!clazz.isInstance(attr))
- {
- throw new IllegalArgumentException("Attribute '"+ attrName
- +"' is required and must be of type "+clazz.getSimpleName()+".");
- }
- }
}
diff --git a/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory b/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
index ab12289814..0f8848cb74 100644
--- a/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
+++ b/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
@@ -16,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostAdapterFactory
+org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostFactory
diff --git a/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory b/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory
deleted file mode 100644
index 0f8848cb74..0000000000
--- a/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostFactory
diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/VirtualHostTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/VirtualHostTest.java
index c702e557c2..70882ca45b 100644
--- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/VirtualHostTest.java
+++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/VirtualHostTest.java
@@ -20,8 +20,18 @@
*/
package org.apache.qpid.server.store.berkeleydb;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
import com.sleepycat.je.rep.ReplicatedEnvironment;
import com.sleepycat.je.rep.ReplicationConfig;
+
import org.apache.qpid.server.configuration.ConfigurationEntryStore;
import org.apache.qpid.server.configuration.RecovererProvider;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
@@ -38,15 +48,6 @@ import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.test.utils.QpidTestCase;
import org.apache.qpid.util.FileUtils;
-import java.io.File;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
public class VirtualHostTest extends QpidTestCase
{
@@ -54,7 +55,7 @@ public class VirtualHostTest extends QpidTestCase
private StatisticsGatherer _statisticsGatherer;
private RecovererProvider _recovererProvider;
private File _bdbStorePath;
- private VirtualHost<?> _host;
+ private VirtualHost<?,?,?> _host;
private ConfigurationEntryStore _store;
@Override
@@ -117,14 +118,14 @@ public class VirtualHostTest extends QpidTestCase
Map<String, Object> virtualHostAttributes = new HashMap<String, Object>();
virtualHostAttributes.put(VirtualHost.NAME, virtualHostName);
- virtualHostAttributes.put(VirtualHost.TYPE, BDBHAVirtualHostFactory.TYPE);
+ virtualHostAttributes.put(VirtualHost.TYPE, BDBHAVirtualHost.TYPE);
virtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
_host = createHost(virtualHostAttributes);
_host.setDesiredState(State.INITIALISING, State.ACTIVE);
assertEquals("Unexpected virtual host name", virtualHostName, _host.getName());
- assertEquals("Unexpected host type", BDBHAVirtualHostFactory.TYPE, _host.getType());
+ assertEquals("Unexpected host type", BDBHAVirtualHost.TYPE, _host.getType());
assertEquals(messageStoreSettings, _host.getMessageStoreSettings());
@@ -141,14 +142,14 @@ public class VirtualHostTest extends QpidTestCase
}
- private VirtualHost<?> createHost(Map<String, Object> attributes)
+ private VirtualHost<?,?,?> createHost(Map<String, Object> attributes)
{
ConfiguredObjectFactory factory = new ConfiguredObjectFactory();
ConfiguredObjectTypeFactory vhostFactory =
factory.getConfiguredObjectTypeFactory(VirtualHost.class, attributes);
attributes = new HashMap<String, Object>(attributes);
attributes.put(ConfiguredObject.ID, UUID.randomUUID());
- return (VirtualHost<?>) vhostFactory.create(attributes,_broker);
+ return (VirtualHost<?,?,?>) vhostFactory.create(attributes,_broker);
}
}
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 7711ce1bf6..78d58224f9 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
@@ -117,7 +117,7 @@ public class HATestClusterCreator
TestBrokerConfiguration brokerConfiguration = _testcase.getBrokerConfiguration(brokerPort);
brokerConfiguration.addJmxManagementConfiguration();
- brokerConfiguration.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.TYPE, BDBHAVirtualHostFactory.TYPE);
+ brokerConfiguration.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.TYPE, BDBHAVirtualHost.TYPE);
brokerConfiguration.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
brokerPort = _testcase.getNextAvailable(bdbPort + 1);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AMQUnknownExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AMQUnknownExchangeType.java
index 2e39973c11..d5daf22a52 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AMQUnknownExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AMQUnknownExchangeType.java
@@ -32,7 +32,7 @@ package org.apache.qpid.server.exchange;
* @todo Represent coding error, where unknown exchange type is requested by passing a string parameter. Use a type safe
* enum for the exchange type, or replace with IllegalArgumentException. Should be runtime.
*/
-public class AMQUnknownExchangeType extends Exception
+public class AMQUnknownExchangeType extends RuntimeException
{
public AMQUnknownExchangeType(String message, Throwable cause)
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java
index 2a014887d7..95b044d241 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/BindingLogSubject.java
@@ -20,10 +20,12 @@
*/
package org.apache.qpid.server.logging.subjects;
+import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.BINDING_FORMAT;
+
import org.apache.qpid.server.exchange.ExchangeImpl;
+import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
-
-import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.BINDING_FORMAT;
+import org.apache.qpid.server.virtualhost.VirtualHost;
public class BindingLogSubject extends AbstractLogSubject
{
@@ -40,9 +42,11 @@ public class BindingLogSubject extends AbstractLogSubject
public BindingLogSubject(String routingKey, ExchangeImpl exchange,
AMQQueue queue)
{
+ VirtualHost virtualHost = queue.getVirtualHost();
+ ExchangeType exchangeType = exchange.getExchangeType();
setLogStringWithFormat(BINDING_FORMAT,
- queue.getVirtualHost().getName(),
- exchange.getExchangeType().getType(),
+ virtualHost.getName(),
+ exchangeType.getType(),
exchange.getName(),
queue.getName(),
routingKey);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
index 7292bd1a9e..26c48fd92e 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
@@ -20,6 +20,9 @@
*/
package org.apache.qpid.server.model;
+import java.net.SocketAddress;
+import java.util.Collection;
+
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.EventLoggerProvider;
@@ -29,9 +32,6 @@ import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-import java.net.SocketAddress;
-import java.util.Collection;
-
@ManagedObject( defaultType = "adapter" )
public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventLoggerProvider, StatisticsGatherer
{
@@ -178,7 +178,7 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL
//children
- Collection < VirtualHost<?> > getVirtualHosts();
+ Collection < VirtualHost<?,?,?> > getVirtualHosts();
Collection<Port<?>> getPorts();
@@ -201,7 +201,7 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL
AuthenticationProvider<?> findAuthenticationProviderByName(String authenticationProviderName);
- VirtualHost<?> findVirtualHostByName(String name);
+ VirtualHost<?,?,?> findVirtualHostByName(String name);
KeyStore<?> findKeyStoreByName(String name);
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 77c06349bc..0a262b0c31 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
@@ -20,17 +20,17 @@
*/
package org.apache.qpid.server.model;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.message.MessageInstance;
-import org.apache.qpid.server.store.MessageStore;
-
import java.security.AccessControlException;
import java.util.Collection;
import java.util.Map;
import java.util.UUID;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.message.MessageInstance;
+import org.apache.qpid.server.store.MessageStore;
+
@ManagedObject( managesChildren = true, defaultType = "STANDARD")
-public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<X>
+public interface VirtualHost<X extends VirtualHost<X, Q, E>, Q extends Queue<?>, E extends Exchange<?> > extends ConfiguredObject<X>
{
String QUEUE_ALERT_REPEAT_GAP = "queue.alertRepeatGap";
@@ -144,17 +144,17 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
//children
Collection<VirtualHostAlias> getAliases();
Collection<Connection> getConnections();
- Collection<Queue> getQueues();
- Collection<Exchange> getExchanges();
+ Collection<Q> getQueues();
+ Collection<E> getExchanges();
- Exchange createExchange(String name, State initialState, boolean durable,
+ E createExchange(String name, State initialState, boolean durable,
LifetimePolicy lifetime, String type, Map<String, Object> attributes)
throws AccessControlException, IllegalArgumentException;
- Queue createQueue(Map<String, Object> attributes)
+ Q createQueue(Map<String, Object> attributes)
throws AccessControlException, IllegalArgumentException;
- Collection<String> getExchangeTypes();
+ Collection<String> getExchangeTypeNames();
public static interface Transaction
{
@@ -176,7 +176,7 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
// TODO - remove this
TaskExecutor getTaskExecutor();
- Exchange getExchange(UUID id);
+ E getExchange(UUID id);
MessageStore getMessageStore();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
index 98af4e08dc..8845b278d8 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
@@ -20,7 +20,25 @@
*/
package org.apache.qpid.server.model.adapter;
+import java.lang.reflect.Type;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.security.AccessControlException;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.UUID;
+import java.util.regex.Pattern;
+
+import javax.security.auth.Subject;
+
import org.apache.log4j.Logger;
+
import org.apache.qpid.common.QpidProperties;
import org.apache.qpid.server.BrokerOptions;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
@@ -34,7 +52,6 @@ import org.apache.qpid.server.model.port.AmqpPort;
import org.apache.qpid.server.model.port.PortWithAuthProvider;
import org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory;
import org.apache.qpid.server.plugin.MessageStoreFactory;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
import org.apache.qpid.server.security.FileKeyStore;
import org.apache.qpid.server.security.FileTrustStore;
import org.apache.qpid.server.security.SecurityManager;
@@ -47,15 +64,6 @@ import org.apache.qpid.server.util.MapValueConverter;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import org.apache.qpid.util.SystemUtils;
-import javax.security.auth.Subject;
-import java.lang.reflect.Type;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.security.AccessControlException;
-import java.security.PrivilegedAction;
-import java.util.*;
-import java.util.regex.Pattern;
-
@ManagedObject(category = false, type = "adapter")
public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> implements Broker<BrokerAdapter>, ConfigurationChangeListener, StatisticsGatherer, StatisticsGatherer.Source
{
@@ -152,7 +160,7 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
private final VirtualHostRegistry _virtualHostRegistry;
private final LogRecorder _logRecorder;
- private final Map<String, VirtualHost<?>> _vhostAdapters = new HashMap<String, VirtualHost<?>>();
+ private final Map<String, VirtualHost<?,?,?>> _vhostAdapters = new HashMap<String, VirtualHost<?,?,?>>();
private final Map<UUID, Port<?>> _portAdapters = new HashMap<UUID, Port<?>>();
private final Map<Port, Integer> _stillInUsePortNumbers = new HashMap<Port, Integer>();
private final Map<UUID, AuthenticationProvider<?>> _authenticationProviders = new HashMap<UUID, AuthenticationProvider<?>>();
@@ -418,11 +426,11 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
return (Long) getAttribute(VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN);
}
- public Collection<VirtualHost<?>> getVirtualHosts()
+ public Collection<VirtualHost<?,?,?>> getVirtualHosts()
{
synchronized(_vhostAdapters)
{
- return new ArrayList<VirtualHost<?>>(_vhostAdapters.values());
+ return new ArrayList<VirtualHost<?,?,?>>(_vhostAdapters.values());
}
}
@@ -489,7 +497,7 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
{
ConfiguredObjectTypeFactory virtualHostFactory =
_objectFactory.getConfiguredObjectTypeFactory(VirtualHost.class, attributes);
- final VirtualHostAdapter virtualHostAdapter = (VirtualHostAdapter) virtualHostFactory.create(attributes,this);
+ final VirtualHost virtualHost = (VirtualHost) virtualHostFactory.create(attributes,this);
// permission has already been granted to create the virtual host
// disable further access check on other operations, e.g. create exchange
@@ -498,11 +506,11 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
@Override
public Object run()
{
- virtualHostAdapter.setDesiredState(State.INITIALISING, State.ACTIVE);
+ virtualHost.setDesiredState(State.INITIALISING, State.ACTIVE);
return null;
}
});
- return virtualHostAdapter;
+ return virtualHost;
}
private boolean deleteVirtualHost(final VirtualHost vhost) throws AccessControlException, IllegalStateException
@@ -972,7 +980,7 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
}
else if(SUPPORTED_VIRTUALHOST_TYPES.equals(name))
{
- return VirtualHostFactory.TYPES.get();
+ return _objectFactory.getSupportedTypes(VirtualHost.class);
}
else if(SUPPORTED_AUTHENTICATION_PROVIDERS.equals(name))
{
@@ -1028,7 +1036,7 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
return removedAuthenticationProvider != null;
}
- private void addVirtualHost(VirtualHost<?> virtualHost)
+ private void addVirtualHost(VirtualHost<?,?,?> virtualHost)
{
synchronized (_vhostAdapters)
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
index d626252cad..fb9fde9b02 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
@@ -31,7 +31,7 @@ import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.protocol.AMQSessionModel;
import org.apache.qpid.server.protocol.SessionModelListener;
-final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter> implements Connection<ConnectionAdapter>,
+public final class ConnectionAdapter extends AbstractConfiguredObject<ConnectionAdapter> implements Connection<ConnectionAdapter>,
SessionModelListener
{
private AMQConnectionModel _connection;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapter.java
deleted file mode 100644
index 4577bd94a3..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapter.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.model.adapter;
-
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.ManagedObject;
-
-import java.util.Map;
-import java.util.UUID;
-
-@ManagedObject( category = false, type = "STANDARD")
-public class StandardVirtualHostAdapter extends VirtualHostAdapter<StandardVirtualHostAdapter>
-{
- public StandardVirtualHostAdapter(final UUID id,
- final Map<String, Object> attributes,
- final Broker<?> broker)
- {
- super(id, attributes, broker);
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapterFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java
index 5dc0a2decb..64845e94f3 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostAdapterFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java
@@ -20,31 +20,27 @@
*/
package org.apache.qpid.server.model.adapter;
+import java.util.Map;
+
import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-public class StandardVirtualHostAdapterFactory extends AbstractConfiguredObjectTypeFactory<StandardVirtualHostAdapter>
+public class StandardVirtualHostFactory extends AbstractConfiguredObjectTypeFactory<StandardVirtualHost>
{
- public StandardVirtualHostAdapterFactory()
+ public StandardVirtualHostFactory()
{
- super(StandardVirtualHostAdapter.class);
+ super(StandardVirtualHost.class);
}
@Override
- public StandardVirtualHostAdapter createInstance(final Map<String, Object> attributes,
+ public StandardVirtualHost createInstance(final Map<String, Object> attributes,
final ConfiguredObject<?>... parents)
{
- Map<String,Object> attributesWithoutId = new HashMap<String, Object>(attributes);
- Object idObj = attributesWithoutId.remove(ConfiguredObject.ID);
- UUID id = idObj == null ? UUID.randomUUID() : idObj instanceof UUID ? (UUID) idObj : UUID.fromString(idObj.toString());
final Broker broker = getParent(Broker.class, parents);
- return new StandardVirtualHostAdapter(id, attributesWithoutId, broker);
+ return new StandardVirtualHost(attributes, broker);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
deleted file mode 100644
index 25009de748..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
+++ /dev/null
@@ -1,1092 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.model.adapter;
-
-import org.apache.log4j.Logger;
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
-import org.apache.qpid.server.exchange.ExchangeImpl;
-import org.apache.qpid.server.message.MessageInstance;
-import org.apache.qpid.server.message.ServerMessage;
-import org.apache.qpid.server.model.*;
-import org.apache.qpid.server.plugin.ExchangeType;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
-import org.apache.qpid.server.protocol.AMQConnectionModel;
-import org.apache.qpid.server.queue.AMQQueue;
-import org.apache.qpid.server.queue.ConflationQueue;
-import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.txn.LocalTransaction;
-import org.apache.qpid.server.txn.ServerTransaction;
-import org.apache.qpid.server.util.MapValueConverter;
-import org.apache.qpid.server.util.ParameterizedTypeImpl;
-import org.apache.qpid.server.virtualhost.ExchangeExistsException;
-import org.apache.qpid.server.virtualhost.QueueExistsException;
-import org.apache.qpid.server.virtualhost.ReservedExchangeNameException;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
-import org.apache.qpid.server.virtualhost.VirtualHostListener;
-import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-
-import java.lang.reflect.Type;
-import java.security.AccessControlException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-@ManagedObject( category = false, type = "STANDARD")
-public class VirtualHostAdapter<X extends VirtualHostAdapter<X>> extends AbstractConfiguredObject<X> implements VirtualHost<X>, VirtualHostListener
-{
- private static final Logger LOGGER = Logger.getLogger(VirtualHostAdapter.class);
-
- @SuppressWarnings("serial")
- public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{
- put(NAME, String.class);
- put(TYPE, String.class);
- put(STATE, State.class);
-
- put(QUEUE_ALERT_REPEAT_GAP, Long.class);
- put(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Long.class);
- put(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Long.class);
- put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Long.class);
- put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Long.class);
- put(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Boolean.class);
- put(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Integer.class);
- put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class);
- put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class);
-
- put(HOUSEKEEPING_CHECK_PERIOD, Long.class);
- put(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Long.class);
- put(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Long.class);
- put(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class);
- put(STORE_TRANSACTION_OPEN_TIMEOUT_WARN, Long.class);
-
- put(MESSAGE_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
- put(CONFIGURATION_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
-
- }});
-
- @SuppressWarnings("serial")
- private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{
- put(HOUSE_KEEPING_THREAD_COUNT, Runtime.getRuntime().availableProcessors());
- }});
-
- private org.apache.qpid.server.virtualhost.VirtualHost _virtualHost;
-
- private final Map<AMQConnectionModel, ConnectionAdapter> _connectionAdapters =
- new HashMap<AMQConnectionModel, ConnectionAdapter>();
-
- private final Broker<?> _broker;
- private final List<VirtualHostAlias> _aliases = new ArrayList<VirtualHostAlias>();
-
- public VirtualHostAdapter(UUID id,
- Map<String, Object> attributes,
- Broker<?> broker)
- {
- super(Collections.<Class<? extends ConfiguredObject>, ConfiguredObject<?>>singletonMap(Broker.class,broker),
- DEFAULTS,
- combineIdWithAttributes(id, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES, false)),
- broker.getTaskExecutor(),
- false);
-
- _broker = broker;
- validateAttributes();
- }
-
- private void validateAttributes()
- {
- String name = getName();
- if (name == null || "".equals(name.trim()))
- {
- throw new IllegalConfigurationException("Virtual host name must be specified");
- }
- String type = getType();
- if (type == null || "".equals(type.trim()))
- {
- throw new IllegalConfigurationException("Virtual host type must be specified");
- }
- final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type);
- if(factory == null)
- {
- throw new IllegalArgumentException("Unknown virtual host type '"+ type +"'. Valid types are: " + VirtualHostFactory.TYPES.get());
- }
- factory.validateAttributes(getActualAttributes());
- }
-
- public Collection<VirtualHostAlias> getAliases()
- {
- return Collections.unmodifiableCollection(_aliases);
- }
-
- public Collection<Connection> getConnections()
- {
- synchronized(_connectionAdapters)
- {
- return new ArrayList<Connection>(_connectionAdapters.values());
- }
-
- }
-
- /**
- * Retrieve the ConnectionAdapter instance keyed by the AMQConnectionModel from this VirtualHost.
- * @param connection the AMQConnectionModel used to index the ConnectionAdapter.
- * @return the requested ConnectionAdapter.
- */
- ConnectionAdapter getConnectionAdapter(AMQConnectionModel connection)
- {
- synchronized (_connectionAdapters)
- {
- return _connectionAdapters.get(connection);
- }
- }
-
- public Collection<Queue> getQueues()
- {
- return _virtualHost == null ? Collections.<Queue>emptyList() : new ArrayList<Queue>(_virtualHost.getQueues());
- }
-
- public Collection<Exchange> getExchanges()
- {
- return _virtualHost == null ? Collections.<Exchange>emptyList() : new ArrayList<Exchange>(_virtualHost.getExchanges());
- }
-
-
- public Exchange createExchange(Map<String, Object> attributes)
- throws AccessControlException, IllegalArgumentException
- {
- attributes = new HashMap<String, Object>(attributes);
-
- String name = MapValueConverter.getStringAttribute(Exchange.NAME, attributes, null);
- State state = MapValueConverter.getEnumAttribute(State.class, Exchange.STATE, attributes, State.ACTIVE);
- boolean durable = MapValueConverter.getBooleanAttribute(Exchange.DURABLE, attributes, false);
- LifetimePolicy lifetime = MapValueConverter.getEnumAttribute(LifetimePolicy.class, Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
- String type = MapValueConverter.getStringAttribute(Exchange.TYPE, attributes, null);
-
- attributes.remove(Exchange.NAME);
- attributes.remove(Exchange.STATE);
- attributes.remove(Exchange.DURABLE);
- attributes.remove(Exchange.LIFETIME_POLICY);
- attributes.remove(Exchange.TYPE);
-
- return createExchange(name, state, durable, lifetime, type, attributes);
- }
-
- public Exchange createExchange(final String name,
- final State initialState,
- final boolean durable,
- final LifetimePolicy lifetime,
- final String type,
- final Map<String, Object> attributes)
- throws AccessControlException, IllegalArgumentException
- {
- checkVHostStateIsActive();
-
- try
- {
- String alternateExchange = null;
- if(attributes.containsKey(Exchange.ALTERNATE_EXCHANGE))
- {
- Object altExchangeObject = attributes.get(Exchange.ALTERNATE_EXCHANGE);
- if(altExchangeObject instanceof Exchange)
- {
- alternateExchange = ((Exchange) altExchangeObject).getName();
- }
- else if(altExchangeObject instanceof UUID)
- {
- for(Exchange ex : getExchanges())
- {
- if(altExchangeObject.equals(ex.getId()))
- {
- alternateExchange = ex.getName();
- break;
- }
- }
- }
- else if(altExchangeObject instanceof String)
- {
-
- for(Exchange ex : getExchanges())
- {
- if(altExchangeObject.equals(ex.getName()))
- {
- alternateExchange = ex.getName();
- break;
- }
- }
- if(alternateExchange == null)
- {
- try
- {
- UUID id = UUID.fromString(altExchangeObject.toString());
- for(Exchange ex : getExchanges())
- {
- if(id.equals(ex.getId()))
- {
- alternateExchange = ex.getName();
- break;
- }
- }
- }
- catch(IllegalArgumentException e)
- {
- // ignore
- }
-
- }
- }
- }
- Map<String,Object> attributes1 = new HashMap<String, Object>();
-
- attributes1.put(ID, null);
- attributes1.put(NAME, name);
- attributes1.put(Exchange.TYPE, type);
- attributes1.put(Exchange.DURABLE, durable);
- attributes1.put(Exchange.LIFETIME_POLICY,
- lifetime != null && lifetime != LifetimePolicy.PERMANENT
- ? LifetimePolicy.DELETE_ON_NO_LINKS : LifetimePolicy.PERMANENT);
- attributes1.put(Exchange.ALTERNATE_EXCHANGE, alternateExchange);
- ExchangeImpl exchange = _virtualHost.createExchange(attributes1);
- return exchange;
-
- }
- catch(ExchangeExistsException e)
- {
- throw new IllegalArgumentException("Exchange with name '" + name + "' already exists");
- }
- catch(ReservedExchangeNameException e)
- {
- throw new UnsupportedOperationException("'" + name + "' is a reserved exchange name");
- }
- catch(UnknownExchangeException e)
- {
- throw new IllegalArgumentException("Alternate Exchange with name '" + e.getExchangeName() + "' does not exist");
- }
- catch(AMQUnknownExchangeType e)
- {
- throw new IllegalArgumentException(e);
- }
- }
-
- public Queue createQueue(Map<String, Object> attributes)
- throws AccessControlException, IllegalArgumentException
- {
- checkVHostStateIsActive();
-
- if (attributes.containsKey(Queue.QUEUE_TYPE))
- {
- String typeAttribute = MapValueConverter.getStringAttribute(Queue.QUEUE_TYPE, attributes, null);
- QueueType queueType = null;
- try
- {
- queueType = QueueType.valueOf(typeAttribute.toUpperCase());
- }
- catch(Exception e)
- {
- throw new IllegalArgumentException("Unsupported queue type :" + typeAttribute);
- }
- if (queueType == QueueType.LVQ && attributes.get(Queue.LVQ_KEY) == null)
- {
- attributes.put(Queue.LVQ_KEY, ConflationQueue.DEFAULT_LVQ_KEY);
- }
- else if (queueType == QueueType.PRIORITY && attributes.get(Queue.PRIORITIES) == null)
- {
- attributes.put(Queue.PRIORITIES, 10);
- }
- else if (queueType == QueueType.SORTED && attributes.get(Queue.SORT_KEY) == null)
- {
- throw new IllegalArgumentException("Sort key is not specified for sorted queue");
- }
- }
-
-
-
- try
- {
-
- AMQQueue<?> queue = _virtualHost.createQueue(attributes);
-
-
- return queue;
-
-
- }
- catch(QueueExistsException qe)
- {
- throw new IllegalArgumentException("Queue with name "+MapValueConverter.getStringAttribute(Queue.NAME,attributes)+" already exists");
- }
- }
-
- public String setName(final String currentName, final String desiredName)
- throws IllegalStateException, AccessControlException
- {
- throw new IllegalStateException();
- }
-
-
- public String getType()
- {
- return (String)getAttribute(TYPE);
- }
-
- public String setType(final String currentType, final String desiredType)
- throws IllegalStateException, AccessControlException
- {
- throw new IllegalStateException();
- }
-
-
- @Override
- public State getState()
- {
- if (_virtualHost == null)
- {
- State state = (State)super.getAttribute(STATE);
- if (state == null)
- {
- return State.INITIALISING;
- }
- return state;
- }
- else
- {
- org.apache.qpid.server.virtualhost.State implementationState = _virtualHost.getState();
- switch(implementationState)
- {
- case INITIALISING:
- return State.INITIALISING;
- case ACTIVE:
- return State.ACTIVE;
- case PASSIVE:
- return State.REPLICA;
- case STOPPED:
- return State.STOPPED;
- case ERRORED:
- return State.ERRORED;
- default:
- throw new IllegalStateException("Unsupported state:" + implementationState);
- }
- }
- }
-
- public boolean isDurable()
- {
- return true;
- }
-
- public void setDurable(final boolean durable)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- public LifetimePolicy getLifetimePolicy()
- {
- return LifetimePolicy.PERMANENT;
- }
-
- public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- public long getTimeToLive()
- {
- return 0;
- }
-
- public long setTimeToLive(final long expected, final long desired)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- @Override
- public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
- {
- if(clazz == Exchange.class)
- {
- return (Collection<C>) getExchanges();
- }
- else if(clazz == Queue.class)
- {
- return (Collection<C>) getQueues();
- }
- else if(clazz == Connection.class)
- {
- return (Collection<C>) getConnections();
- }
- else if(clazz == VirtualHostAlias.class)
- {
- return (Collection<C>) getAliases();
- }
- else
- {
- return Collections.emptySet();
- }
- }
-
- @Override
- public <C extends ConfiguredObject> C addChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
- {
- if(childClass == Exchange.class)
- {
- createExchange(attributes);
-
- // return null to avoid double notification of VirtualHostMBean
- // as we already notify it in the exchangeRegistered
- return null;
- }
- else if(childClass == Queue.class)
- {
- createQueue(attributes);
-
- // return null to avoid double notification of VirtualHostMBean
- // as we already notify it in the queueRegistered
- return null;
- }
- else if(childClass == VirtualHostAlias.class)
- {
- throw new UnsupportedOperationException();
- }
- else if(childClass == Connection.class)
- {
- throw new UnsupportedOperationException();
- }
- throw new IllegalArgumentException("Cannot create a child of class " + childClass.getSimpleName());
- }
-
- public void exchangeRegistered(ExchangeImpl exchange)
- {
- childAdded(exchange);
- }
-
-
- public void exchangeUnregistered(ExchangeImpl exchange)
- {
- childRemoved(exchange);
- }
-
- public void queueRegistered(AMQQueue queue)
- {
- childAdded(queue);
- }
-
- public void queueUnregistered(AMQQueue queue)
- {
- childRemoved(queue);
- }
-
- public void connectionRegistered(AMQConnectionModel connection)
- {
- ConnectionAdapter adapter = null;
- synchronized (_connectionAdapters)
- {
- if(!_connectionAdapters.containsKey(connection))
- {
- adapter = new ConnectionAdapter(connection, getTaskExecutor());
- _connectionAdapters.put(connection, adapter);
-
- }
-
- }
- if(adapter != null)
- {
- childAdded(adapter);
- }
- }
-
- public void connectionUnregistered(AMQConnectionModel connection)
- {
-
- ConnectionAdapter adapter;
- synchronized (_connectionAdapters)
- {
- adapter = _connectionAdapters.remove(connection);
-
- }
-
- if(adapter != null)
- {
- // Call getSessions() first to ensure that any SessionAdapter children are cleanly removed and any
- // corresponding ConfigurationChangeListener childRemoved() callback is called for child SessionAdapters.
- adapter.getSessions();
-
- childRemoved(adapter);
- }
- }
-
- public Collection<String> getExchangeTypes()
- {
- Collection<ExchangeType<? extends ExchangeImpl>> types =
- _virtualHost.getExchangeTypes();
-
- Collection<String> exchangeTypes = new ArrayList<String>();
-
- for(ExchangeType<? extends ExchangeImpl> type : types)
- {
- exchangeTypes.add(type.getType());
- }
- return Collections.unmodifiableCollection(exchangeTypes);
- }
-
- public void executeTransaction(TransactionalOperation op)
- {
- MessageStore store = _virtualHost.getMessageStore();
- final LocalTransaction txn = new LocalTransaction(store);
-
- op.withinTransaction(new Transaction()
- {
- public void dequeue(final MessageInstance entry)
- {
- if(entry.acquire())
- {
- txn.dequeue(entry.getOwningResource(), entry.getMessage(), new ServerTransaction.Action()
- {
- public void postCommit()
- {
- entry.delete();
- }
-
- public void onRollback()
- {
- }
- });
- }
- }
-
- public void copy(MessageInstance entry, Queue queue)
- {
- final ServerMessage message = entry.getMessage();
- final AMQQueue toQueue = (AMQQueue)queue;
-
- txn.enqueue(toQueue, message, new ServerTransaction.Action()
- {
- public void postCommit()
- {
- toQueue.enqueue(message, null);
- }
-
- public void onRollback()
- {
- }
- });
-
- }
-
- public void move(final MessageInstance entry, Queue queue)
- {
- final ServerMessage message = entry.getMessage();
- final AMQQueue toQueue = (AMQQueue)queue;
- if(entry.acquire())
- {
- txn.enqueue(toQueue, message,
- new ServerTransaction.Action()
- {
-
- public void postCommit()
- {
- toQueue.enqueue(message, null);
- }
-
- public void onRollback()
- {
- entry.release();
- }
- });
- txn.dequeue(entry.getOwningResource(), message,
- new ServerTransaction.Action()
- {
-
- public void postCommit()
- {
- entry.delete();
- }
-
- public void onRollback()
- {
-
- }
- });
- }
- }
-
- });
- txn.commit();
- }
-
- org.apache.qpid.server.virtualhost.VirtualHost getVirtualHost()
- {
- return _virtualHost;
- }
-
- @Override
- public Object getAttribute(String name)
- {
- if(ID.equals(name))
- {
- return getId();
- }
- else if(STATE.equals(name))
- {
- return getState();
- }
- else if(DURABLE.equals(name))
- {
- return isDurable();
- }
- else if(LIFETIME_POLICY.equals(name))
- {
- return LifetimePolicy.PERMANENT;
- }
- else if(QUEUE_ALERT_REPEAT_GAP.equals(name))
- {
- return getAttribute(QUEUE_ALERT_REPEAT_GAP, Broker.QUEUE_ALERT_REPEAT_GAP);
- }
- else if(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE.equals(name))
- {
- return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE);
- }
- else if(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE.equals(name))
- {
- return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE);
- }
- else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name))
- {
- return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES);
- }
- else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name))
- {
- return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES);
- }
- else if(QUEUE_DEAD_LETTER_QUEUE_ENABLED.equals(name))
- {
- return getAttribute(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED);
- }
- else if(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS.equals(name))
- {
- return getAttribute(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS);
- }
- else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name))
- {
- return getAttribute(QUEUE_FLOW_CONTROL_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES);
- }
- else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name))
- {
- return getAttribute(QUEUE_FLOW_RESUME_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES);
- }
- else if(HOUSEKEEPING_CHECK_PERIOD.equals(name))
- {
- return getAttribute(HOUSEKEEPING_CHECK_PERIOD, Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD);
- }
- else if(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE.equals(name))
- {
- return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
- }
- else if(STORE_TRANSACTION_IDLE_TIMEOUT_WARN.equals(name))
- {
- return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN);
- }
- else if(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE.equals(name))
- {
- return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE);
- }
- else if(STORE_TRANSACTION_OPEN_TIMEOUT_WARN.equals(name))
- {
- return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN);
- }
- else if (_virtualHost != null)
- {
- if(SUPPORTED_EXCHANGE_TYPES.equals(name))
- {
- List<String> types = new ArrayList<String>();
- for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeTypes())
- {
- types.add(type.getType());
- }
- return Collections.unmodifiableCollection(types);
- }
- else if(SUPPORTED_QUEUE_TYPES.equals(name))
- {
- // TODO
- }
- }
- return super.getAttribute(name);
- }
-
-
- Object getAttribute(String name, String brokerAttributeName)
- {
- return getAttribute(name, _broker, brokerAttributeName);
- }
-
-
- @Override
- public Collection<String> getAttributeNames()
- {
- return getAttributeNames(VirtualHost.class);
- }
-
- private void checkVHostStateIsActive()
- {
- if (!org.apache.qpid.server.virtualhost.State.ACTIVE.equals(_virtualHost.getState()))
- {
- throw new IllegalStateException("The virtual hosts state of " + _virtualHost.getState()
- + " does not permit this operation.");
- }
- }
-
- @Override
- public Collection<String> getSupportedExchangeTypes()
- {
- List<String> types = new ArrayList<String>();
- for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeTypes())
- {
- types.add(type.getType());
- }
- return Collections.unmodifiableCollection(types);
- }
-
- @Override
- public Collection<String> getSupportedQueueTypes()
- {
- // TODO
- return null;
- }
-
- @Override
- public boolean isQueue_deadLetterQueueEnabled()
- {
- return (Boolean)getAttribute(VirtualHost.QUEUE_DEAD_LETTER_QUEUE_ENABLED);
- }
-
- @Override
- public long getHousekeepingCheckPeriod()
- {
- return (Long)getAttribute(VirtualHost.HOUSEKEEPING_CHECK_PERIOD);
- }
-
- @Override
- public int getQueue_maximumDeliveryAttempts()
- {
- return (Integer)getAttribute(VirtualHost.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS);
- }
-
- @Override
- public long getQueue_flowControlSizeBytes()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_FLOW_CONTROL_SIZE_BYTES);
- }
-
- @Override
- public long getQueue_flowResumeSizeBytes()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_FLOW_RESUME_SIZE_BYTES);
- }
-
- @Override
- public long getStoreTransactionIdleTimeoutClose()
- {
- return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
- }
-
- @Override
- public long getStoreTransactionIdleTimeoutWarn()
- {
- return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_WARN);
- }
-
- @Override
- public long getStoreTransactionOpenTimeoutClose()
- {
- return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE);
- }
-
- @Override
- public long getStoreTransactionOpenTimeoutWarn()
- {
- return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_WARN);
- }
-
- @Override
- public long getQueue_alertRepeatGap()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_ALERT_REPEAT_GAP);
- }
-
- @Override
- public long getQueue_alertThresholdMessageAge()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE);
- }
-
- @Override
- public long getQueue_alertThresholdMessageSize()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE);
- }
-
- @Override
- public long getQueue_alertThresholdQueueDepthBytes()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES);
- }
-
- @Override
- public long getQueue_alertThresholdQueueDepthMessages()
- {
- return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Map<String, Object> getMessageStoreSettings()
- {
- return (Map<String, Object>)getAttribute(VirtualHost.MESSAGE_STORE_SETTINGS);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Map<String, Object> getConfigurationStoreSettings()
- {
- return (Map<String, Object>)getAttribute(VirtualHost.CONFIGURATION_STORE_SETTINGS);
- }
-
- @Override
- public long getQueueCount()
- {
- return _virtualHost.getQueues().size();
- }
-
- @Override
- public long getExchangeCount()
- {
- return _virtualHost.getExchanges().size();
- }
-
- @Override
- public long getConnectionCount()
- {
- return _virtualHost.getConnectionRegistry().getConnections().size();
- }
-
- @Override
- public long getBytesIn()
- {
- return _virtualHost.getDataReceiptStatistics().getTotal();
- }
-
- @Override
- public long getBytesOut()
- {
- return _virtualHost.getDataDeliveryStatistics().getTotal();
- }
-
- @Override
- public long getMessagesIn()
- {
- return _virtualHost.getMessageReceiptStatistics().getTotal();
- }
-
- @Override
- public long getMessagesOut()
- {
- return _virtualHost.getMessageDeliveryStatistics().getTotal();
- }
-
- @Override
- public String getSecurityAcl()
- {
- return (String)getAttribute(SECURITY_ACL);
- }
-
- @Override
- public int getHouseKeepingThreadCount()
- {
- return (Integer)getAttribute(HOUSE_KEEPING_THREAD_COUNT);
- }
-
- @Override
- protected boolean setState(State currentState, State desiredState)
- {
- if (desiredState == State.ACTIVE)
- {
- try
- {
- activate();
- }
- catch(RuntimeException e)
- {
- changeAttribute(STATE, State.INITIALISING, State.ERRORED);
- if (_broker.isManagementMode())
- {
- LOGGER.warn("Failed to activate virtual host: " + getName(), e);
- }
- else
- {
- throw e;
- }
- }
- return true;
- }
- else if (desiredState == State.STOPPED)
- {
- if (_virtualHost != null)
- {
- try
- {
- _virtualHost.close();
- }
- finally
- {
- _broker.getVirtualHostRegistry().unregisterVirtualHost(_virtualHost);
- }
- }
- return true;
- }
- else if (desiredState == State.DELETED)
- {
- String hostName = getName();
-
- if (hostName.equals(_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST)))
- {
- throw new IntegrityViolationException("Cannot delete default virtual host '" + hostName + "'");
- }
- if (_virtualHost != null)
- {
- if (_virtualHost.getState() == org.apache.qpid.server.virtualhost.State.ACTIVE)
- {
- setDesiredState(currentState, State.STOPPED);
- }
-
- MessageStore ms = _virtualHost.getMessageStore();
- if (ms != null)
- {
- try
- {
- ms.onDelete();
- }
- catch(Exception e)
- {
- LOGGER.warn("Exception occurred on store deletion", e);
- }
- }
-
- _virtualHost = null;
- }
- setAttribute(VirtualHost.STATE, getState(), State.DELETED);
- return true;
- }
- return false;
- }
-
- private void activate()
- {
- VirtualHostRegistry virtualHostRegistry = _broker.getVirtualHostRegistry();
- String virtualHostName = getName();
- String type = (String) getAttribute(TYPE);
- final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type);
- if(factory == null)
- {
- throw new IllegalArgumentException("Unknown virtual host type: " + type);
- }
- else
- {
- _virtualHost = factory.createVirtualHost(_broker.getVirtualHostRegistry(),
- _broker,
- _broker.getSecurityManager(),
- this);
- }
-
- virtualHostRegistry.registerVirtualHost(_virtualHost);
-
- _virtualHost.addVirtualHostListener(this);
-
- synchronized(_aliases)
- {
- for(Port port :_broker.getPorts())
- {
- if (Protocol.hasAmqpProtocol(port.getProtocols()))
- {
- _aliases.add(new VirtualHostAliasAdapter(this, port));
- }
- }
- }
- }
-
- @Override
- public MessageStore getMessageStore()
- {
- return _virtualHost.getMessageStore();
- }
-
- @Override
- protected void changeAttributes(Map<String, Object> attributes)
- {
- throw new UnsupportedOperationException("Changing attributes on virtualhosts is not supported.");
- }
-
- @Override
- protected void authoriseSetDesiredState(State currentState, State desiredState) throws AccessControlException
- {
- if(desiredState == State.DELETED)
- {
- if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), VirtualHost.class, Operation.DELETE))
- {
- throw new AccessControlException("Deletion of virtual host is denied");
- }
- }
- }
-
- @Override
- protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException
- {
- if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), VirtualHost.class, Operation.UPDATE))
- {
- throw new AccessControlException("Setting of virtual host attributes is denied");
- }
- }
-
- @Override
- protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException
- {
- if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), VirtualHost.class, Operation.UPDATE))
- {
- throw new AccessControlException("Setting of virtual host attributes is denied");
- }
- }
-
- @Override
- public TaskExecutor getTaskExecutor()
- {
- return super.getTaskExecutor();
- }
-
- @Override
- public Exchange getExchange(UUID id)
- {
- return _virtualHost.getExchange(id);
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
index 0d7254b672..9faa5f9493 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
@@ -21,32 +21,41 @@
package org.apache.qpid.server.model.adapter;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.qpid.server.model.*;
-
import java.security.AccessControlException;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.qpid.server.model.AbstractConfiguredObject;
+import org.apache.qpid.server.model.AuthenticationMethod;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.UUIDGenerator;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostAlias;
public class VirtualHostAliasAdapter extends AbstractConfiguredObject<VirtualHostAliasAdapter> implements VirtualHostAlias<VirtualHostAliasAdapter>
{
- private VirtualHostAdapter _vhost;
+ private VirtualHost _vhost;
private Port _port;
- public VirtualHostAliasAdapter(VirtualHostAdapter virtualHostAdapter, Port port)
+ public VirtualHostAliasAdapter(VirtualHost virtualHost, Port port)
{
- super(Collections.<String,Object>emptyMap(), createAttributes(virtualHostAdapter, port), virtualHostAdapter.getTaskExecutor());
- _vhost = virtualHostAdapter;
+ super(Collections.<String, Object>emptyMap(),
+ createAttributes(virtualHost, port),
+ virtualHost.getTaskExecutor());
+ _vhost = virtualHost;
_port = port;
}
- private static Map<String, Object> createAttributes(final VirtualHostAdapter virtualHostAdapter, final Port port)
+ private static Map<String, Object> createAttributes(final VirtualHost virtualHost, final Port port)
{
final Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(ID, UUIDGenerator.generateVhostAliasUUID(virtualHostAdapter.getName(), port.getName()));
- attributes.put(NAME, virtualHostAdapter.getName());
+ attributes.put(ID, UUIDGenerator.generateVhostAliasUUID(virtualHost.getName(), port.getName()));
+ attributes.put(NAME, virtualHost.getName());
return attributes;
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
index e758e1a1dd..0c859007a0 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
@@ -181,7 +181,7 @@ abstract public class AbstractPort<X extends AbstractPort<X>> extends AbstractCo
public Collection<VirtualHostAlias> getVirtualHostBindings()
{
List<VirtualHostAlias> aliases = new ArrayList<VirtualHostAlias>();
- for(VirtualHost<?> vh : _broker.getVirtualHosts())
+ for(VirtualHost<?,?,?> vh : _broker.getVirtualHosts())
{
for(VirtualHostAlias<?> alias : vh.getAliases())
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java
deleted file mode 100644
index 80ad347929..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.plugin;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.stats.StatisticsGatherer;
-import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-
-public interface VirtualHostFactory extends Pluggable
-{
- String getType();
-
- VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- SecurityManager parentSecurityManager,
- org.apache.qpid.server.model.VirtualHost virtualHost);
-
- void validateAttributes(Map<String, Object> attributes);
-
- static final class TYPES
- {
- private TYPES()
- {
- }
-
- public static Collection<String> get()
- {
- QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
- Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
- List<String> names = new ArrayList<String>();
- for(VirtualHostFactory factory : factories)
- {
- names.add(factory.getType());
- }
- return Collections.unmodifiableCollection(names);
- }
- }
-
-
- static final class FACTORIES
- {
- private FACTORIES()
- {
- }
-
- public static VirtualHostFactory get(String type)
- {
- QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
- Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
- for(VirtualHostFactory factory : factories)
- {
- if(factory.getType().equals(type))
- {
- return factory;
- }
- }
- return null;
- }
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefaultQueueRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefaultQueueRegistry.java
index 7d091dbf73..b6b4719e90 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefaultQueueRegistry.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/DefaultQueueRegistry.java
@@ -20,17 +20,17 @@
*/
package org.apache.qpid.server.queue;
-import org.apache.qpid.server.virtualhost.VirtualHost;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import org.apache.qpid.server.virtualhost.VirtualHost;
+
public class DefaultQueueRegistry implements QueueRegistry
{
- private ConcurrentMap<String, AMQQueue> _queueMap = new ConcurrentHashMap<String, AMQQueue>();
+ private ConcurrentMap<String, AMQQueue<?>> _queueMap = new ConcurrentHashMap<String, AMQQueue<?>>();
private final VirtualHost _virtualHost;
private final Collection<RegistryChangeListener> _listeners =
@@ -74,7 +74,7 @@ public class DefaultQueueRegistry implements QueueRegistry
}
- public Collection<AMQQueue> getQueues()
+ public Collection<AMQQueue<?>> getQueues()
{
return _queueMap.values();
}
@@ -116,8 +116,8 @@ public class DefaultQueueRegistry implements QueueRegistry
@Override
public synchronized AMQQueue getQueue(UUID queueId)
{
- Collection<AMQQueue> queues = _queueMap.values();
- for (AMQQueue queue : queues)
+ Collection<AMQQueue<?>> queues = _queueMap.values();
+ for (AMQQueue<?> queue : queues)
{
if (queue.getId().equals(queueId))
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRegistry.java
index bc1d5942bd..981d476801 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRegistry.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRegistry.java
@@ -20,28 +20,28 @@
*/
package org.apache.qpid.server.queue;
-import org.apache.qpid.server.virtualhost.VirtualHost;
-
import java.util.Collection;
import java.util.UUID;
+import org.apache.qpid.server.virtualhost.VirtualHost;
+
public interface QueueRegistry
{
VirtualHost getVirtualHost();
- void registerQueue(AMQQueue queue);
+ void registerQueue(AMQQueue<?> queue);
void unregisterQueue(String name);
- Collection<AMQQueue> getQueues();
+ Collection<AMQQueue<?>> getQueues();
- AMQQueue getQueue(String queue);
+ AMQQueue<?> getQueue(String queue);
void addRegistryChangeListener(RegistryChangeListener listener);
void stopAllAndUnregisterMBeans();
- AMQQueue getQueue(UUID queueId);
+ AMQQueue<?> getQueue(UUID queueId);
interface RegistryChangeListener
{
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 dd7e82a100..c4df125175 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
@@ -20,38 +20,60 @@
*/
package org.apache.qpid.server.virtualhost;
+import java.lang.reflect.Type;
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.log4j.Logger;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
-import org.apache.qpid.server.exchange.ExchangeImpl;
-import org.apache.qpid.server.logging.EventLogger;
-import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.Queue;
+
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.connection.ConnectionRegistry;
import org.apache.qpid.server.connection.IConnectionRegistry;
+import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
import org.apache.qpid.server.exchange.DefaultExchangeFactory;
import org.apache.qpid.server.exchange.DefaultExchangeRegistry;
import org.apache.qpid.server.exchange.ExchangeFactory;
+import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.exchange.ExchangeRegistry;
+import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
import org.apache.qpid.server.logging.messages.MessageStoreMessages;
import org.apache.qpid.server.logging.messages.VirtualHostMessages;
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
import org.apache.qpid.server.message.MessageDestination;
+import org.apache.qpid.server.message.MessageInstance;
import org.apache.qpid.server.message.MessageNode;
import org.apache.qpid.server.message.MessageSource;
+import org.apache.qpid.server.message.ServerMessage;
+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.Connection;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.IntegrityViolationException;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.QueueType;
+import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.UUIDGenerator;
+import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.model.adapter.ConnectionAdapter;
+import org.apache.qpid.server.model.adapter.VirtualHostAliasAdapter;
import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.plugin.SystemNodeCreator;
@@ -60,39 +82,38 @@ import org.apache.qpid.server.protocol.AMQSessionModel;
import org.apache.qpid.server.protocol.LinkRegistry;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.AMQQueueFactory;
+import org.apache.qpid.server.queue.ConflationQueue;
import org.apache.qpid.server.queue.DefaultQueueRegistry;
import org.apache.qpid.server.queue.QueueRegistry;
import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.security.access.Operation;
import org.apache.qpid.server.stats.StatisticsCounter;
-import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.DurableConfigurationStoreHelper;
import org.apache.qpid.server.store.DurableConfiguredObjectRecoverer;
import org.apache.qpid.server.store.Event;
import org.apache.qpid.server.store.EventListener;
+import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.StoreException;
import org.apache.qpid.server.txn.DtxRegistry;
+import org.apache.qpid.server.txn.LocalTransaction;
+import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.util.MapValueConverter;
+import org.apache.qpid.server.util.ParameterizedTypeImpl;
-public abstract class AbstractVirtualHost implements VirtualHost, IConnectionRegistry.RegistryChangeListener, EventListener
+public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> extends AbstractConfiguredObject<X>
+ implements VirtualHost<AMQQueue<?>, ExchangeImpl<?>>, IConnectionRegistry.RegistryChangeListener, EventListener,
+ org.apache.qpid.server.model.VirtualHost<X,AMQQueue<?>, ExchangeImpl<?>>
{
private static final Logger _logger = Logger.getLogger(AbstractVirtualHost.class);
private static final int HOUSEKEEPING_SHUTDOWN_TIMEOUT = 5;
- private final String _name;
-
- private final UUID _id;
-
private final long _createTime = System.currentTimeMillis();
private final ScheduledThreadPoolExecutor _houseKeepingTasks;
- private final VirtualHostRegistry _virtualHostRegistry;
-
- private final StatisticsGatherer _brokerStatisticsGatherer;
-
- private final SecurityManager _securityManager;
+ private final Broker<?> _broker;
private final QueueRegistry _queueRegistry;
@@ -105,9 +126,8 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
private final DtxRegistry _dtxRegistry;
private final AMQQueueFactory _queueFactory;
private final SystemNodeRegistry _systemNodeRegistry = new SystemNodeRegistry();
- private final org.apache.qpid.server.model.VirtualHost _model;
- private volatile State _state = State.INITIALISING;
+ private volatile VirtualHostState _state = VirtualHostState.INITIALISING;
private StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
@@ -122,28 +142,60 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
private final EventLogger _eventLogger;
- public AbstractVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- SecurityManager parentSecurityManager,
- org.apache.qpid.server.model.VirtualHost virtualHost)
+ @SuppressWarnings("serial")
+ public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{
+ put(NAME, String.class);
+ put(TYPE, String.class);
+ put(STATE, State.class);
+
+ put(QUEUE_ALERT_REPEAT_GAP, Long.class);
+ put(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Long.class);
+ put(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Long.class);
+ put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Long.class);
+ put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Long.class);
+ put(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Boolean.class);
+ put(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Integer.class);
+ put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class);
+ put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class);
+
+ put(HOUSEKEEPING_CHECK_PERIOD, Long.class);
+ put(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Long.class);
+ put(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Long.class);
+ put(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class);
+ put(STORE_TRANSACTION_OPEN_TIMEOUT_WARN, Long.class);
+
+ put(MESSAGE_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
+ put(CONFIGURATION_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
+
+ }});
+
+ @SuppressWarnings("serial")
+ private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{
+ put(HOUSE_KEEPING_THREAD_COUNT, Runtime.getRuntime().availableProcessors());
+ }});
+
+
+ private final Map<AMQConnectionModel, ConnectionAdapter> _connectionAdapters =
+ new HashMap<AMQConnectionModel, ConnectionAdapter>();
+
+ private final List<VirtualHostAlias> _aliases = new ArrayList<VirtualHostAlias>();
+ private final AtomicBoolean _deleted = new AtomicBoolean();
+
+
+ public AbstractVirtualHost(final Map<String, Object> attributes, Broker<?> broker)
{
- _virtualHostRegistry = virtualHostRegistry;
- _brokerStatisticsGatherer = brokerStatisticsGatherer;
- _name = virtualHost.getName();
+ super(parentsMap(broker), DEFAULTS, enhanceWithId(attributes), broker.getTaskExecutor());
+ _broker = broker;
_dtxRegistry = new DtxRegistry();
- _model = virtualHost;
- _eventLogger = virtualHostRegistry.getEventLogger();
-
- _id = UUIDGenerator.generateVhostUUID(_name);
- _eventLogger.message(VirtualHostMessages.CREATED(_name));
+ _eventLogger = _broker.getVirtualHostRegistry().getEventLogger();
- _securityManager = parentSecurityManager;
+ _eventLogger.message(VirtualHostMessages.CREATED(getName()));
_connectionRegistry = new ConnectionRegistry();
_connectionRegistry.addRegistryChangeListener(this);
- _houseKeepingTasks = new ScheduledThreadPoolExecutor(virtualHost.getHouseKeepingThreadCount());
+ _houseKeepingTasks = new ScheduledThreadPoolExecutor(getHouseKeepingThreadCount());
_queueRegistry = new DefaultQueueRegistry(this);
@@ -154,14 +206,78 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
_exchangeRegistry = new DefaultExchangeRegistry(this, _queueRegistry);
+ validateAttributes();
+ }
+
+ private static Map<String, Object> enhanceWithId(Map<String, Object> attributes)
+ {
+ if(attributes.get(ID) == null)
+ {
+ attributes = new HashMap<String, Object>(attributes);
+ attributes.put(ID, UUIDGenerator.generateVhostUUID((String)attributes.get(NAME)));
+ }
+ return attributes;
+ }
+
+ private static Map<Class<? extends ConfiguredObject>, ConfiguredObject<?>> parentsMap(Broker<?> broker)
+ {
+ final Map<Class<? extends ConfiguredObject>, ConfiguredObject<?>> parentsMap = new HashMap<Class<? extends ConfiguredObject>, ConfiguredObject<?>>();
+ parentsMap.put(Broker.class, broker);
+ return parentsMap;
+ }
+
+ protected void validateAttributes()
+ {
+ String name = getName();
+ if (name == null || "".equals(name.trim()))
+ {
+ throw new IllegalConfigurationException("Virtual host name must be specified");
+ }
+ String type = getType();
+ if (type == null || "".equals(type.trim()))
+ {
+ throw new IllegalConfigurationException("Virtual host type must be specified");
+ }
+ }
+
+ public void onOpen()
+ {
registerSystemNodes();
initialiseStatistics();
- initialiseStorage(virtualHost);
+ initialiseStorage(this);
getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL);
getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL);
+
+ _broker.getVirtualHostRegistry().registerVirtualHost(this);
+
+
+ synchronized(_aliases)
+ {
+ for(Port port :_broker.getPorts())
+ {
+ if (Protocol.hasAmqpProtocol(port.getProtocols()))
+ {
+ _aliases.add(new VirtualHostAliasAdapter(this, port));
+ }
+ }
+ }
+ }
+
+ private void checkVHostStateIsActive()
+ {
+ checkVHostState(VirtualHostState.ACTIVE);
+ }
+
+ private void checkVHostState(VirtualHostState... states)
+ {
+ if (!Arrays.asList(states).contains(getVirtualHostState()))
+ {
+ throw new IllegalStateException("The virtual hosts state of " + getVirtualHostState()
+ + " does not permit this operation.");
+ }
}
private void registerSystemNodes()
@@ -174,7 +290,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
}
- abstract protected void initialiseStorage(org.apache.qpid.server.model.VirtualHost<?> virtualHost);
+ abstract protected void initialiseStorage(org.apache.qpid.server.model.VirtualHost<?,?,?> virtualHost);
abstract protected MessageStoreLogSubject getMessageStoreLogSubject();
@@ -183,16 +299,195 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
return _connectionRegistry;
}
- public UUID getId()
+ @Override
+ protected void changeAttributes(Map<String, Object> attributes)
+ {
+ throw new UnsupportedOperationException("Changing attributes on virtualhosts is not supported.");
+ }
+
+ @Override
+ protected void authoriseSetDesiredState(State currentState, State desiredState) throws AccessControlException
+ {
+ if(desiredState == State.DELETED)
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), org.apache.qpid.server.model.VirtualHost.class, Operation.DELETE))
+ {
+ throw new AccessControlException("Deletion of virtual host is denied");
+ }
+ }
+ }
+
+ @Override
+ protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), org.apache.qpid.server.model.VirtualHost.class, Operation.UPDATE))
+ {
+ throw new AccessControlException("Setting of virtual host attributes is denied");
+ }
+ }
+
+ @Override
+ protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), org.apache.qpid.server.model.VirtualHost.class, Operation.UPDATE))
+ {
+ throw new AccessControlException("Setting of virtual host attributes is denied");
+ }
+ }
+
+ public Collection<Connection> getConnections()
+ {
+ synchronized(_connectionAdapters)
+ {
+ return new ArrayList<Connection>(_connectionAdapters.values());
+ }
+
+ }
+
+ /**
+ * Retrieve the ConnectionAdapter instance keyed by the AMQConnectionModel from this VirtualHost.
+ * @param connection the AMQConnectionModel used to index the ConnectionAdapter.
+ * @return the requested ConnectionAdapter.
+ */
+ ConnectionAdapter getConnectionAdapter(AMQConnectionModel connection)
+ {
+ synchronized (_connectionAdapters)
+ {
+ return _connectionAdapters.get(connection);
+ }
+ }
+
+ public String setName(final String currentName, final String desiredName)
+ throws IllegalStateException, AccessControlException
+ {
+ throw new IllegalStateException();
+ }
+
+
+ public String getType()
+ {
+ return (String)getAttribute(TYPE);
+ }
+
+ public String setType(final String currentType, final String desiredType)
+ throws IllegalStateException, AccessControlException
+ {
+ throw new IllegalStateException();
+ }
+
+
+
+ @Override
+ public State getState()
{
- return _id;
+ if(_deleted.get())
+ {
+ return State.DELETED;
+ }
+ VirtualHostState implementationState = getVirtualHostState();
+ switch(implementationState)
+ {
+ case INITIALISING:
+ return State.INITIALISING;
+ case ACTIVE:
+ return State.ACTIVE;
+ case PASSIVE:
+ return State.REPLICA;
+ case STOPPED:
+ return State.STOPPED;
+ case ERRORED:
+ return State.ERRORED;
+ default:
+ throw new IllegalStateException("Unsupported state:" + implementationState);
+ }
+
}
public boolean isDurable()
{
- return false;
+ return true;
+ }
+
+ public void setDurable(final boolean durable)
+ throws IllegalStateException, AccessControlException, IllegalArgumentException
+ {
+ throw new IllegalStateException();
}
+ public LifetimePolicy getLifetimePolicy()
+ {
+ return LifetimePolicy.PERMANENT;
+ }
+
+ public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired)
+ throws IllegalStateException, AccessControlException, IllegalArgumentException
+ {
+ throw new IllegalStateException();
+ }
+
+
+ @Override
+ public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
+ {
+ if(clazz == Exchange.class)
+ {
+ return (Collection<C>) getExchanges();
+ }
+ else if(clazz == Queue.class)
+ {
+ return (Collection<C>) getQueues();
+ }
+ else if(clazz == Connection.class)
+ {
+ return (Collection<C>) getConnections();
+ }
+ else if(clazz == VirtualHostAlias.class)
+ {
+ return (Collection<C>) getAliases();
+ }
+ else
+ {
+ return Collections.emptySet();
+ }
+ }
+
+ @Override
+ public <C extends ConfiguredObject> C addChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
+ {
+ checkVHostStateIsActive();
+ if(childClass == Exchange.class)
+ {
+ return (C) addExchange(attributes);
+
+ }
+ else if(childClass == Queue.class)
+ {
+ return (C) addQueue(attributes);
+
+ }
+ else if(childClass == VirtualHostAlias.class)
+ {
+ throw new UnsupportedOperationException();
+ }
+ else if(childClass == Connection.class)
+ {
+ throw new UnsupportedOperationException();
+ }
+ throw new IllegalArgumentException("Cannot create a child of class " + childClass.getSimpleName());
+ }
+
+ public Collection<String> getExchangeTypeNames()
+ {
+ Collection<String> exchangeTypes = new ArrayList<String>();
+
+ for(ExchangeType<? extends ExchangeImpl> type : getExchangeTypes())
+ {
+ exchangeTypes.add(type.getType());
+ }
+ return Collections.unmodifiableCollection(exchangeTypes);
+ }
+
+
@Override
public EventLogger getEventLogger()
{
@@ -289,10 +584,6 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
_exchangeRegistry.initialise(_exchangeFactory);
}
- public String getName()
- {
- return _name;
- }
public long getCreateTime()
{
@@ -362,7 +653,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
@Override
- public AMQQueue getQueue(String name)
+ public AMQQueue<?> getQueue(String name)
{
return _queueRegistry.getQueue(name);
}
@@ -375,19 +666,19 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
@Override
- public AMQQueue getQueue(UUID id)
+ public AMQQueue<?> getQueue(UUID id)
{
return _queueRegistry.getQueue(id);
}
@Override
- public Collection<AMQQueue> getQueues()
+ public Collection<AMQQueue<?>> getQueues()
{
return _queueRegistry.getQueues();
}
@Override
- public int removeQueue(AMQQueue queue)
+ public int removeQueue(AMQQueue<?> queue)
{
synchronized (getQueueRegistry())
{
@@ -406,10 +697,44 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
}
- public AMQQueue createQueue(Map<String, Object> attributes) throws QueueExistsException
+ public AMQQueue<?> createQueue(Map<String, Object> attributes) throws QueueExistsException
+ {
+ checkVHostStateIsActive();
+ AMQQueue<?> queue = addQueue(attributes);
+ childAdded(queue);
+ return queue;
+ }
+
+ private AMQQueue<?> addQueue(Map<String, Object> attributes) throws QueueExistsException
{
+
// make a copy as we may augment (with an ID for example)
attributes = new LinkedHashMap<String, Object>(attributes);
+ if (attributes.containsKey(Queue.QUEUE_TYPE))
+ {
+ String typeAttribute = MapValueConverter.getStringAttribute(Queue.QUEUE_TYPE, attributes, null);
+ QueueType queueType = null;
+ try
+ {
+ queueType = QueueType.valueOf(typeAttribute.toUpperCase());
+ }
+ catch(Exception e)
+ {
+ throw new IllegalArgumentException("Unsupported queue type :" + typeAttribute);
+ }
+ if (queueType == QueueType.LVQ && attributes.get(Queue.LVQ_KEY) == null)
+ {
+ attributes.put(Queue.LVQ_KEY, ConflationQueue.DEFAULT_LVQ_KEY);
+ }
+ else if (queueType == QueueType.PRIORITY && attributes.get(Queue.PRIORITIES) == null)
+ {
+ attributes.put(Queue.PRIORITIES, 10);
+ }
+ else if (queueType == QueueType.SORTED && attributes.get(Queue.SORT_KEY) == null)
+ {
+ throw new IllegalArgumentException("Sort key is not specified for sorted queue");
+ }
+ }
String queueName = MapValueConverter.getStringAttribute(Queue.NAME, attributes);
@@ -482,14 +807,127 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
return _exchangeFactory.getRegisteredTypes();
}
+ public ExchangeImpl<?> createExchange(final String name,
+ final State initialState,
+ final boolean durable,
+ final LifetimePolicy lifetime,
+ final String type,
+ final Map<String, Object> attributes)
+ throws AccessControlException, IllegalArgumentException
+ {
+ checkVHostStateIsActive();
+
+ try
+ {
+ String alternateExchange = null;
+ if(attributes.containsKey(Exchange.ALTERNATE_EXCHANGE))
+ {
+ Object altExchangeObject = attributes.get(Exchange.ALTERNATE_EXCHANGE);
+ if(altExchangeObject instanceof Exchange)
+ {
+ alternateExchange = ((Exchange) altExchangeObject).getName();
+ }
+ else if(altExchangeObject instanceof UUID)
+ {
+ for(Exchange ex : getExchanges())
+ {
+ if(altExchangeObject.equals(ex.getId()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
+ }
+ else if(altExchangeObject instanceof String)
+ {
+
+ for(Exchange ex : getExchanges())
+ {
+ if(altExchangeObject.equals(ex.getName()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
+ if(alternateExchange == null)
+ {
+ try
+ {
+ UUID id = UUID.fromString(altExchangeObject.toString());
+ for(Exchange ex : getExchanges())
+ {
+ if(id.equals(ex.getId()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
+ }
+ catch(IllegalArgumentException e)
+ {
+ // ignore
+ }
+
+ }
+ }
+ }
+ Map<String,Object> attributes1 = new HashMap<String, Object>();
+
+ attributes1.put(ID, null);
+ attributes1.put(NAME, name);
+ attributes1.put(Exchange.TYPE, type);
+ attributes1.put(Exchange.DURABLE, durable);
+ attributes1.put(Exchange.LIFETIME_POLICY,
+ lifetime != null && lifetime != LifetimePolicy.PERMANENT
+ ? LifetimePolicy.DELETE_ON_NO_LINKS : LifetimePolicy.PERMANENT);
+ attributes1.put(Exchange.ALTERNATE_EXCHANGE, alternateExchange);
+ ExchangeImpl exchange = createExchange(attributes1);
+ return exchange;
+
+ }
+ catch(ExchangeExistsException e)
+ {
+ throw new IllegalArgumentException("Exchange with name '" + name + "' already exists");
+ }
+ catch(ReservedExchangeNameException e)
+ {
+ throw new UnsupportedOperationException("'" + name + "' is a reserved exchange name");
+ }
+ catch(UnknownExchangeException e)
+ {
+ throw new IllegalArgumentException("Alternate Exchange with name '" + e.getExchangeName() + "' does not exist");
+ }
+ catch(AMQUnknownExchangeType e)
+ {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+
@Override
public ExchangeImpl createExchange(Map<String,Object> attributes)
throws ExchangeExistsException, ReservedExchangeNameException,
UnknownExchangeException, AMQUnknownExchangeType
{
+ checkVHostStateIsActive();
+ ExchangeImpl child = addExchange(attributes);
+ childAdded(child);
+ return child;
+ }
+
+
+ private ExchangeImpl addExchange(Map<String,Object> attributes)
+ throws ExchangeExistsException, ReservedExchangeNameException,
+ UnknownExchangeException, AMQUnknownExchangeType
+ {
String name = MapValueConverter.getStringAttribute(org.apache.qpid.server.model.Exchange.NAME, attributes);
+ if(attributes.get(Exchange.DURABLE) == null)
+ {
+ attributes = new HashMap<String, Object>(attributes);
+ attributes.put(Exchange.DURABLE, false);
+ }
boolean durable =
- MapValueConverter.getBooleanAttribute(org.apache.qpid.server.model.Exchange.DURABLE, attributes);
+ MapValueConverter.getBooleanAttribute(Exchange.DURABLE, attributes);
synchronized (_exchangeRegistry)
@@ -549,7 +987,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
public SecurityManager getSecurityManager()
{
- return _securityManager;
+ return _broker.getSecurityManager();
}
public void close()
@@ -564,7 +1002,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
// clear exchange objects
_exchangeRegistry.clearAndUnregisterMbeans();
- _state = State.STOPPED;
+ _state = VirtualHostState.STOPPED;
_eventLogger.message(VirtualHostMessages.CLOSED(getName()));
}
@@ -608,21 +1046,21 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
public VirtualHostRegistry getVirtualHostRegistry()
{
- return _virtualHostRegistry;
+ return _broker.getVirtualHostRegistry();
}
public void registerMessageDelivered(long messageSize)
{
_messagesDelivered.registerEvent(1L);
_dataDelivered.registerEvent(messageSize);
- _brokerStatisticsGatherer.registerMessageDelivered(messageSize);
+ _broker.registerMessageDelivered(messageSize);
}
public void registerMessageReceived(long messageSize, long timestamp)
{
_messagesReceived.registerEvent(1L, timestamp);
_dataReceived.registerEvent(messageSize, timestamp);
- _brokerStatisticsGatherer.registerMessageReceived(messageSize, timestamp);
+ _broker.registerMessageReceived(messageSize, timestamp);
}
public StatisticsCounter getMessageReceiptStatistics()
@@ -684,10 +1122,10 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
public String toString()
{
- return _name;
+ return getName();
}
- public State getState()
+ public VirtualHostState getVirtualHostState()
{
return _state;
}
@@ -729,10 +1167,41 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
{
connection.block();
}
+ ConnectionAdapter adapter = null;
+ synchronized (_connectionAdapters)
+ {
+ if(!_connectionAdapters.containsKey(connection))
+ {
+ adapter = new ConnectionAdapter(connection, getTaskExecutor());
+ _connectionAdapters.put(connection, adapter);
+
+ }
+
+ }
+ if(adapter != null)
+ {
+ childAdded(adapter);
+ }
+
}
public void connectionUnregistered(final AMQConnectionModel connection)
{
+ ConnectionAdapter adapter;
+ synchronized (_connectionAdapters)
+ {
+ adapter = _connectionAdapters.remove(connection);
+
+ }
+
+ if(adapter != null)
+ {
+ // Call getSessions() first to ensure that any SessionAdapter children are cleanly removed and any
+ // corresponding ConfigurationChangeListener childRemoved() callback is called for child SessionAdapters.
+ adapter.getSessions();
+
+ childRemoved(adapter);
+ }
}
public void event(final Event event)
@@ -750,19 +1219,19 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
}
- protected void setState(State state)
+ protected void setState(VirtualHostState state)
{
_state = state;
}
protected void attainActivation()
{
- State finalState = State.ERRORED;
+ VirtualHostState finalState = VirtualHostState.ERRORED;
try
{
- initialiseHouseKeeping(_model.getHousekeepingCheckPeriod());
- finalState = State.ACTIVE;
+ initialiseHouseKeeping(getHousekeepingCheckPeriod());
+ finalState = VirtualHostState.ACTIVE;
}
finally
{
@@ -771,9 +1240,9 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
}
- protected void reportIfError(State state)
+ protected void reportIfError(VirtualHostState state)
{
- if (state == State.ERRORED)
+ if (state == VirtualHostState.ERRORED)
{
_eventLogger.message(VirtualHostMessages.ERRORED(getName()));
}
@@ -804,7 +1273,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
public void execute()
{
- for (AMQQueue q : _queueRegistry.getQueues())
+ for (AMQQueue<?> q : _queueRegistry.getQueues())
{
if (_logger.isDebugEnabled())
{
@@ -835,10 +1304,10 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
}
try
{
- session.checkTransactionStatus(_model.getStoreTransactionOpenTimeoutWarn(),
- _model.getStoreTransactionOpenTimeoutClose(),
- _model.getStoreTransactionIdleTimeoutWarn(),
- _model.getStoreTransactionIdleTimeoutClose());
+ session.checkTransactionStatus(getStoreTransactionOpenTimeoutWarn(),
+ getStoreTransactionOpenTimeoutClose(),
+ getStoreTransactionIdleTimeoutWarn(),
+ getStoreTransactionIdleTimeoutClose());
} catch (Exception e)
{
_logger.error("Exception in housekeeping for connection: " + connection.toString(), e);
@@ -885,7 +1354,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
@Override
public org.apache.qpid.server.model.VirtualHost getVirtualHostModel()
{
- return _model;
+ return AbstractVirtualHost.this;
}
}
@@ -893,68 +1362,501 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg
@Override
public long getDefaultAlertThresholdMessageAge()
{
- return _model.getQueue_alertThresholdMessageAge();
+ return getQueue_alertThresholdMessageAge();
}
@Override
public long getDefaultAlertThresholdMessageSize()
{
- return _model.getQueue_alertThresholdMessageSize();
+ return getQueue_alertThresholdMessageSize();
}
@Override
public long getDefaultAlertThresholdQueueDepthMessages()
{
- return _model.getQueue_alertThresholdQueueDepthMessages();
+ return getQueue_alertThresholdQueueDepthMessages();
}
@Override
public long getDefaultAlertThresholdQueueDepthBytes()
{
- return _model.getQueue_alertThresholdQueueDepthBytes();
+ return getQueue_alertThresholdQueueDepthBytes();
}
@Override
public long getDefaultAlertRepeatGap()
{
- return _model.getQueue_alertRepeatGap();
+ return getQueue_alertRepeatGap();
}
@Override
public long getDefaultQueueFlowControlSizeBytes()
{
- return _model.getQueue_flowControlSizeBytes();
+ return getQueue_flowControlSizeBytes();
}
@Override
public long getDefaultQueueFlowResumeSizeBytes()
{
- return _model.getQueue_flowResumeSizeBytes();
+ return getQueue_flowResumeSizeBytes();
}
@Override
public int getDefaultMaximumDeliveryAttempts()
{
- return _model.getQueue_maximumDeliveryAttempts();
+ return getQueue_maximumDeliveryAttempts();
}
@Override
public boolean getDefaultDeadLetterQueueEnabled()
{
- return _model.isQueue_deadLetterQueueEnabled();
+ return isQueue_deadLetterQueueEnabled();
}
@Override
- public TaskExecutor getTaskExecutor()
+ public org.apache.qpid.server.model.VirtualHost getModel()
{
- // todo - remove this once virtualhost is a configured object itself
- return _model.getTaskExecutor();
+ return this;
}
+
+ public void executeTransaction(TransactionalOperation op)
+ {
+ MessageStore store = getMessageStore();
+ final LocalTransaction txn = new LocalTransaction(store);
+
+ op.withinTransaction(new Transaction()
+ {
+ public void dequeue(final MessageInstance entry)
+ {
+ if(entry.acquire())
+ {
+ txn.dequeue(entry.getOwningResource(), entry.getMessage(), new ServerTransaction.Action()
+ {
+ public void postCommit()
+ {
+ entry.delete();
+ }
+
+ public void onRollback()
+ {
+ }
+ });
+ }
+ }
+
+ public void copy(MessageInstance entry, Queue queue)
+ {
+ final ServerMessage message = entry.getMessage();
+ final AMQQueue toQueue = (AMQQueue)queue;
+
+ txn.enqueue(toQueue, message, new ServerTransaction.Action()
+ {
+ public void postCommit()
+ {
+ toQueue.enqueue(message, null);
+ }
+
+ public void onRollback()
+ {
+ }
+ });
+
+ }
+
+ public void move(final MessageInstance entry, Queue queue)
+ {
+ final ServerMessage message = entry.getMessage();
+ final AMQQueue toQueue = (AMQQueue)queue;
+ if(entry.acquire())
+ {
+ txn.enqueue(toQueue, message,
+ new ServerTransaction.Action()
+ {
+
+ public void postCommit()
+ {
+ toQueue.enqueue(message, null);
+ }
+
+ public void onRollback()
+ {
+ entry.release();
+ }
+ });
+ txn.dequeue(entry.getOwningResource(), message,
+ new ServerTransaction.Action()
+ {
+
+ public void postCommit()
+ {
+ entry.delete();
+ }
+
+ public void onRollback()
+ {
+
+ }
+ });
+ }
+ }
+
+ });
+ txn.commit();
+ }
+
+
@Override
- public org.apache.qpid.server.model.VirtualHost getModel()
+ public Object getAttribute(String name)
+ {
+ if(ID.equals(name))
+ {
+ return getId();
+ }
+ else if(STATE.equals(name))
+ {
+ return getState();
+ }
+ else if(DURABLE.equals(name))
+ {
+ return isDurable();
+ }
+ else if(LIFETIME_POLICY.equals(name))
+ {
+ return LifetimePolicy.PERMANENT;
+ }
+ else if(QUEUE_ALERT_REPEAT_GAP.equals(name))
+ {
+ return getAttribute(QUEUE_ALERT_REPEAT_GAP, Broker.QUEUE_ALERT_REPEAT_GAP);
+ }
+ else if(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE.equals(name))
+ {
+ return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE);
+ }
+ else if(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE.equals(name))
+ {
+ return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE);
+ }
+ else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name))
+ {
+ return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES);
+ }
+ else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name))
+ {
+ return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES);
+ }
+ else if(QUEUE_DEAD_LETTER_QUEUE_ENABLED.equals(name))
+ {
+ return getAttribute(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED);
+ }
+ else if(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS.equals(name))
+ {
+ return getAttribute(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS);
+ }
+ else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name))
+ {
+ return getAttribute(QUEUE_FLOW_CONTROL_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES);
+ }
+ else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name))
+ {
+ return getAttribute(QUEUE_FLOW_RESUME_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES);
+ }
+ else if(HOUSEKEEPING_CHECK_PERIOD.equals(name))
+ {
+ return getAttribute(HOUSEKEEPING_CHECK_PERIOD, Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD);
+ }
+ else if(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE.equals(name))
+ {
+ return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
+ }
+ else if(STORE_TRANSACTION_IDLE_TIMEOUT_WARN.equals(name))
+ {
+ return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN);
+ }
+ else if(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE.equals(name))
+ {
+ return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE);
+ }
+ else if(STORE_TRANSACTION_OPEN_TIMEOUT_WARN.equals(name))
+ {
+ return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN);
+ }
+ else if(SUPPORTED_EXCHANGE_TYPES.equals(name))
+ {
+ List<String> types = new ArrayList<String>();
+ for(ExchangeType<?> type : getExchangeTypes())
+ {
+ types.add(type.getType());
+ }
+ return Collections.unmodifiableCollection(types);
+ }
+ else if(SUPPORTED_QUEUE_TYPES.equals(name))
+ {
+ // TODO
+ }
+
+ return super.getAttribute(name);
+ }
+
+
+ Object getAttribute(String name, String brokerAttributeName)
+ {
+ return getAttribute(name, _broker, brokerAttributeName);
+ }
+
+
+ @Override
+ public Collection<String> getAttributeNames()
+ {
+ return getAttributeNames(org.apache.qpid.server.model.VirtualHost.class);
+ }
+
+ @Override
+ public Collection<String> getSupportedExchangeTypes()
+ {
+ List<String> types = new ArrayList<String>();
+ for(ExchangeType<?> type : getExchangeTypes())
+ {
+ types.add(type.getType());
+ }
+ return Collections.unmodifiableCollection(types);
+ }
+
+ @Override
+ public Collection<String> getSupportedQueueTypes()
+ {
+ // TODO
+ return null;
+ }
+
+ @Override
+ public boolean isQueue_deadLetterQueueEnabled()
+ {
+ return (Boolean)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_DEAD_LETTER_QUEUE_ENABLED);
+ }
+
+ @Override
+ public long getHousekeepingCheckPeriod()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.HOUSEKEEPING_CHECK_PERIOD);
+ }
+
+ @Override
+ public int getQueue_maximumDeliveryAttempts()
+ {
+ return (Integer)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS);
+ }
+
+ @Override
+ public long getQueue_flowControlSizeBytes()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_FLOW_CONTROL_SIZE_BYTES);
+ }
+
+ @Override
+ public long getQueue_flowResumeSizeBytes()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_FLOW_RESUME_SIZE_BYTES);
+ }
+
+ @Override
+ public long getStoreTransactionIdleTimeoutClose()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
+ }
+
+ @Override
+ public long getStoreTransactionIdleTimeoutWarn()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_WARN);
+ }
+
+ @Override
+ public long getStoreTransactionOpenTimeoutClose()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE);
+ }
+
+ @Override
+ public long getStoreTransactionOpenTimeoutWarn()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_WARN);
+ }
+
+ @Override
+ public long getQueue_alertRepeatGap()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_ALERT_REPEAT_GAP);
+ }
+
+ @Override
+ public long getQueue_alertThresholdMessageAge()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE);
+ }
+
+ @Override
+ public long getQueue_alertThresholdMessageSize()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE);
+ }
+
+ @Override
+ public long getQueue_alertThresholdQueueDepthBytes()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES);
+ }
+
+ @Override
+ public long getQueue_alertThresholdQueueDepthMessages()
+ {
+ return (Long)getAttribute(org.apache.qpid.server.model.VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, Object> getMessageStoreSettings()
+ {
+ return (Map<String, Object>)getAttribute(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, Object> getConfigurationStoreSettings()
+ {
+ return (Map<String, Object>)getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIGURATION_STORE_SETTINGS);
+ }
+
+ @Override
+ public long getQueueCount()
+ {
+ return getQueues().size();
+ }
+
+ @Override
+ public long getExchangeCount()
+ {
+ return getExchanges().size();
+ }
+
+ @Override
+ public long getConnectionCount()
+ {
+ return getConnectionRegistry().getConnections().size();
+ }
+
+ @Override
+ public long getBytesIn()
+ {
+ return getDataReceiptStatistics().getTotal();
+ }
+
+ @Override
+ public long getBytesOut()
+ {
+ return getDataDeliveryStatistics().getTotal();
+ }
+
+ @Override
+ public long getMessagesIn()
+ {
+ return getMessageReceiptStatistics().getTotal();
+ }
+
+ @Override
+ public long getMessagesOut()
+ {
+ return getMessageDeliveryStatistics().getTotal();
+ }
+
+ @Override
+ public String getSecurityAcl()
+ {
+ return (String)getAttribute(SECURITY_ACL);
+ }
+
+ @Override
+ public int getHouseKeepingThreadCount()
+ {
+ return (Integer)getAttribute(HOUSE_KEEPING_THREAD_COUNT);
+ }
+
+
+
+ @Override
+ protected boolean setState(State currentState, State desiredState)
+ {
+ if (desiredState == State.ACTIVE)
+ {
+ try
+ {
+ onOpen();
+ }
+ catch(RuntimeException e)
+ {
+ changeAttribute(STATE, State.INITIALISING, State.ERRORED);
+ if (_broker.isManagementMode())
+ {
+ _logger.warn("Failed to activate virtual host: " + getName(), e);
+ }
+ else
+ {
+ throw e;
+ }
+ }
+ return true;
+ }
+ else if (desiredState == State.STOPPED)
+ {
+ try
+ {
+ close();
+ }
+ finally
+ {
+ _broker.getVirtualHostRegistry().unregisterVirtualHost(this);
+ }
+
+ return true;
+ }
+ else if (desiredState == State.DELETED)
+ {
+ if(_deleted.compareAndSet(false,true))
+ {
+ String hostName = getName();
+
+ if (hostName.equals(_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST)))
+ {
+ throw new IntegrityViolationException("Cannot delete default virtual host '" + hostName + "'");
+ }
+ if (getVirtualHostState() == VirtualHostState.ACTIVE
+ || getVirtualHostState() == VirtualHostState.INITIALISING)
+ {
+ setDesiredState(currentState, State.STOPPED);
+ }
+
+ MessageStore ms = getMessageStore();
+ if (ms != null)
+ {
+ try
+ {
+ ms.onDelete();
+ }
+ catch (Exception e)
+ {
+ _logger.warn("Exception occurred on store deletion", e);
+ }
+ }
+ setAttribute(org.apache.qpid.server.model.VirtualHost.STATE, getState(), State.DELETED);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public Collection<VirtualHostAlias> getAliases()
{
- return _model;
+ return Collections.unmodifiableCollection(_aliases);
}
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java
index 0f57123c19..695242726d 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java
@@ -21,7 +21,7 @@ package org.apache.qpid.server.virtualhost;/*
import org.apache.qpid.server.exchange.ExchangeImpl;
-public class ExchangeExistsException extends Exception
+public class ExchangeExistsException extends RuntimeException
{
private final ExchangeImpl _existing;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueExistsException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueExistsException.java
index 2fe8ce1caf..5bec8c1457 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueExistsException.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueExistsException.java
@@ -22,7 +22,7 @@ package org.apache.qpid.server.virtualhost;
import org.apache.qpid.server.queue.AMQQueue;
-public class QueueExistsException extends Exception
+public class QueueExistsException extends RuntimeException
{
private final AMQQueue _existing;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ReservedExchangeNameException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ReservedExchangeNameException.java
index 2db2227de3..0a40582948 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ReservedExchangeNameException.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ReservedExchangeNameException.java
@@ -19,7 +19,7 @@ package org.apache.qpid.server.virtualhost;/*
*
*/
-public class ReservedExchangeNameException extends Exception
+public class ReservedExchangeNameException extends RuntimeException
{
private final String _name;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
index 14849aea1e..9faf74f81a 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
@@ -20,23 +20,27 @@
*/
package org.apache.qpid.server.virtualhost;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
import org.apache.qpid.server.logging.messages.MessageStoreMessages;
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.plugin.MessageStoreFactory;
-import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.ConfiguredObjectRecordRecoveverAndUpgrader;
import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.DurableConfigurationStoreCreator;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
-public class StandardVirtualHost extends AbstractVirtualHost
+@ManagedObject( category = false, type = "STANDARD")
+public class StandardVirtualHost extends AbstractVirtualHost<StandardVirtualHost>
{
+ public static final String TYPE = "STANDARD";
private MessageStore _messageStore;
private DurableConfigurationStore _durableConfigurationStore;
@@ -45,12 +49,51 @@ public class StandardVirtualHost extends AbstractVirtualHost
private MessageStoreLogSubject _configurationStoreLogSubject;
- StandardVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- org.apache.qpid.server.security.SecurityManager parentSecurityManager,
- VirtualHost virtualHost)
+ public StandardVirtualHost(final Map<String, Object> attributes, Broker<?> broker)
{
- super(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, virtualHost);
+ super(attributes, broker);
+ }
+
+ @Override
+ protected void validateAttributes()
+ {
+ super.validateAttributes();
+ Map<String,Object> attributes = getActualAttributes();
+ Map<String, Object> messageStoreSettings = (Map<String, Object>)attributes.get(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
+ if (messageStoreSettings == null)
+ {
+ throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + "' is required.");
+ }
+
+ Object storeType = messageStoreSettings.get(MessageStore.STORE_TYPE);
+
+ // need store type and path
+ Collection<String> knownTypes = MessageStoreFactory.FACTORY_LOADER.getSupportedTypes();
+
+ if (storeType == null)
+ {
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+ +"' is required in attribute " + org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + ". Known types are : " + knownTypes);
+ }
+ else if (!(storeType instanceof String))
+ {
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+ +"' is required and must be of type String. "
+ +"Known types are : " + knownTypes);
+ }
+
+ MessageStoreFactory factory = MessageStoreFactory.FACTORY_LOADER.get((String)storeType);
+ if(factory == null)
+ {
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+ +"' has value '" + storeType + "' which is not one of the valid values: "
+ + "Known types are : " + knownTypes);
+ }
+
+ factory.validateAttributes(attributes);
+
+
+
}
private DurableConfigurationStore initialiseConfigurationStore(String storeType)
@@ -150,4 +193,4 @@ public class StandardVirtualHost extends AbstractVirtualHost
{
return _configurationStoreLogSubject;
}
-} \ No newline at end of file
+}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
deleted file mode 100644
index 7cc8eaa20c..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.apache.qpid.server.virtualhost;/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.qpid.server.plugin.MessageStoreFactory;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
-import org.apache.qpid.server.stats.StatisticsGatherer;
-import org.apache.qpid.server.store.MessageStore;
-
-public class StandardVirtualHostFactory implements VirtualHostFactory
-{
-
- public static final String TYPE = "STANDARD";
-
- @Override
- public String getType()
- {
- return TYPE;
- }
-
- @Override
- public VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry,
- StatisticsGatherer brokerStatisticsGatherer,
- org.apache.qpid.server.security.SecurityManager parentSecurityManager,
- org.apache.qpid.server.model.VirtualHost virtualHost)
- {
- return new StandardVirtualHost(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, virtualHost);
- }
-
-
- @Override
- public void validateAttributes(Map<String, Object> attributes)
- {
- @SuppressWarnings("unchecked")
- Map<String, Object> messageStoreSettings = (Map<String, Object>)attributes.get(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
- if (messageStoreSettings == null)
- {
- throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + "' is required.");
- }
-
- Object storeType = messageStoreSettings.get(MessageStore.STORE_TYPE);
-
- // need store type and path
- Collection<String> knownTypes = MessageStoreFactory.FACTORY_LOADER.getSupportedTypes();
-
- if (storeType == null)
- {
- throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
- +"' is required in attribute " + org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + ". Known types are : " + knownTypes);
- }
- else if (!(storeType instanceof String))
- {
- throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
- +"' is required and must be of type String. "
- +"Known types are : " + knownTypes);
- }
-
- MessageStoreFactory factory = MessageStoreFactory.FACTORY_LOADER.get((String)storeType);
- if(factory == null)
- {
- throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
- +"' has value '" + storeType + "' which is not one of the valid values: "
- + "Known types are : " + knownTypes);
- }
-
- factory.validateAttributes(attributes);
-
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java
index 9b9029d330..c34cf51955 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java
@@ -20,7 +20,7 @@
*/
package org.apache.qpid.server.virtualhost;
-public class UnknownExchangeException extends Exception
+public class UnknownExchangeException extends RuntimeException
{
private final String _exchangeName;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
index f113abb25a..8c931583a3 100755
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
@@ -25,10 +25,10 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ScheduledFuture;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
import org.apache.qpid.common.Closeable;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.connection.IConnectionRegistry;
+import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.EventLoggerProvider;
@@ -43,40 +43,40 @@ import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.txn.DtxRegistry;
-public interface VirtualHost extends DurableConfigurationStore.Source, Closeable, StatisticsGatherer,
+public interface VirtualHost< Q extends AMQQueue<?>, E extends ExchangeImpl<?> > extends DurableConfigurationStore.Source, Closeable, StatisticsGatherer,
EventLoggerProvider
{
IConnectionRegistry getConnectionRegistry();
String getName();
- AMQQueue getQueue(String name);
+ Q getQueue(String name);
MessageSource getMessageSource(String name);
- AMQQueue getQueue(UUID id);
+ Q getQueue(UUID id);
- Collection<AMQQueue> getQueues();
+ Collection<Q> getQueues();
- int removeQueue(AMQQueue queue);
+ int removeQueue(Q queue);
- AMQQueue createQueue(Map<String, Object> arguments) throws QueueExistsException;
+ Q createQueue(Map<String, Object> arguments) throws QueueExistsException;
- ExchangeImpl createExchange(Map<String,Object> attributes)
+ E createExchange(Map<String,Object> attributes)
throws ExchangeExistsException, ReservedExchangeNameException,
UnknownExchangeException, AMQUnknownExchangeType;
- void removeExchange(ExchangeImpl exchange, boolean force) throws ExchangeIsAlternateException,
+ void removeExchange(E exchange, boolean force) throws ExchangeIsAlternateException,
RequiredExchangeException;
MessageDestination getMessageDestination(String name);
- ExchangeImpl getExchange(String name);
- ExchangeImpl getExchange(UUID id);
+ E getExchange(String name);
+ E getExchange(UUID id);
MessageDestination getDefaultDestination();
- Collection<ExchangeImpl<?>> getExchanges();
+ Collection<E> getExchanges();
Collection<ExchangeType<? extends ExchangeImpl>> getExchangeTypes();
@@ -112,7 +112,7 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable
ScheduledFuture<?> scheduleTask(long delay, Runnable timeoutTask);
- State getState();
+ VirtualHostState getVirtualHostState();
public void block();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java
deleted file mode 100644
index 626615a59f..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.qpid.server.virtualhost;/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.qpid.server.plugin.QpidServiceLoader;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
-
-public class VirtualHostFactoryRegistry
-{
- private static Map<String, VirtualHostFactory> getFactoryMap()
- {
- Map<String, VirtualHostFactory> virtualHostFactories = new HashMap<String, VirtualHostFactory>();
- QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
- Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
- for (VirtualHostFactory virtualHostFactory : factories)
- {
- String type = virtualHostFactory.getType();
- VirtualHostFactory factory = virtualHostFactories.put(type, virtualHostFactory);
- if (factory != null)
- {
- throw new IllegalStateException("VirtualHostFactory with type name '" + type
- + "' is already registered using class '" + factory.getClass().getName() + "', can not register class '"
- + virtualHostFactory.getClass().getName() + "'");
- }
- }
- return virtualHostFactories;
- }
-
-
- public static Collection<VirtualHostFactory> getFactories()
- {
- return Collections.unmodifiableCollection(getFactoryMap().values());
- }
-
- public static Collection<String> getVirtualHostTypes()
- {
- return Collections.unmodifiableCollection(getFactoryMap().keySet());
- }
-
- public static VirtualHostFactory getFactory(String type)
- {
- return getFactoryMap().get(type);
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/State.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostState.java
index 55e2539dcf..b3b30fab82 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/State.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostState.java
@@ -20,7 +20,7 @@
*/
package org.apache.qpid.server.virtualhost;
-public enum State
+public enum VirtualHostState
{
INITIALISING,
ACTIVE,
diff --git a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory b/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
index c66ff45897..c2f1353671 100644
--- a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
+++ b/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory
@@ -32,7 +32,7 @@ org.apache.qpid.server.model.port.JmxPortFactory
org.apache.qpid.server.model.port.RmiPortFactory
org.apache.qpid.server.model.port.PortFactory
org.apache.qpid.server.model.adapter.BrokerAdapterFactory
-org.apache.qpid.server.model.adapter.StandardVirtualHostAdapterFactory
+org.apache.qpid.server.model.adapter.StandardVirtualHostFactory
org.apache.qpid.server.model.adapter.FileBasedGroupProviderFactory
org.apache.qpid.server.model.adapter.FileSystemPreferencesProviderFactory
diff --git a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory b/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory
deleted file mode 100644
index 81217884e4..0000000000
--- a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-org.apache.qpid.server.virtualhost.StandardVirtualHostFactory
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java
index 7a028a8113..ec68fcff56 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java
@@ -20,24 +20,27 @@
*/
package org.apache.qpid.server.configuration.startup;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
import junit.framework.TestCase;
+
import org.apache.qpid.server.configuration.ConfigurationEntry;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.adapter.StandardVirtualHostAdapter;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
+import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
public class VirtualHostCreationTest extends TestCase
{
@@ -49,15 +52,19 @@ public class VirtualHostCreationTest extends TestCase
Broker parent = mock(Broker.class);
when(parent.getAttribute(Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD)).thenReturn(3000l);
when(parent.getSecurityManager()).thenReturn(securityManager);
+ VirtualHostRegistry virtualHostRegistry = mock(VirtualHostRegistry.class);
+ when(virtualHostRegistry.getEventLogger()).thenReturn(mock(EventLogger.class));
+ when(parent.getVirtualHostRegistry()).thenReturn(virtualHostRegistry);
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
+ attributes.put(VirtualHost.ID, UUID.randomUUID());
attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
when(entry.getAttributes()).thenReturn(attributes);
- VirtualHost host = new StandardVirtualHostAdapter(UUID.randomUUID(),attributes,parent);
+ VirtualHost host = new StandardVirtualHost(attributes,parent);
assertNotNull("Null is returned", host);
assertEquals("Unexpected name", getName(), host.getName());
@@ -67,7 +74,7 @@ public class VirtualHostCreationTest extends TestCase
{
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE,
TestMemoryMessageStore.TYPE));
String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.TYPE, VirtualHost.MESSAGE_STORE_SETTINGS};
@@ -78,18 +85,20 @@ public class VirtualHostCreationTest extends TestCase
public void checkMandatoryAttributesAreValidated(String[] mandatoryAttributes, Map<String, Object> attributes)
{
SecurityManager securityManager = mock(SecurityManager.class);
- ConfigurationEntry entry = mock(ConfigurationEntry.class);
Broker parent = mock(Broker.class);
when(parent.getSecurityManager()).thenReturn(securityManager);
+ VirtualHostRegistry virtualHostRegistry = mock(VirtualHostRegistry.class);
+ when(virtualHostRegistry.getEventLogger()).thenReturn(mock(EventLogger.class));
+ when(parent.getVirtualHostRegistry()).thenReturn(virtualHostRegistry);
for (String name : mandatoryAttributes)
{
Map<String, Object> copy = new HashMap<String, Object>(attributes);
copy.remove(name);
- when(entry.getAttributes()).thenReturn(copy);
+ copy.put(ConfiguredObject.ID, UUID.randomUUID());
try
{
- VirtualHost host = new StandardVirtualHostAdapter(UUID.randomUUID(),copy,parent);
+ VirtualHost host = new StandardVirtualHost(copy,parent);
fail("Cannot create a virtual host without a mandatory attribute " + name);
}
catch(IllegalConfigurationException e)
@@ -100,6 +109,11 @@ public class VirtualHostCreationTest extends TestCase
{
// pass
}
+ catch(NullPointerException e)
+ {
+ System.err.println(name);
+ e.printStackTrace();
+ }
}
}
}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
index 53cbf5b32a..c7cc51426b 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
@@ -20,24 +20,23 @@
*/
package org.apache.qpid.server.model;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
import org.apache.qpid.server.configuration.RecovererProvider;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.model.adapter.StandardVirtualHostAdapter;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
import org.apache.qpid.server.util.BrokerTestHelper;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.test.utils.QpidTestCase;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
public class VirtualHostTest extends QpidTestCase
{
@@ -83,22 +82,6 @@ public class VirtualHostTest extends QpidTestCase
assertEquals("Unexpected state", State.ACTIVE, host.getAttribute(VirtualHost.STATE));
}
- public void testQuiescedState()
- {
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
- attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
- attributes.put(VirtualHost.STATE, State.QUIESCED);
-
- VirtualHost host = createHost(attributes);
-
- assertEquals("Unexpected state", State.QUIESCED, host.getAttribute(VirtualHost.STATE));
-
- host.setDesiredState(State.QUIESCED, State.ACTIVE);
- assertEquals("Unexpected state", State.ACTIVE, host.getAttribute(VirtualHost.STATE));
- }
-
public void testStoppedState()
{
VirtualHost host = createHost();
@@ -148,7 +131,7 @@ public class VirtualHostTest extends QpidTestCase
{
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
VirtualHost host = createHost(attributes);
@@ -157,7 +140,9 @@ public class VirtualHostTest extends QpidTestCase
private VirtualHost createHost(Map<String, Object> attributes)
{
- return new StandardVirtualHostAdapter(UUID.randomUUID(), attributes, _broker);
+ attributes = new HashMap<String, Object>(attributes);
+ attributes.put(VirtualHost.ID, UUID.randomUUID());
+ return new StandardVirtualHost(attributes, _broker);
}
}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
index e27981d22c..120d70ef4f 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
@@ -21,9 +21,7 @@
package org.apache.qpid.server.security;
import static org.apache.qpid.server.security.access.ObjectType.BROKER;
-import static org.apache.qpid.server.security.access.ObjectType.EXCHANGE;
import static org.apache.qpid.server.security.access.Operation.ACCESS_LOGS;
-import static org.apache.qpid.server.security.access.Operation.PUBLISH;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
@@ -59,7 +57,7 @@ public class SecurityManagerTest extends QpidTestCase
private AccessControl _accessControl;
private SecurityManager _securityManager;
- private VirtualHost<?> _virtualHost;
+ private VirtualHost<?,?,?> _virtualHost;
@Override
public void setUp() 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 1b131a18e1..de4cebcd07 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
@@ -21,6 +21,7 @@
package org.apache.qpid.server.util;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -29,27 +30,30 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.exchange.DefaultExchangeFactory;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.logging.EventLogger;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObjectFactory;
import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.UUIDGenerator;
+import org.apache.qpid.server.model.adapter.BrokerAdapter;
+import org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory;
import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.protocol.AMQSessionModel;
-import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore;
-import org.apache.qpid.server.exchange.DefaultExchangeFactory;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.UUIDGenerator;
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.stats.StatisticsGatherer;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
+import org.apache.qpid.server.virtualhost.QueueExistsException;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.plugin.PluggableFactoryLoader;
-import org.apache.qpid.server.plugin.VirtualHostFactory;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-import org.apache.qpid.server.virtualhost.QueueExistsException;
public class BrokerTestHelper
{
@@ -57,6 +61,12 @@ public class BrokerTestHelper
protected static final String BROKER_STORE_CLASS_NAME_KEY = "brokerstore.class.name";
protected static final String JSON_BROKER_STORE_CLASS_NAME = JsonConfigurationEntryStore.class.getName();
+ private static final TaskExecutor TASK_EXECUTOR = new TaskExecutor();
+ static
+ {
+ TASK_EXECUTOR.start();
+ }
+
public static Broker createBrokerMock()
{
SubjectCreator subjectCreator = mock(SubjectCreator.class);
@@ -81,19 +91,39 @@ public class BrokerTestHelper
{
}
- public static VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry, org.apache.qpid.server.model.VirtualHost modelVHost)
+ public static VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry, Map<String,Object> attributes)
throws Exception
{
- String hostType = modelVHost.getType();
- VirtualHostFactory factory = new PluggableFactoryLoader<VirtualHostFactory>(VirtualHostFactory.class).get(hostType);
- VirtualHost host = factory.createVirtualHost(virtualHostRegistry,
- mock(StatisticsGatherer.class),
- new SecurityManager(mock(Broker.class), false),
- modelVHost);
- if(virtualHostRegistry != null)
+
+ //VirtualHostFactory factory = new PluggableFactoryLoader<VirtualHostFactory>(VirtualHostFactory.class).get(hostType);
+
+ Broker broker = mock(Broker.class);
+ when(broker.getVirtualHostRegistry()).thenReturn(virtualHostRegistry);
+ when(broker.getTaskExecutor()).thenReturn(TASK_EXECUTOR);
+ SecurityManager securityManager = new SecurityManager(broker, false);
+ when(broker.getSecurityManager()).thenReturn(securityManager);
+ when(broker.getAttribute(eq(Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD))).thenReturn(BrokerAdapter.DEFAULT_HOUSEKEEPING_CHECK_PERIOD);
+ when(broker.getAttribute(eq(Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED))).thenReturn(BrokerAdapter.DEFAULT_DEAD_LETTER_QUEUE_ENABLED);
+ when(broker.getAttribute(eq(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE))).thenReturn(BrokerAdapter.DEFAULT_ALERT_THRESHOLD_MESSAGE_AGE);
+ when(broker.getAttribute(eq(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE))).thenReturn(BrokerAdapter.DEFAULT_ALERT_THRESHOLD_MESSAGE_SIZE);
+ when(broker.getAttribute(eq(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES))).thenReturn(BrokerAdapter.DEFAULT_ALERT_THRESHOLD_MESSAGE_COUNT);
+ when(broker.getAttribute(eq(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES))).thenReturn(BrokerAdapter.DEFAULT_ALERT_THRESHOLD_QUEUE_DEPTH);
+ when(broker.getAttribute(eq(Broker.QUEUE_ALERT_REPEAT_GAP))).thenReturn(BrokerAdapter.DEFAULT_ALERT_REPEAT_GAP);
+ when(broker.getAttribute(eq(Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES))).thenReturn(BrokerAdapter.DEFAULT_FLOW_CONTROL_SIZE_BYTES);
+ when(broker.getAttribute(eq(Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES))).thenReturn(BrokerAdapter.DEFAULT_FLOW_CONTROL_RESUME_SIZE_BYTES);
+ when(broker.getAttribute(eq(Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS))).thenReturn(BrokerAdapter.DEFAULT_MAXIMUM_DELIVERY_ATTEMPTS);
+
+ ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactory();
+ ConfiguredObjectTypeFactory factory = objectFactory.getConfiguredObjectTypeFactory(org.apache.qpid.server.model.VirtualHost.class,
+ attributes);
+
+ AbstractVirtualHost host = (AbstractVirtualHost) factory.create(attributes, broker);
+
+ host.setDesiredState(host.getState(), State.ACTIVE);
+ /*if(virtualHostRegistry != null)
{
virtualHostRegistry.registerVirtualHost(host);
- }
+ }*/
return host;
}
@@ -104,16 +134,16 @@ public class BrokerTestHelper
public static VirtualHost createVirtualHost(String name, VirtualHostRegistry virtualHostRegistry) throws Exception
{
- org.apache.qpid.server.model.VirtualHost virtualHost = mock(org.apache.qpid.server.model.VirtualHost.class);
- when(virtualHost.getType()).thenReturn(StandardVirtualHostFactory.TYPE);
- when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.TYPE)).thenReturn(StandardVirtualHostFactory.TYPE);
+ Map<String,Object> attributes = new HashMap<String, Object>();
+ attributes.put(org.apache.qpid.server.model.VirtualHost.TYPE, StandardVirtualHost.TYPE);
Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
messageStoreSettings.put(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE);
- when(virtualHost.getMessageStoreSettings()).thenReturn(messageStoreSettings);
- when(virtualHost.getName()).thenReturn(name);
- return createVirtualHost(virtualHostRegistry, virtualHost);
+ attributes.put(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
+ attributes.put(org.apache.qpid.server.model.VirtualHost.NAME, name);
+
+ return createVirtualHost(virtualHostRegistry, attributes);
}
public static AMQSessionModel createSession(int channelId, AMQConnectionModel connection)
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java
index 04a218d024..13c7dc8de2 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java
@@ -22,7 +22,9 @@ package org.apache.qpid.server.virtualhost;
import java.util.Collection;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.ScheduledFuture;
+
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.connection.IConnectionRegistry;
import org.apache.qpid.server.exchange.ExchangeImpl;
@@ -40,9 +42,7 @@ import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.txn.DtxRegistry;
-import java.util.UUID;
-
-public class MockVirtualHost implements VirtualHost
+public class MockVirtualHost implements VirtualHost<AMQQueue<?>, ExchangeImpl<?>>
{
private String _name;
@@ -118,7 +118,7 @@ public class MockVirtualHost implements VirtualHost
}
@Override
- public AMQQueue getQueue(String name)
+ public AMQQueue<?> getQueue(String name)
{
return null;
}
@@ -130,25 +130,25 @@ public class MockVirtualHost implements VirtualHost
}
@Override
- public AMQQueue getQueue(UUID id)
+ public AMQQueue<?> getQueue(UUID id)
{
return null;
}
@Override
- public Collection<AMQQueue> getQueues()
+ public Collection<AMQQueue<?>> getQueues()
{
return null;
}
@Override
- public int removeQueue(AMQQueue queue)
+ public int removeQueue(AMQQueue<?> queue)
{
return 0;
}
@Override
- public AMQQueue createQueue(Map<String, Object> arguments)
+ public AMQQueue<?> createQueue(Map<String, Object> arguments)
{
return null;
}
@@ -286,9 +286,9 @@ public class MockVirtualHost implements VirtualHost
}
- public State getState()
+ public VirtualHostState getVirtualHostState()
{
- return State.ACTIVE;
+ return VirtualHostState.ACTIVE;
}
public void block()
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java
index 32037807cd..523640adad 100644
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java
+++ b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java
@@ -66,7 +66,7 @@ public class RuleSetTest extends QpidTestCase
private String _exchangeType = "direct";
private Subject _testSubject = TestPrincipalUtils.createTestSubject(TEST_USER);
private AMQQueue<?> _queue;
- private VirtualHost<?> _virtualHost;
+ private VirtualHost<?,?,?> _virtualHost;
@Override
public void setUp() throws Exception
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
index d4af18aaec..1f72b5dde8 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
@@ -41,7 +41,7 @@ import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
-import org.apache.qpid.server.virtualhost.State;
+import org.apache.qpid.server.virtualhost.VirtualHostState;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.transport.*;
import org.apache.qpid.transport.network.NetworkConnection;
@@ -206,7 +206,7 @@ public class ServerConnectionDelegate extends ServerDelegate
return;
}
- if (vhost.getState() != State.ACTIVE)
+ if (vhost.getVirtualHostState() != VirtualHostState.ACTIVE)
{
sconn.setState(Connection.State.CLOSING);
sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED, "Virtual host '"+vhostName+"' is not active"));
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionOpenMethodHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionOpenMethodHandler.java
index 1a29806f62..9ab308cd8a 100644
--- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionOpenMethodHandler.java
+++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionOpenMethodHandler.java
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.server.protocol.v0_8.handler;
+import java.security.AccessControlException;
+
import org.apache.log4j.Logger;
import org.apache.qpid.AMQException;
@@ -32,10 +34,8 @@ import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession;
import org.apache.qpid.server.protocol.v0_8.state.AMQState;
import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager;
import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener;
-import org.apache.qpid.server.virtualhost.State;
import org.apache.qpid.server.virtualhost.VirtualHost;
-
-import java.security.AccessControlException;
+import org.apache.qpid.server.virtualhost.VirtualHostState;
public class ConnectionOpenMethodHandler implements StateAwareMethodListener<ConnectionOpenBody>
{
@@ -92,7 +92,7 @@ public class ConnectionOpenMethodHandler implements StateAwareMethodListener<Con
throw body.getConnectionException(AMQConstant.ACCESS_REFUSED, e.getMessage());
}
- if (virtualHost.getState() != State.ACTIVE)
+ if (virtualHost.getVirtualHostState() != VirtualHostState.ACTIVE)
{
throw body.getConnectionException(AMQConstant.CONNECTION_FORCED, "Virtual host '" + virtualHost.getName() + "' is not active");
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
index d6d52f86ba..7aa86313b2 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
@@ -77,7 +77,7 @@ public class MessageContentServlet extends AbstractServlet
String vhostName = pathInfoElements[0];
String queueName = pathInfoElements[1];
- VirtualHost<?> vhost = null;
+ VirtualHost<?,?,?> vhost = null;
for(VirtualHost vh : getBroker().getVirtualHosts())
{
@@ -91,7 +91,7 @@ public class MessageContentServlet extends AbstractServlet
return getQueueFromVirtualHost(queueName, vhost);
}
- private Queue getQueueFromVirtualHost(String queueName, VirtualHost<?> vhost)
+ private Queue getQueueFromVirtualHost(String queueName, VirtualHost<?,?,?> vhost)
{
Queue queue = null;
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
index b23f0cb168..f72471b7d4 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
@@ -31,6 +31,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
+
import org.apache.qpid.server.consumer.ConsumerImpl;
import org.apache.qpid.server.message.AMQMessageHeader;
import org.apache.qpid.server.message.MessageReference;
@@ -41,8 +44,6 @@ import org.apache.qpid.server.queue.QueueEntry;
import org.apache.qpid.server.queue.QueueEntryVisitor;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.access.Operation;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
public class MessageServlet extends AbstractServlet
{
@@ -134,9 +135,9 @@ public class MessageServlet extends AbstractServlet
String vhostName = pathInfoElements[0];
String queueName = pathInfoElements[1];
- VirtualHost<?> vhost = null;
+ VirtualHost<?,?,?> vhost = null;
- for(VirtualHost<?> vh : getBroker().getVirtualHosts())
+ for(VirtualHost<?,?,?> vh : getBroker().getVirtualHosts())
{
if(vh.getName().equals(vhostName))
{
@@ -148,11 +149,11 @@ public class MessageServlet extends AbstractServlet
return getQueueFromVirtualHost(queueName, vhost);
}
- private Queue getQueueFromVirtualHost(String queueName, VirtualHost<?> vhost)
+ private Queue getQueueFromVirtualHost(String queueName, VirtualHost<?,?,?> vhost)
{
Queue queue = null;
- for(Queue q : vhost.getQueues())
+ for(Queue<?> q : vhost.getQueues())
{
if(q.getName().equals(queueName))
@@ -420,7 +421,7 @@ public class MessageServlet extends AbstractServlet
String destQueueName = (String) providedObject.get("destinationQueue");
Boolean move = (Boolean) providedObject.get("move");
- final VirtualHost<?> vhost = sourceQueue.getParent(VirtualHost.class);
+ final VirtualHost<?,?,?> vhost = sourceQueue.getParent(VirtualHost.class);
boolean isMoveTransaction = move != null && Boolean.valueOf(move);
@@ -461,7 +462,7 @@ public class MessageServlet extends AbstractServlet
final Queue<?> sourceQueue = getQueueFromRequest(request);
- final VirtualHost<?> vhost = sourceQueue.getParent(VirtualHost.class);
+ final VirtualHost<?,?,?> vhost = sourceQueue.getParent(VirtualHost.class);
final List<Long> messageIds = new ArrayList<Long>();
@@ -485,7 +486,7 @@ public class MessageServlet extends AbstractServlet
}
- private void authorizeMethod(String methodName, VirtualHost<?> vhost)
+ private void authorizeMethod(String methodName, VirtualHost<?,?,?> vhost)
{
SecurityManager securityManager = getBroker().getSecurityManager();
securityManager.authoriseMethod(Operation.UPDATE, "VirtualHost.Queue", methodName, vhost.getName());
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java
index afad673f84..53eacf18d1 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java
@@ -21,7 +21,17 @@
package org.apache.qpid.server.jmx;
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.management.JMException;
+
import org.apache.log4j.Logger;
+
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.jmx.mbeans.LoggingManagementMBean;
import org.apache.qpid.server.jmx.mbeans.ServerInformationMBean;
@@ -29,21 +39,22 @@ import org.apache.qpid.server.jmx.mbeans.Shutdown;
import org.apache.qpid.server.jmx.mbeans.UserManagementMBean;
import org.apache.qpid.server.jmx.mbeans.VirtualHostMBean;
import org.apache.qpid.server.logging.log4j.LoggingManagementFacade;
-import org.apache.qpid.server.model.*;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfigurationChangeListener;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ManagedAttribute;
import org.apache.qpid.server.model.ManagedObject;
+import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.adapter.AbstractPluginAdapter;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.util.MapValueConverter;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
-import javax.management.JMException;
-import java.io.IOException;
-import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
@ManagedObject( category = false , type = "MANAGEMENT-JMX" )
public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implements ConfigurationChangeListener
{
@@ -143,7 +154,7 @@ public class JMXManagement extends AbstractPluginAdapter<JMXManagement> implemen
synchronized (_children)
{
- for(VirtualHost<?> virtualHost : broker.getVirtualHosts())
+ for(VirtualHost<?,?,?> virtualHost : broker.getVirtualHosts())
{
if(!_children.containsKey(virtualHost))
{
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
index 5a7674d4fd..97cc7d7737 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
@@ -20,14 +20,15 @@
*/
package org.apache.qpid.server.jmx;
-import org.apache.log4j.Logger;
-
-import org.apache.qpid.server.configuration.BrokerProperties;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.Arrays;
import javax.management.Attribute;
import javax.management.JMException;
@@ -38,15 +39,15 @@ import javax.management.ObjectName;
import javax.management.RuntimeErrorException;
import javax.management.remote.MBeanServerForwarder;
import javax.security.auth.Subject;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Arrays;
+
+import org.apache.log4j.Logger;
+
+import org.apache.qpid.server.configuration.BrokerProperties;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.security.access.Operation;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
/**
* This class can be used by the JMXConnectorServer as an InvocationHandler for the mbean operations. It delegates
@@ -200,7 +201,7 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler
if (virtualHostName != null)
{
- VirtualHost<?> virtualHost = _broker.findVirtualHostByName(virtualHostName);
+ VirtualHost<?,?,?> virtualHost = _broker.findVirtualHostByName(virtualHostName);
if (virtualHost == null)
{
throw new IllegalArgumentException("Virtual host with name '" + virtualHostName + "' is not found.");
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java
index 575fec58e9..30d85df947 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java
@@ -29,7 +29,7 @@ import org.apache.qpid.server.model.VirtualHost;
public class MBeanUtils
{
- public static Queue findQueueFromQueueName(VirtualHost<?> virtualHost, String queueName) throws OperationsException
+ public static Queue findQueueFromQueueName(VirtualHost<?,?,?> virtualHost, String queueName) throws OperationsException
{
Queue queue = ConfiguredObjectFinder.findConfiguredObjectByName(virtualHost.getQueues(), queueName);
if (queue == null)
@@ -42,7 +42,7 @@ public class MBeanUtils
}
}
- public static Exchange findExchangeFromExchangeName(VirtualHost<?> virtualHost, String exchangeName) throws OperationsException
+ public static Exchange findExchangeFromExchangeName(VirtualHost<?,?,?> virtualHost, String exchangeName) throws OperationsException
{
Exchange exchange = ConfiguredObjectFinder.findConfiguredObjectByName(virtualHost.getExchanges(), exchangeName);
if (exchange == null)
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java
index 4775650954..8fe0bf9e10 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java
@@ -298,7 +298,7 @@ public class QueueMBean extends AMQManagedObject implements ManagedQueue, QueueN
}
else
{
- VirtualHost<?> virtualHost = _queue.getParent(VirtualHost.class);
+ VirtualHost<?,?,?> virtualHost = _queue.getParent(VirtualHost.class);
Exchange exchange = MBeanUtils.findExchangeFromExchangeName(virtualHost, exchangeName);
_queue.setAttribute(Queue.ALTERNATE_EXCHANGE, getAlternateExchange(), exchange);
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
index 906f1a481d..3a5c5957dc 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
@@ -21,7 +21,16 @@
package org.apache.qpid.server.jmx.mbeans;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.JMException;
+import javax.management.ObjectName;
+
import org.apache.log4j.Logger;
+
import org.apache.qpid.server.jmx.AMQManagedObject;
import org.apache.qpid.server.jmx.ManagedObject;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
@@ -34,18 +43,11 @@ import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.virtualhost.ManagedVirtualHost;
-import javax.management.JMException;
-import javax.management.ObjectName;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
public class VirtualHostMBean extends AMQManagedObject implements ManagedVirtualHost, ConfigurationChangeListener
{
private static final Logger LOGGER = Logger.getLogger(VirtualHostMBean.class);
- private final VirtualHost<?> _virtualHost;
+ private final VirtualHost<?,?,?> _virtualHost;
private final Map<ConfiguredObject, AMQManagedObject> _children =
new HashMap<ConfiguredObject, AMQManagedObject>();
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java
index ca8cc7eb7d..8f282c0d50 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java
@@ -36,6 +36,7 @@ import javax.management.ObjectName;
import javax.management.OperationsException;
import org.apache.log4j.Logger;
+
import org.apache.qpid.management.common.mbeans.ManagedBroker;
import org.apache.qpid.management.common.mbeans.ManagedQueue;
import org.apache.qpid.management.common.mbeans.annotations.MBeanConstructor;
@@ -47,7 +48,6 @@ import org.apache.qpid.server.model.LifetimePolicy;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.server.queue.QueueArgumentsConverter;
@MBeanDescription("This MBean exposes the broker level management features")
@@ -106,7 +106,7 @@ public class VirtualHostManagerMBean extends AbstractStatisticsGatheringMBean<Vi
@Override
public String[] getExchangeTypes() throws IOException
{
- Collection<String> exchangeTypes = _virtualHostMBean.getVirtualHost().getExchangeTypes();
+ Collection<String> exchangeTypes = _virtualHostMBean.getVirtualHost().getExchangeTypeNames();
return exchangeTypes.toArray(new String[exchangeTypes.size()]);
}
@@ -158,7 +158,7 @@ public class VirtualHostManagerMBean extends AbstractStatisticsGatheringMBean<Vi
public void createNewExchange(String name, String type, boolean durable)
throws IOException, JMException, MBeanException
{
- if (!getConfiguredObject().getExchangeTypes().contains(type))
+ if (!getConfiguredObject().getExchangeTypeNames().contains(type))
{
throw new OperationsException("No such exchange type \""+type+"\"");
}
diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java
index 8d56e766fc..b8a432bc4b 100644
--- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java
+++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java
@@ -20,8 +20,8 @@
package org.apache.qpid.server.jmx.mbeans;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Collections;
@@ -30,6 +30,7 @@ import java.util.Map;
import javax.management.OperationsException;
import junit.framework.TestCase;
+import org.mockito.ArgumentCaptor;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
import org.apache.qpid.server.model.Exchange;
@@ -37,9 +38,7 @@ import org.apache.qpid.server.model.LifetimePolicy;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.server.queue.QueueArgumentsConverter;
-import org.mockito.ArgumentCaptor;
public class VirtualHostManagerMBeanTest extends TestCase
{
@@ -59,7 +58,7 @@ public class VirtualHostManagerMBeanTest extends TestCase
protected void setUp() throws Exception
{
_mockVirtualHost = mock(VirtualHost.class);
- when(_mockVirtualHost.getExchangeTypes()).thenReturn(Collections.singletonList(TEST_EXCHANGE_TYPE));
+ when(_mockVirtualHost.getExchangeTypeNames()).thenReturn(Collections.singletonList(TEST_EXCHANGE_TYPE));
_mockManagedObjectRegistry = mock(ManagedObjectRegistry.class);
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 7db8210753..5ab6800612 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
@@ -20,10 +20,6 @@
*/
package org.apache.qpid.server.store;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
@@ -31,6 +27,7 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
+
import org.apache.qpid.common.AMQPFilterTypes;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.framing.BasicContentHeaderProperties;
@@ -59,7 +56,8 @@ import org.apache.qpid.server.queue.StandardQueue;
import org.apache.qpid.server.txn.AutoCommitTransaction;
import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.util.BrokerTestHelper;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import org.apache.qpid.test.utils.QpidTestCase;
@@ -102,9 +100,9 @@ public class VirtualHostMessageStoreTest extends QpidTestCase
private String queueOwner = "MST";
- private VirtualHost _virtualHost;
- private org.apache.qpid.server.model.VirtualHost<?> _virtualHostModel;
+ private AbstractVirtualHost<?> _virtualHost;
private String _storePath;
+ private Map<String, Object> _attributes;
public void setUp() throws Exception
{
@@ -118,13 +116,11 @@ public class VirtualHostMessageStoreTest extends QpidTestCase
messageStoreSettings.put(MessageStore.STORE_PATH, _storePath);
messageStoreSettings.put(MessageStore.STORE_TYPE, getTestProfileMessageStoreType());
- _virtualHostModel = mock(org.apache.qpid.server.model.VirtualHost.class);
+ _attributes = new HashMap<String, Object>();
+ _attributes.put(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
+ _attributes.put(org.apache.qpid.server.model.VirtualHost.TYPE, StandardVirtualHost.TYPE);
+ _attributes.put(org.apache.qpid.server.model.VirtualHost.NAME, hostName);
- when(_virtualHostModel.getMessageStoreSettings()).thenReturn(messageStoreSettings);
- when(_virtualHostModel.getAttribute(eq(org.apache.qpid.server.model.VirtualHost.TYPE))).thenReturn(StandardVirtualHostFactory.TYPE);
- when(_virtualHostModel.getAttribute(eq(org.apache.qpid.server.model.VirtualHost.NAME))).thenReturn(hostName);
- when(_virtualHostModel.getType()).thenReturn(StandardVirtualHostFactory.TYPE);
- when(_virtualHostModel.getName()).thenReturn(hostName);
cleanup(new File(_storePath));
@@ -136,9 +132,9 @@ public class VirtualHostMessageStoreTest extends QpidTestCase
return _storePath;
}
- protected org.apache.qpid.server.model.VirtualHost<?> getVirtualHostModel()
+ protected org.apache.qpid.server.model.VirtualHost<?,?,?> getVirtualHostModel()
{
- return _virtualHostModel;
+ return _virtualHost;
}
@Override
@@ -182,13 +178,7 @@ public class VirtualHostMessageStoreTest extends QpidTestCase
try
{
- _virtualHost = BrokerTestHelper.createVirtualHost(new VirtualHostRegistry(new EventLogger()), getVirtualHostModel());
- when(_virtualHostModel.getId()).thenReturn(_virtualHost.getId());
-
- ConfiguredObjectRecord objectRecord = mock(ConfiguredObjectRecord.class);
- when(objectRecord.getId()).thenReturn(_virtualHost.getId());
- when(objectRecord.getType()).thenReturn(org.apache.qpid.server.model.VirtualHost.class.getSimpleName());
- when(_virtualHostModel.asObjectRecord()).thenReturn(objectRecord);
+ _virtualHost = (AbstractVirtualHost<?>) BrokerTestHelper.createVirtualHost(new VirtualHostRegistry(new EventLogger()), _attributes);
}
catch (Exception e)
{
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 1ae1be3101..421c609e46 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,16 +30,17 @@ import java.util.Map;
import javax.jms.Session;
import javax.servlet.http.HttpServletResponse;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.server.model.Exchange;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.queue.ConflationQueue;
import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.util.FileUtils;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
public class VirtualHostRestTest extends QpidRestTestCase
{
@@ -542,7 +543,7 @@ public class VirtualHostRestTest extends QpidRestTestCase
Map<String, Object> hostData = new HashMap<String, Object>();
hostData.put(VirtualHost.NAME, hostName);
- hostData.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ hostData.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
hostData.put(VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
return getRestTestHelper().submitRequest("/rest/virtualhost/" + hostName, "PUT", hostData);
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 d98572807a..c5f192e27c 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
@@ -47,7 +47,7 @@ import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManag
import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory;
import org.apache.qpid.server.security.group.FileGroupManagerFactory;
import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.systest.rest.QpidRestTestCase;
import org.apache.qpid.test.utils.TestBrokerConfiguration;
import org.apache.qpid.test.utils.TestFileUtils;
@@ -985,7 +985,7 @@ public class BrokerACLTest extends QpidRestTestCase
Map<String, Object> hostData = new HashMap<String, Object>();
hostData.put(VirtualHost.NAME, hostName);
hostData.put(VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
- hostData.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ hostData.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
return getRestTestHelper().submitRequest("/rest/virtualhost/" + hostName, "PUT", hostData);
}
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 6081dfeebf..20a3347895 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
@@ -36,7 +36,7 @@ import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.protocol.AmqpProtocolVersion;
import org.apache.qpid.server.store.MemoryMessageStore;
import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
import org.apache.qpid.url.URLSyntaxException;
import org.apache.qpid.util.FileUtils;
import org.apache.qpid.util.SystemUtils;
@@ -832,7 +832,7 @@ public class QpidBrokerTestCase extends QpidTestCase
// add new virtual host configuration to the broker store
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, virtualHostName);
- attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
messageStoreSettings.put(MessageStore.STORE_TYPE, storeType);
messageStoreSettings.put(MessageStore.STORE_PATH, storeDir);