diff options
Diffstat (limited to 'qpid/java')
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); |
