private WildcardConfiguration createWildCardConfiguration() { WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); wildcardConfiguration.setAnyWords('#'); wildcardConfiguration.setDelimiter('/'); wildcardConfiguration.setRoutingEnabled(true); wildcardConfiguration.setSingleWord('+'); return wildcardConfiguration; }
public static String convertMQTTAddressFilterToCore(String filter, WildcardConfiguration wildcardConfiguration) { return MQTT_WILDCARD.convert(filter, wildcardConfiguration); }
/** * @param e * @return */ protected void parseWildcardConfiguration(final Element e, final Configuration mainConfig) { WildcardConfiguration conf = mainConfig.getWildcardConfiguration(); conf.setDelimiter(getString(e, "delimiter", Character.toString(conf.getDelimiter()), Validators.NO_CHECK).charAt(0)); conf.setAnyWords(getString(e, "any-words", Character.toString(conf.getAnyWords()), Validators.NO_CHECK).charAt(0)); conf.setSingleWord(getString(e, "single-word", Character.toString(conf.getSingleWord()), Validators.NO_CHECK).charAt(0)); conf.setRoutingEnabled(getBoolean(e, "enabled", conf.isRoutingEnabled())); conf.setRoutingEnabled(getBoolean(e, "routing-enabled", conf.isRoutingEnabled())); }
public String convert(String filter, WildcardConfiguration to) { return filter.replace(getDelimiter(), to.getDelimiter()) .replace(getSingleWord(), to.getSingleWord()) .replace(getAnyWords(), to.getAnyWords()); }
@Override @Before public void setUp() throws Exception { super.setUp(); WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); wildcardConfiguration.setDelimiter('/'); Configuration configuration = createDefaultInVMConfig().setWildcardRoutingEnabled(true).setTransactionTimeoutScanPeriod(500).setWildCardConfiguration(wildcardConfiguration); server = addServer(ActiveMQServers.newActiveMQServer(configuration, false)); server.start(); server.getManagementService().enableNotifications(false); locator = createInVMNonHALocator(); sf = createSessionFactory(locator); clientSession = addClientSession(sf.createSession(false, true, true)); }
@Test public void testWildCardAddressRemovalDifferentWildcard() throws Exception { final WildcardConfiguration configuration = new WildcardConfiguration(); configuration.setAnyWords('>'); WildcardAddressManager ad = new WildcardAddressManager(new BindingFactoryFake(), configuration, null); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.>"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.test"), RoutingType.MULTICAST)); ad.addBinding(new BindingFake("Topic1.>", "one")); assertEquals(1, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.>")).getBindings().size()); assertEquals(1, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.test")).getBindings().size()); assertEquals(0, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.test")).getBindings().size()); assertEquals(1, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.>")).getBindings().size()); //Remove the address ad.removeAddressInfo(SimpleString.toSimpleString("Topic1.test")); //should still have 1 address and binding assertEquals(1, ad.getAddresses().size()); assertEquals(1, ad.getBindings().size()); ad.removeBinding(SimpleString.toSimpleString("one"), null); ad.removeAddressInfo(SimpleString.toSimpleString("Topic1.>")); assertEquals(0, ad.getAddresses().size()); assertEquals(0, ad.getBindings().size()); }
@Test public void testWildcardConfiguration() throws Exception { FileConfigurationParser parser = new FileConfigurationParser(); String configStr = firstPart + "<wildcard-addresses>\n<routing-enabled>true</routing-enabled>\n<delimiter>/</delimiter>\n<any-words>></any-words></wildcard-addresses>" + lastPart; ByteArrayInputStream input = new ByteArrayInputStream(configStr.getBytes(StandardCharsets.UTF_8)); Configuration config = parser.parseMainConfig(input); WildcardConfiguration wildCard = config.getWildcardConfiguration(); assertEquals('/', wildCard.getDelimiter()); assertTrue(wildCard.isRoutingEnabled()); assertEquals('>', wildCard.getAnyWords()); assertEquals('*', wildCard.getSingleWord()); }
@Test public void testWildcardConversion() throws Exception { String amqTarget = "TEST.ONE.>"; String coreTarget = OpenWireUtil.OPENWIRE_WILDCARD.convert(amqTarget, new WildcardConfiguration()); assertEquals("TEST.ONE.#", coreTarget); amqTarget = "TEST.*.ONE"; coreTarget = OpenWireUtil.OPENWIRE_WILDCARD.convert(amqTarget, new WildcardConfiguration()); assertEquals("TEST.*.ONE", coreTarget); amqTarget = "a.*.>.>"; coreTarget = OpenWireUtil.OPENWIRE_WILDCARD.convert(amqTarget, new WildcardConfiguration()); assertEquals("a.*.#.#", coreTarget); } }
@Override @Deprecated public ConfigurationImpl setWildcardRoutingEnabled(final boolean enabled) { ActiveMQServerLogger.LOGGER.deprecatedWildcardRoutingEnabled(); wildcardConfiguration.setRoutingEnabled(enabled); return this; }
public SimpleAddressManager(final BindingsFactory bindingsFactory, final StorageManager storageManager) { this(bindingsFactory, new WildcardConfiguration(), storageManager); }
return true; final char sepAnyWords = wildcardConfiguration.getAnyWords(); final char sepSingleWord = wildcardConfiguration.getSingleWord();
@Test public void testDurableUnSubscribeWithoutDurableSubName() throws Exception { server.getConfiguration().getWildcardConfiguration().setDelimiter('/'); server.getAddressSettingsRepository().addMatch("/topic/#", new AddressSettings().setDefaultAddressRoutingType(RoutingType.MULTICAST).setDefaultQueueRoutingType(RoutingType.MULTICAST)); conn.connect(defUser, defPass, "myclientid"); String subId = UUID.randomUUID().toString(); String durableSubName = UUID.randomUUID().toString(); String receipt = UUID.randomUUID().toString(); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SUBSCRIBE) .addHeader(Stomp.Headers.Subscribe.DESTINATION, "/topic/test.foo") .addHeader(Stomp.Headers.Unsubscribe.ID, subId) .addHeader(Stomp.Headers.Subscribe.ACK_MODE, Stomp.Headers.Subscribe.AckModeValues.CLIENT_INDIVIDUAL) .addHeader(Stomp.Headers.Subscribe.DURABLE_SUBSCRIPTION_NAME, durableSubName) .addHeader(Stomp.Headers.RECEIPT_REQUESTED, receipt); frame = conn.sendFrame(frame); assertEquals(receipt, frame.getHeader(Stomp.Headers.Response.RECEIPT_ID)); assertTrue(Wait.waitFor(() -> server.locateQueue(SimpleString.toSimpleString("myclientid." + durableSubName)) != null, 2000, 100)); receipt = UUID.randomUUID().toString(); frame = conn.createFrame(Stomp.Commands.UNSUBSCRIBE) .addHeader(Stomp.Headers.Unsubscribe.ID, subId) .addHeader(Stomp.Headers.RECEIPT_REQUESTED, receipt); frame = conn.sendFrame(frame); assertEquals(receipt, frame.getHeader(Stomp.Headers.Response.RECEIPT_ID)); conn.disconnect(); // make sure the durable subscription queue is still there assertTrue(Wait.waitFor(() -> server.locateQueue(SimpleString.toSimpleString("myclientid." + durableSubName)) != null, 2000, 100)); }
@Override @Deprecated public boolean isWildcardRoutingEnabled() { return wildcardConfiguration.isRoutingEnabled(); }
@Test public void testMatchingDocsCustomUnderscorDelimiter() throws Throwable { WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); wildcardConfiguration.setDelimiter('_'); HierarchicalObjectRepository<String> repo = new HierarchicalObjectRepository<>(wildcardConfiguration); repo.addMatch("a_b_#", "ab#"); repo.addMatch("a_b_d_#", "abd#"); repo.addMatch("#", "root"); Assert.assertEquals("ab#", repo.getMatch("a_b")); Assert.assertEquals("ab#", repo.getMatch("a_b_c")); Assert.assertEquals("abd#", repo.getMatch("a_b_d_lll")); Assert.assertEquals("root", repo.getMatch("z_z_z_z_z")); Assert.assertEquals("root", repo.getMatch("a_babc")); Assert.assertEquals("ab#", repo.getMatch("a_b_dabc")); Assert.assertEquals("abd#", repo.getMatch("a_b_d")); }
@Test public void testWildCardAddressDirectBindings() throws Exception { final WildcardConfiguration configuration = new WildcardConfiguration(); configuration.setAnyWords('>'); WildcardAddressManager ad = new WildcardAddressManager(new BindingFactoryFake(), configuration, null); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.>"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.test"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.test.test1"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic1.test.test2"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic2.>"), RoutingType.MULTICAST)); ad.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("Topic2.test"), RoutingType.MULTICAST)); ad.addBinding(new BindingFake("Topic1.>", "one")); ad.addBinding(new BindingFake("Topic1.test", "two")); ad.addBinding(new BindingFake("Topic2.test", "three")); assertEquals(1, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.>")).getBindings().size()); assertEquals(2, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.test")).getBindings().size()); assertEquals(1, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.test.test1")).getBindings().size()); assertEquals(1, ad.getBindingsForRoutingAddress(SimpleString.toSimpleString("Topic1.test.test2")).getBindings().size()); assertEquals(1, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.>")).getBindings().size()); assertEquals(1, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.test")).getBindings().size()); assertEquals(0, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.test1")).getBindings().size()); assertEquals(0, ad.getDirectBindings(SimpleString.toSimpleString("Topic1.test2")).getBindings().size()); assertEquals(0, ad.getDirectBindings(SimpleString.toSimpleString("Topic2.>")).getBindings().size()); assertEquals(1, ad.getDirectBindings(SimpleString.toSimpleString("Topic2.test")).getBindings().size()); }
public AddressImpl(final SimpleString address, final WildcardConfiguration wildcardConfiguration) { this.address = address; this.wildcardConfiguration = wildcardConfiguration; addressParts = address.split(wildcardConfiguration.getDelimiter()); containsWildCard = address.contains(wildcardConfiguration.getSingleWord()) || address.contains(wildcardConfiguration.getAnyWords()); }
configuration.setTransactionTimeout(TRANSACTION_TIMEOUT.resolveModelAttribute(context, model).asLong()); configuration.setTransactionTimeoutScanPeriod(TRANSACTION_TIMEOUT_SCAN_PERIOD.resolveModelAttribute(context, model).asLong()); configuration.getWildcardConfiguration().setRoutingEnabled(WILD_CARD_ROUTING_ENABLED.resolveModelAttribute(context, model).asBoolean());
public PostOfficeImpl(final ActiveMQServer server, final StorageManager storageManager, final PagingManager pagingManager, final QueueFactory bindableFactory, final ManagementService managementService, final long expiryReaperPeriod, final long addressQueueReaperPeriod, final WildcardConfiguration wildcardConfiguration, final int idCacheSize, final boolean persistIDCache, final HierarchicalRepository<AddressSettings> addressSettingsRepository) { this.storageManager = storageManager; queueFactory = bindableFactory; this.managementService = managementService; this.pagingManager = pagingManager; this.expiryReaperPeriod = expiryReaperPeriod; this.addressQueueReaperPeriod = addressQueueReaperPeriod; if (wildcardConfiguration.isRoutingEnabled()) { addressManager = new WildcardAddressManager(this, wildcardConfiguration, storageManager); } else { addressManager = new SimpleAddressManager(this, wildcardConfiguration, storageManager); } this.idCacheSize = idCacheSize; this.persistIDCache = persistIDCache; this.addressSettingsRepository = addressSettingsRepository; this.server = server; }
private void addWildCardConfiguration(Configuration configuration) { WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); wildcardConfiguration.setAnyWords('#'); wildcardConfiguration.setDelimiter('/'); wildcardConfiguration.setRoutingEnabled(true); wildcardConfiguration.setSingleWord('+'); configuration.setWildCardConfiguration(wildcardConfiguration); }
@Test public void testMatchingDocsCustomForwardSlashDelimiter() throws Throwable { WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); wildcardConfiguration.setDelimiter('/'); HierarchicalObjectRepository<String> repo = new HierarchicalObjectRepository<>(wildcardConfiguration); repo.addMatch("a/b/#", "ab#"); repo.addMatch("a/b/d/#", "abd#"); repo.addMatch("#", "root"); Assert.assertEquals("ab#", repo.getMatch("a/b")); Assert.assertEquals("ab#", repo.getMatch("a/b/c")); Assert.assertEquals("abd#", repo.getMatch("a/b/d/lll")); Assert.assertEquals("root", repo.getMatch("z/z/z/z/z")); Assert.assertEquals("root", repo.getMatch("a/babc")); Assert.assertEquals("ab#", repo.getMatch("a/b/dabc")); Assert.assertEquals("abd#", repo.getMatch("a/b/d")); }