diff options
| author | Keith Wall <kwall@apache.org> | 2011-11-09 08:58:59 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2011-11-09 08:58:59 +0000 |
| commit | cc6ee2720ce235498297d76f35da4aea2c557de2 (patch) | |
| tree | eb8fcf6c3986a0063edd3080f9086e1107d45f7b /qpid/java/broker | |
| parent | 960385b344d5ed47ac42c11438abba17f9e8f9a9 (diff) | |
| download | qpid-python-cc6ee2720ce235498297d76f35da4aea2c557de2.tar.gz | |
QPID-3518: Introduce client side ability to detect server side support.
Applied patch from Oleksandr Rudyy<orudyy@gmail.com> and myself.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1199662 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker')
7 files changed, 88 insertions, 11 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfig.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfig.java index 5cdb886821..7dffc2d3c0 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfig.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfig.java @@ -21,6 +21,8 @@ package org.apache.qpid.server.configuration; +import java.util.List; + public interface BrokerConfig extends ConfiguredObject<BrokerConfigType,BrokerConfig> { @@ -44,6 +46,19 @@ public interface BrokerConfig extends ConfiguredObject<BrokerConfigType,BrokerC String getDataDirectory(); + String getFederationTag(); + + /** + * List of feature(s) to be advertised to clients on connection. + * Feature names are strings, beginning with qpid. followed by more or more + * words separated by minus signs e.g. qpid.jms-selector. + * + * If there are no features, this method must return an empty array. + * + * @return list of feature names + */ + List<String> getFeatures(); + void addVirtualHost(VirtualHostConfig virtualHost); void createBrokerConnection(String transport, @@ -53,5 +68,4 @@ public interface BrokerConfig extends ConfiguredObject<BrokerConfigType,BrokerC String authMechanism, String username, String password); - String getFederationTag(); } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigType.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigType.java index 82b2fc82d2..e1cf87277b 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigType.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigType.java @@ -22,7 +22,6 @@ package org.apache.qpid.server.configuration; import java.util.*; -import java.io.File; public final class BrokerConfigType extends ConfigObjectType<BrokerConfigType, BrokerConfig> { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java index 70fa39c71d..0d347873c2 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java @@ -793,4 +793,16 @@ public class ServerConfiguration extends ConfigurationPlugin { return getIntValue("maximumChannelCount", 256); } + + /** + * List of Broker features that have been disabled within configuration. Disabled + * features won't be advertised to the clients on connection. + * + * @return list of disabled features, or empty list if no features are disabled. + */ + public List<String> getDisabledFeatures() + { + final List<String> disabledFeatures = getListValue("disabledFeatures", Collections.emptyList()); + return disabledFeatures; + } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java index f21158cd0c..f330e2f708 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.federation; +import org.apache.qpid.common.ServerPropertyNames; import org.apache.qpid.server.configuration.ConfigStore; import org.apache.qpid.server.configuration.ConfiguredObject; import org.apache.qpid.server.configuration.ConnectionConfig; @@ -252,7 +253,7 @@ public class BrokerLink implements LinkConfig, ConnectionListener _qpidConnection.connect(_host, _port, _remoteVhost, _username, _password, "ssl".equals(_transport), _authMechanism); final Map<String,Object> serverProps = _qpidConnection.getServerProperties(); - _remoteFederationTag = (String) serverProps.get("qpid.federation_tag"); + _remoteFederationTag = (String) serverProps.get(ServerPropertyNames.FEDERATION_TAG); if(_remoteFederationTag == null) { _remoteFederationTag = UUID.fromString(_transport+":"+_host+":"+_port).toString(); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java index 108533ef96..6a36b22400 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java @@ -23,7 +23,10 @@ package org.apache.qpid.server.registry; import org.apache.qpid.server.configuration.*; import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.common.QpidProperties; +import org.apache.qpid.common.ServerPropertyNames; +import java.util.ArrayList; +import java.util.Collections; import java.util.UUID; import java.util.List; import java.util.Map; @@ -158,4 +161,19 @@ public class BrokerConfigAdapter implements BrokerConfig { return _federationTag; } + + /** + * @see org.apache.qpid.server.configuration.BrokerConfig#getFeatures() + */ + @Override + public List<String> getFeatures() + { + final List<String> features = new ArrayList<String>(); + if (!_instance.getConfiguration().getDisabledFeatures().contains(ServerPropertyNames.FEATURE_QPID_JMS_SELECTOR)) + { + features.add(ServerPropertyNames.FEATURE_QPID_JMS_SELECTOR); + } + + return Collections.unmodifiableList(features); + } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java index 1e149c4d76..8d6e0e0d80 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java @@ -32,7 +32,9 @@ import java.util.StringTokenizer; import javax.security.sasl.SaslException; import javax.security.sasl.SaslServer; +import org.apache.qpid.common.ServerPropertyNames; import org.apache.qpid.protocol.ProtocolEngine; +import org.apache.qpid.server.configuration.BrokerConfig; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.registry.ApplicationRegistry; import org.apache.qpid.server.registry.IApplicationRegistry; @@ -58,15 +60,14 @@ import org.apache.qpid.transport.SessionDetached; public class ServerConnectionDelegate extends ServerDelegate { - private String _localFQDN; + private final String _localFQDN; private final IApplicationRegistry _appRegistry; public ServerConnectionDelegate(IApplicationRegistry appRegistry, String localFQDN) { - this(new HashMap<String,Object>(Collections.singletonMap("qpid.federation_tag",appRegistry.getBroker().getFederationTag())), Collections.singletonList((Object)"en_US"), appRegistry, localFQDN); + this(createConnectionProperties(appRegistry.getBroker()), Collections.singletonList((Object)"en_US"), appRegistry, localFQDN); } - public ServerConnectionDelegate(Map<String, Object> properties, List<Object> locales, IApplicationRegistry appRegistry, @@ -78,6 +79,18 @@ public class ServerConnectionDelegate extends ServerDelegate _localFQDN = localFQDN; } + private static Map<String, Object> createConnectionProperties(final BrokerConfig brokerConfig) + { + final Map<String,Object> map = new HashMap<String,Object>(2); + map.put(ServerPropertyNames.FEDERATION_TAG, brokerConfig.getFederationTag()); + final List<String> features = brokerConfig.getFeatures(); + if (features != null && features.size() > 0) + { + map.put(ServerPropertyNames.QPID_FEATURES, features); + } + return map; + } + private static List<Object> parseToList(String mechanisms) { List<Object> list = new ArrayList<Object>(); diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java index d22f1e6e94..9afd2a45a9 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java @@ -1298,7 +1298,7 @@ public class ServerConfigurationTest extends QpidTestCase } /** - * Test that a non-existant virtualhost file throws a {@link ConfigurationException}. + * Test that a non-existent virtualhost file throws a {@link ConfigurationException}. * <p> * Test for QPID-2624 */ @@ -1326,7 +1326,27 @@ public class ServerConfigurationTest extends QpidTestCase } } - /* + /** + * Tests that element disabledFeatures allows features that would + * otherwise be advertised by the broker to be turned off. + */ + public void testDisabledFeatures() throws ConfigurationException + { + // Check default + _serverConfig.initialise(); + _serverConfig = new ServerConfiguration(_config); + assertEquals("Unexpected size", 0, _serverConfig.getDisabledFeatures().size()); + + // Check value we set + _config.addProperty("disabledFeatures", "qpid.feature1"); + _config.addProperty("disabledFeatures", "qpid.feature2"); + _serverConfig = new ServerConfiguration(_config); + + assertEquals("Unexpected size",2, _serverConfig.getDisabledFeatures().size()); + assertTrue("Unexpected contents", _serverConfig.getDisabledFeatures().contains("qpid.feature1")); + } + + /** * Tests that the old element security.jmx.access (that used to be used * to define JMX access rights) is rejected. */ @@ -1352,7 +1372,7 @@ public class ServerConfigurationTest extends QpidTestCase } } - /* + /** * Tests that the old element security.jmx.principal-database (that used to define the * principal database used for JMX authentication) is rejected. */ @@ -1378,7 +1398,7 @@ public class ServerConfigurationTest extends QpidTestCase } } - /* + /** * Tests that the old element security.principal-databases. ... (that used to define * principal databases) is rejected. */ @@ -1403,7 +1423,7 @@ public class ServerConfigurationTest extends QpidTestCase } } - /* + /** * Tests that the old element housekeeping.expiredMessageCheckPeriod. ... (that was * replaced by housekeeping.checkPeriod) is rejected. */ |
