summaryrefslogtreecommitdiff
path: root/qpid/java/broker
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2011-11-09 08:58:59 +0000
committerKeith Wall <kwall@apache.org>2011-11-09 08:58:59 +0000
commitcc6ee2720ce235498297d76f35da4aea2c557de2 (patch)
treeeb8fcf6c3986a0063edd3080f9086e1107d45f7b /qpid/java/broker
parent960385b344d5ed47ac42c11438abba17f9e8f9a9 (diff)
downloadqpid-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')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfig.java16
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigType.java1
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java12
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java3
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java18
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java19
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java30
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.
*/