static void createDivert(String name, DivertConfiguration divertConfiguration, ActiveMQServerControl serverControl) { try { String transformerClassName = divertConfiguration.getTransformerConfiguration() != null ? divertConfiguration.getTransformerConfiguration().getClassName() : null; serverControl.createDivert(name, divertConfiguration.getRoutingName(), divertConfiguration.getAddress(), divertConfiguration.getForwardingAddress(), divertConfiguration.isExclusive(), divertConfiguration.getFilterString(), transformerClassName); } catch (RuntimeException e) { throw e; } catch (Exception e) { // TODO should this be an OFE instead? throw new RuntimeException(e); } } }
@Override public void createDivert(final String name, final String routingName, final String address, final String forwardingAddress, final boolean exclusive, final String filterString, final String transformerClassName, final Map<String, String> transformerProperties, final String routingType) throws Exception { checkStarted(); clearIO(); try { TransformerConfiguration transformerConfiguration = transformerClassName == null ? null : new TransformerConfiguration(transformerClassName).setProperties(transformerProperties); DivertConfiguration config = new DivertConfiguration().setName(name).setRoutingName(routingName).setAddress(address).setForwardingAddress(forwardingAddress).setExclusive(exclusive).setFilterString(filterString).setTransformerConfiguration(transformerConfiguration).setRoutingType(ComponentConfigurationRoutingType.valueOf(routingType)); server.deployDivert(config); } finally { blockOnIO(); } }
@Override public synchronized void registerDivert(final Divert divert, final DivertConfiguration config) throws Exception { ObjectName objectName = objectNameBuilder.getDivertObjectName(divert.getUniqueName().toString(), config.getAddress()); DivertControl divertControl = new DivertControlImpl(divert, storageManager, config); registerInJMX(objectName, divertControl); registerInRegistry(ResourceNames.DIVERT + config.getName(), divertControl); if (logger.isDebugEnabled()) { logger.debug("registered divert " + objectName); } }
@Test public void testShowAddressBindings() throws Exception { // Create bindings SimpleString address = new SimpleString("address"); server.addAddressInfo(new AddressInfo(address, RoutingType.MULTICAST)); server.createQueue(address, RoutingType.MULTICAST, new SimpleString("queue1"), null, true, false); server.createQueue(address, RoutingType.MULTICAST, new SimpleString("queue2"), null, true, false); server.createQueue(address, RoutingType.MULTICAST, new SimpleString("queue3"), null, true, false); DivertConfiguration divertConfiguration = new DivertConfiguration(); divertConfiguration.setName(address.toString()); divertConfiguration.setAddress(address.toString()); server.deployDivert(divertConfiguration); ShowAddress showAddress = new ShowAddress(); showAddress.setName(address.toString()); showAddress.setBindings(true); showAddress.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error))); System.out.println(output.toString()); }
@Override public String getTransformerClassName() { clearIO(); try { return configuration.getTransformerConfiguration() == null ? null : configuration.getTransformerConfiguration().getClassName(); } finally { blockOnIO(); } }
@Override public String getFilter() { clearIO(); try { return configuration.getFilterString(); } finally { blockOnIO(); } }
@Override public String getForwardingAddress() { clearIO(); try { return configuration.getForwardingAddress(); } finally { blockOnIO(); } }
@Override public String getAddress() { clearIO(); try { return configuration.getAddress(); } finally { blockOnIO(); } }
@Override public Map<String, String> getTransformerProperties() { clearIO(); try { return configuration.getTransformerConfiguration() == null ? null : configuration.getTransformerConfiguration().getProperties(); } finally { blockOnIO(); } }
private void addDivert(Configuration serverConfig, String source, String target, boolean exclusive) { List<DivertConfiguration> divertConfigs = serverConfig.getDivertConfigurations(); DivertConfiguration newDivert = new DivertConfiguration(); newDivert.setName("myDivert"); newDivert.setAddress(source); newDivert.setForwardingAddress(target); newDivert.setExclusive(exclusive); divertConfigs.add(newDivert); }
static void createDivert(String name, DivertConfiguration divertConfiguration, ActiveMQServerControl serverControl) { try { String transformerClassName = divertConfiguration.getTransformerConfiguration() != null ? divertConfiguration.getTransformerConfiguration().getClassName() : null; serverControl.createDivert(name, divertConfiguration.getRoutingName(), divertConfiguration.getAddress(), divertConfiguration.getForwardingAddress(), divertConfiguration.isExclusive(), divertConfiguration.getFilterString(), transformerClassName); } catch (RuntimeException e) { throw e; } catch (Exception e) { // TODO should this be an OFE instead? throw new RuntimeException(e); } } }
@Override protected Configuration createDefaultConfig(final boolean netty) throws Exception { DivertConfiguration divert = new DivertConfiguration().setName("local-divert").setRoutingName("some-name").setAddress("Source").setForwardingAddress("Dest").setExclusive(true); Configuration config = super.createDefaultConfig(netty).addDivertConfiguration(divert); return config; }
@Override public void deployDivert(DivertConfiguration config) throws Exception { if (config.getName() == null) { throw ActiveMQMessageBundle.BUNDLE.divertWithNoName(); } if (config.getAddress() == null) { ActiveMQServerLogger.LOGGER.divertWithNoAddress(); return; } if (config.getForwardingAddress() == null) { ActiveMQServerLogger.LOGGER.divertWithNoForwardingAddress(); return; } SimpleString sName = new SimpleString(config.getName()); if (postOffice.getBinding(sName) != null) { ActiveMQServerLogger.LOGGER.divertBindingAlreadyExists(sName); return; } SimpleString sAddress = new SimpleString(config.getAddress()); Transformer transformer = getServiceRegistry().getDivertTransformer(config.getName(), config.getTransformerConfiguration()); Filter filter = FilterImpl.createFilter(config.getFilterString()); Divert divert = new DivertImpl(new SimpleString(config.getForwardingAddress()), sName, new SimpleString(config.getRoutingName()), config.isExclusive(), filter, transformer, postOffice, storageManager, config.getRoutingType()); Binding binding = new DivertBinding(storageManager.generateID(), sAddress, divert); postOffice.addBinding(binding); managementService.registerDivert(divert, config); }
@Override protected void extraServerConfig(Configuration serverConfig) { DivertConfiguration divertConf = new DivertConfiguration().setName("divert1").setRoutingName("divert1").setAddress(testAddress).setForwardingAddress(forwardAddress).setExclusive(isExclusive()); serverConfig.addDivertConfiguration(divertConf); } }
@Test public void testAttributes() throws Exception { checkResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(divertConfig.getName(), divertConfig.getAddress())); DivertControl divertControl = createDivertManagementControl(divertConfig.getName(), divertConfig.getAddress()); Assert.assertEquals(divertConfig.getFilterString(), divertControl.getFilter()); Assert.assertEquals(divertConfig.isExclusive(), divertControl.isExclusive()); Assert.assertEquals(divertConfig.getName(), divertControl.getUniqueName()); Assert.assertEquals(divertConfig.getRoutingName(), divertControl.getRoutingName()); Assert.assertEquals(divertConfig.getAddress(), divertControl.getAddress()); Assert.assertEquals(divertConfig.getForwardingAddress(), divertControl.getForwardingAddress()); Assert.assertEquals(divertConfig.getTransformerConfiguration().getClassName(), divertControl.getTransformerClassName()); Assert.assertEquals(divertConfig.getTransformerConfiguration().getProperties(), divertControl.getTransformerProperties()); }
static DivertConfiguration createDivertConfiguration(final OperationContext context, String name, ModelNode model) throws OperationFailedException { final ModelNode routingNode = DivertDefinition.ROUTING_NAME.resolveModelAttribute(context, model); final String routingName = routingNode.isDefined() ? routingNode.asString() : null; final String address = DivertDefinition.ADDRESS.resolveModelAttribute(context, model).asString(); final String forwardingAddress = DivertDefinition.FORWARDING_ADDRESS.resolveModelAttribute(context, model).asString(); final boolean exclusive = DivertDefinition.EXCLUSIVE.resolveModelAttribute(context, model).asBoolean(); final ModelNode filterNode = CommonAttributes.FILTER.resolveModelAttribute(context, model); final String filter = filterNode.isDefined() ? filterNode.asString() : null; DivertConfiguration config = new DivertConfiguration() .setName(name) .setRoutingName(routingName) .setAddress(address) .setForwardingAddress(forwardingAddress) .setExclusive(exclusive) .setFilterString(filter); final ModelNode transformerClassName = CommonAttributes.TRANSFORMER_CLASS_NAME.resolveModelAttribute(context, model); if (transformerClassName.isDefined()) { config.setTransformerConfiguration(new TransformerConfiguration(transformerClassName.asString())); } return config; }
if (dic.getName().equals("divert1")) { Assert.assertEquals("divert1", dic.getName()); Assert.assertEquals("routing-name1", dic.getRoutingName()); Assert.assertEquals("address1", dic.getAddress()); Assert.assertEquals("forwarding-address1", dic.getForwardingAddress()); Assert.assertEquals("speed > 88", dic.getFilterString()); Assert.assertEquals("org.foo.Transformer", dic.getTransformerConfiguration().getClassName()); Assert.assertEquals(true, dic.isExclusive()); } else if (dic.getName().equals("divert2")) { Assert.assertEquals("divert2", dic.getName()); Assert.assertEquals("routing-name2", dic.getRoutingName()); Assert.assertEquals("address2", dic.getAddress()); Assert.assertEquals("forwarding-address2", dic.getForwardingAddress()); Assert.assertEquals("speed < 88", dic.getFilterString()); Assert.assertEquals("org.foo.Transformer2", dic.getTransformerConfiguration().getClassName()); Assert.assertEquals(false, dic.isExclusive()); } else { Assert.assertEquals("divert3", dic.getName()); Assert.assertEquals("org.foo.DivertTransformer3", dic.getTransformerConfiguration().getClassName()); Assert.assertEquals("divertTransformerValue1", dic.getTransformerConfiguration().getProperties().get("divertTransformerKey1")); Assert.assertEquals("divertTransformerValue2", dic.getTransformerConfiguration().getProperties().get("divertTransformerKey2"));
private void parseDivertConfiguration(final Element e, final Configuration mainConfig) { String name = e.getAttribute("name"); String routingName = getString(e, "routing-name", null, Validators.NO_CHECK); String address = getString(e, "address", null, Validators.NOT_NULL_OR_EMPTY); String forwardingAddress = getString(e, "forwarding-address", null, Validators.NOT_NULL_OR_EMPTY); boolean exclusive = getBoolean(e, "exclusive", ActiveMQDefaultConfiguration.isDefaultDivertExclusive()); String transformerClassName = getString(e, "transformer-class-name", null, Validators.NO_CHECK); ComponentConfigurationRoutingType routingType = ComponentConfigurationRoutingType.valueOf(getString(e, "routing-type", ActiveMQDefaultConfiguration.getDefaultDivertRoutingType(), Validators.COMPONENT_ROUTING_TYPE)); TransformerConfiguration transformerConfiguration = null; String filterString = null; NodeList children = e.getChildNodes(); for (int j = 0; j < children.getLength(); j++) { Node child = children.item(j); if (child.getNodeName().equals("filter")) { filterString = getAttributeValue(child, "string"); } else if (child.getNodeName().equals("transformer")) { transformerConfiguration = getTransformerConfiguration(child); } } if (transformerConfiguration == null && transformerClassName != null) { transformerConfiguration = getTransformerConfiguration(transformerClassName); } DivertConfiguration config = new DivertConfiguration().setName(name).setRoutingName(routingName).setAddress(address).setForwardingAddress(forwardingAddress).setExclusive(exclusive).setFilterString(filterString).setTransformerConfiguration(transformerConfiguration).setRoutingType(routingType); mainConfig.getDivertConfigurations().add(config); }
static DivertConfiguration createDivertConfiguration(final OperationContext context, String name, ModelNode model) throws OperationFailedException { final ModelNode routingNode = DivertDefinition.ROUTING_NAME.resolveModelAttribute(context, model); final String routingName = routingNode.isDefined() ? routingNode.asString() : null; final String address = DivertDefinition.ADDRESS.resolveModelAttribute(context, model).asString(); final String forwardingAddress = DivertDefinition.FORWARDING_ADDRESS.resolveModelAttribute(context, model).asString(); final boolean exclusive = DivertDefinition.EXCLUSIVE.resolveModelAttribute(context, model).asBoolean(); final ModelNode filterNode = CommonAttributes.FILTER.resolveModelAttribute(context, model); final String filter = filterNode.isDefined() ? filterNode.asString() : null; DivertConfiguration config = new DivertConfiguration() .setName(name) .setRoutingName(routingName) .setAddress(address) .setForwardingAddress(forwardingAddress) .setExclusive(exclusive) .setFilterString(filter); final ModelNode transformerClassName = CommonAttributes.TRANSFORMER_CLASS_NAME.resolveModelAttribute(context, model); if (transformerClassName.isDefined()) { config.setTransformerConfiguration(new TransformerConfiguration(transformerClassName.asString())); } return config; }
@Test public void divertTopicToQueueWithSelectorTest() throws Exception { final String address1 = "bss.order.workorderchanges.v1.topic"; final String address2 = "bss.order.Consumer.cbma.workorderchanges.v1.queue"; final String address3 = "bss.order.Consumer.pinpoint.workorderchanges.v1.queue"; DivertConfiguration dc1 = new DivertConfiguration().setName("WorkOrderChangesCBMA-Divert").setRoutingName("WorkOrderChangesCBMA-Divert").setAddress(address1).setForwardingAddress(address2).setExclusive(false).setRoutingType(ComponentConfigurationRoutingType.ANYCAST); DivertConfiguration dc2 = new DivertConfiguration().setName("WorkOrderChangesPinpoint-Divert").setRoutingName("WorkOrderChangesPinpoint-Divert").setAddress(address1).setForwardingAddress(address3).setExclusive(false).setRoutingType(ComponentConfigurationRoutingType.ANYCAST); server.deployDivert(dc1); server.deployDivert(dc2); JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerQpidJMSConnectionURI()); Connection connection = factory.createConnection(null, null); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); javax.jms.Topic topicSource = session.createTopic(address1); javax.jms.Queue queueTarget = session.createQueue(address2); javax.jms.Queue queueTarget2 = session.createQueue(address3); final MessageProducer producer = session.createProducer(topicSource); final TextMessage message = session.createTextMessage("Hello"); message.setStringProperty("filename", "BILHANDLE"); connection.start(); String selector = "filename='BILHANDLE'"; final MessageConsumer consumer = session.createConsumer(queueTarget, selector); final MessageConsumer consumer2 = session.createConsumer(queueTarget2, selector); producer.send(message); TextMessage receivedMessage = (TextMessage) consumer.receive(1000); TextMessage receivedMessage2 = (TextMessage) consumer2.receive(1000); Assert.assertNotNull(receivedMessage); Assert.assertNotNull(receivedMessage2); connection.close(); }