AMQ-5933 - add test and fix

This commit is contained in:
gtully 2015-08-19 15:02:09 +01:00
parent 3ee84a17fb
commit 3c2ed9352b
2 changed files with 27 additions and 8 deletions

View File

@ -76,15 +76,17 @@ public class SelectorAwareVirtualTopicInterceptor extends VirtualTopicIntercepto
if (cache != null) {
final Set<String> selectors = cache.getSelector(dest.getActiveMQDestination().getQualifiedName());
for (String selector : selectors) {
try {
final BooleanExpression expression = getExpression(selector);
matches = expression.matches(msgContext);
if (matches) {
return true;
if (selectors != null) {
for (String selector : selectors) {
try {
final BooleanExpression expression = getExpression(selector);
matches = expression.matches(msgContext);
if (matches) {
return true;
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
}
}

View File

@ -578,6 +578,23 @@ public class TwoBrokerVirtualTopicSelectorAwareForwardingTest extends
}
public void testSelectorNoMatchInCache() throws Exception {
clearSelectorCacheFiles();
// have the cache ignoreWildcardSelectors
final BrokerService brokerA = brokers.get("BrokerA").broker;
((SubQueueSelectorCacheBrokerPlugin)brokerA.getPlugins()[0]).setIgnoreWildcardSelectors(true);
startAllBrokers();
ActiveMQDestination consumerBQueue = createDestination("Consumer.B.VirtualTopic.tempTopic", false);
MessageConsumer nonMatchingConsumer = createConsumer("BrokerA", consumerBQueue, "foo = 'bar%'");
ActiveMQTopic virtualTopic = new ActiveMQTopic("VirtualTopic.tempTopic");
sendMessages("BrokerA", virtualTopic, 1, asMap("foo", "notBar"));
}
private HashMap<String, Object> asMap(String key, Object value) {
HashMap<String, Object> rc = new HashMap<String, Object>(1);
rc.put(key, value);