/** * Takes in a string of an address filter or comma separated list and generates an appropriate JMS selector for * filtering queues. * * @param address */ public static String createSelectorFromAddress(String address) { StringBuilder stringBuilder = new StringBuilder(); // Support standard address (not a list) case. if (!address.contains(",")) { if (address.startsWith("!")) { stringBuilder.append(ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address.substring(1, address.length()) + "%'"); } else { stringBuilder.append(ManagementHelper.HDR_ADDRESS + " LIKE '" + address + "%'"); } return stringBuilder.toString(); } // For comma separated lists build a JMS selector statement based on the list items return buildSelectorFromArray(address.split(",")); }
@Override protected void fail(final boolean permanently) { logger.debug("Cluster Bridge " + this.getName() + " failed, permanently=" + permanently); super.fail(permanently); if (permanently) { logger.debug("cluster node for bridge " + this.getName() + " is permanently down"); clusterConnection.removeRecord(targetNodeID); } else { clusterConnection.disconnectRecord(targetNodeID); } } }
@Override protected void tryScheduleRetryReconnect(final ActiveMQExceptionType type) { if (type != ActiveMQExceptionType.DISCONNECTED) { scheduleRetryConnect(); } }
@Test public void testCreateSelectorFromListIgnoresEmptyStrings() { String address1 = "jms.test1.address"; String address2 = "jms.test2.address"; String addresses = address1 + ",!" + address2 + ",,,"; StringBuilder expectedSelector = new StringBuilder(); expectedSelector.append("(((" + ManagementHelper.HDR_ADDRESS + " LIKE '" + address1 + "%'))"); expectedSelector.append(" AND "); expectedSelector.append("((" + ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address2 + "%')))"); assertEquals(expectedSelector.toString(), ClusterConnectionBridge.createSelectorFromAddress(addresses)); } }
logger.debug("Closing notification Consumer for reopening " + notifConsumer + " on bridge " + this.getName()); notifConsumer.close(); flowRecord.getMaxHops() + " AND (" + createSelectorFromAddress(appendIgnoresToFilter(flowRecord.getAddress())) + ")");
MessageFlowRecordImpl record = new MessageFlowRecordImpl(targetLocator, eventUID, targetNodeID, connector, queueName, queue); ClusterConnectionBridge bridge = new ClusterConnectionBridge(this, manager, targetLocator, serverLocator, initialConnectAttempts, reconnectAttempts, retryInterval, retryIntervalMultiplier, maxRetryInterval, nodeManager.getUUID(), record.getEventUID(), record.getTargetNodeID(), record.getQueueName(), record.getQueue(), executorFactory.getExecutor(), null, null, scheduledExecutor, null, useDuplicateDetection, clusterUser, clusterPassword, server, managementService.getManagementAddress(), managementService.getManagementNotificationAddress(), record, record.getConnector(), storeAndForwardPrefix); targetLocator.setIdentity("(Cluster-connection-bridge::" + bridge.toString() + "::" + this.toString() + ")"); bridge.start();
@Override protected ClientSessionFactoryInternal createSessionFactory() throws Exception { serverLocator.setProtocolManagerFactory(ActiveMQServerSideProtocolManagerFactory.getInstance(serverLocator)); ClientSessionFactoryInternal factory = (ClientSessionFactoryInternal) serverLocator.createSessionFactory(targetNodeID); //if it is null then its possible the broker was removed after a disconnect so lets try the original connectors if (factory == null) { factory = reconnectOnOriginalNode(); if (factory == null) { return null; } } setSessionFactory(factory); if (factory == null) { return null; } factory.setReconnectAttempts(0); factory.getConnection().addFailureListener(this); return factory; }
@Override protected void afterConnect() throws Exception { super.afterConnect(); setupNotificationConsumer(); }
bridge.getSessionFactory().getConnection().fail(new ActiveMQException("failed once!")); Assert.assertNotNull(bridge.getSessionFactory());
@Test public void testCreateSelectorFromListForExclusions() { String address1 = "jms.test1.address"; String address2 = "jms.test2.address"; String addresses = "!" + address1 + "," + "!" + address2; StringBuilder expectedSelector = new StringBuilder(); expectedSelector.append("("); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address1 + "%')"); expectedSelector.append(" AND "); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address2 + "%')"); expectedSelector.append(")"); assertEquals(expectedSelector.toString(), ClusterConnectionBridge.createSelectorFromAddress(addresses)); }
@Test public void testCreateSelectorFromListForNormalMatches() { String address1 = "jms.test1.address"; String address2 = "jms.test2.address"; String addresses = address1 + "," + address2; StringBuilder expectedSelector = new StringBuilder(); expectedSelector.append("("); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " LIKE '" + address1 + "%')"); expectedSelector.append(" OR "); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " LIKE '" + address2 + "%')"); expectedSelector.append(")"); assertEquals(expectedSelector.toString(), ClusterConnectionBridge.createSelectorFromAddress(addresses)); }
@Test public void testCreateSelectorFromListForExclusionsAndNormalMatches() { String address1 = "jms.test1.address"; String address2 = "jms.test2.address"; String address3 = "jms.test3.address"; String address4 = "jms.test4.address"; String addresses = address1 + ",!" + address2 + "," + address3 + ",!" + address4; StringBuilder expectedSelector = new StringBuilder(); expectedSelector.append("(((" + ManagementHelper.HDR_ADDRESS + " LIKE '" + address1 + "%')"); expectedSelector.append(" OR "); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " LIKE '" + address3 + "%'))"); expectedSelector.append(" AND "); expectedSelector.append("((" + ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address2 + "%')"); expectedSelector.append(" AND "); expectedSelector.append("(" + ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address4 + "%')))"); assertEquals(expectedSelector.toString(), ClusterConnectionBridge.createSelectorFromAddress(addresses)); }
@Test public void testCreateSelectorFromAddressForExclusions() { String address = "jms.my.address"; String expectedSelector = ManagementHelper.HDR_ADDRESS + " NOT LIKE '" + address + "%'"; assertEquals(expectedSelector, ClusterConnectionBridge.createSelectorFromAddress("!" + address)); }
@Test public void testCreateSelectorFromAddressForNormalMatches() { String address = "jms.my.address"; String expectedSelector = ManagementHelper.HDR_ADDRESS + " LIKE '" + address + "%'"; assertEquals(expectedSelector, ClusterConnectionBridge.createSelectorFromAddress(address)); }