public boolean validateConfiguration() { if (getName() == null) { ActiveMQServerLogger.LOGGER.clusterConnectionNotUnique(); return false; } return true; }
public static ClusterConnectionConfiguration getReplicationClusterConfiguration(Configuration conf, String replicationCluster) throws ActiveMQIllegalStateException { if (replicationCluster == null || replicationCluster.isEmpty()) return conf.getClusterConfigurations().get(0); for (ClusterConnectionConfiguration clusterConf : conf.getClusterConfigurations()) { if (replicationCluster.equals(clusterConf.getName())) return clusterConf; } throw new ActiveMQIllegalStateException("Missing cluster-configuration for replication-clustername '" + replicationCluster + "'."); }
@Override public synchronized void registerCluster(final ClusterConnection cluster, final ClusterConnectionConfiguration configuration) throws Exception { ObjectName objectName = objectNameBuilder.getClusterConnectionObjectName(configuration.getName()); ClusterConnectionControl control = new ClusterConnectionControlImpl(cluster, storageManager, configuration); registerInJMX(objectName, control); registerInRegistry(ResourceNames.CORE_CLUSTER_CONNECTION + configuration.getName(), control); }
@Override public String getName() { clearIO(); try { return configuration.getName(); } finally { blockOnIO(); } }
private void deployBackupConnector(final ClusterConnectionConfiguration config) throws Exception { if (!config.validateConfiguration()) { return; } TransportConfiguration connector = config.getTransportConfiguration(configuration); if (connector == null) return; if (config.getDiscoveryGroupName() != null) { DiscoveryGroupConfiguration dg = config.getDiscoveryGroupConfiguration(configuration); if (dg == null) return; DiscoveryBackupConnector backupConnector = new DiscoveryBackupConnector(dg, config.getName(), connector, config.getRetryInterval(), clusterManager); backupConnectors.add(backupConnector); } else { TransportConfiguration[] tcConfigs = config.getTransportConfigurations(configuration); StaticBackupConnector backupConnector = new StaticBackupConnector(tcConfigs, config.getName(), connector, config.getRetryInterval(), clusterManager); backupConnectors.add(backupConnector); } }
@Test public void testNodes() throws Exception { ClusterConnectionControl clusterConnectionControl_0 = createManagementControl(clusterConnectionConfig_0.getName()); Assert.assertTrue(clusterConnectionControl_0.isStarted()); Map<String, String> nodes = clusterConnectionControl_0.getNodes(); Assert.assertEquals(0, nodes.size()); server1.start(); waitForServerToStart(server1); long start = System.currentTimeMillis(); while (true) { nodes = clusterConnectionControl_0.getNodes(); if (nodes.size() == 1 || System.currentTimeMillis() - start > 30000) { break; } Thread.sleep(50); } Assert.assertEquals(1, nodes.size()); String remoteAddress = nodes.values().iterator().next(); Assert.assertTrue(remoteAddress.endsWith(":" + port_1)); }
private static void compareTTLWithCheckPeriod(Configuration configuration) { for (ClusterConnectionConfiguration c : configuration.getClusterConfigurations()) compareTTLWithCheckPeriod(c.getName(), c.getConnectionTTL(), configuration.getConnectionTTLOverride(), c.getClientFailureCheckPeriod()); for (BridgeConfiguration c : configuration.getBridgeConfigurations()) compareTTLWithCheckPeriod(c.getName(), c.getConnectionTTL(), configuration.getConnectionTTLOverride(), c.getClientFailureCheckPeriod()); }
@Test public void testStartStop() throws Exception { checkResource(ObjectNameBuilder.DEFAULT.getClusterConnectionObjectName(clusterConnectionConfig1.getName())); ClusterConnectionControl clusterConnectionControl = createManagementControl(clusterConnectionConfig1.getName()); // started by the server Assert.assertTrue(clusterConnectionControl.isStarted()); clusterConnectionControl.stop(); Assert.assertFalse(clusterConnectionControl.isStarted()); clusterConnectionControl.start(); Assert.assertTrue(clusterConnectionControl.isStarted()); }
if (clusterConnections.containsKey(config.getName())) { ActiveMQServerLogger.LOGGER.clusterConnectionAlreadyExists(config.getConnectorName()); return; clusterConnection = new ClusterConnectionImpl(this, dg, connector, new SimpleString(config.getName()), new SimpleString(config.getAddress() != null ? config.getAddress() : ""), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailoverTimeout(), config.isDuplicateDetection(), config.getMessageLoadBalancingType(), config.getConfirmationWindowSize(), config.getProducerWindowSize(), executorFactory, server, postOffice, managementService, scheduledExecutor, config.getMaxHops(), nodeManager, server.getConfiguration().getClusterUser(), server.getConfiguration().getClusterPassword(), config.isAllowDirectConnectionsOnly(), config.getClusterNotificationInterval(), config.getClusterNotificationAttempts()); clusterConnection = new ClusterConnectionImpl(this, tcConfigs, connector, new SimpleString(config.getName()), new SimpleString(config.getAddress()), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailoverTimeout(), config.isDuplicateDetection(), config.getMessageLoadBalancingType(), config.getConfirmationWindowSize(), config.getProducerWindowSize(), executorFactory, server, postOffice, managementService, scheduledExecutor, config.getMaxHops(), nodeManager, server.getConfiguration().getClusterUser(), server.getConfiguration().getClusterPassword(), config.isAllowDirectConnectionsOnly(), config.getClusterNotificationInterval(), config.getClusterNotificationAttempts()); clusterConnections.put(config.getName(), clusterConnection);
@Test public void testNotifications() throws Exception { SimpleNotificationService.Listener notifListener = new SimpleNotificationService.Listener(); checkResource(ObjectNameBuilder.DEFAULT.getClusterConnectionObjectName(clusterConnectionConfig1.getName())); ClusterConnectionControl clusterConnectionControl = createManagementControl(clusterConnectionConfig1.getName()); server_0.getManagementService().addNotificationListener(notifListener); Assert.assertEquals(0, notifListener.getNotifications().size()); clusterConnectionControl.stop(); Assert.assertTrue(notifListener.getNotifications().size() > 0); Notification notif = getFirstNotificationOfType(notifListener.getNotifications(), CoreNotificationType.CLUSTER_CONNECTION_STOPPED); Assert.assertNotNull(notif); Assert.assertEquals(clusterConnectionControl.getName(), notif.getProperties().getSimpleStringProperty(new SimpleString("name")).toString()); clusterConnectionControl.start(); Assert.assertTrue(notifListener.getNotifications().size() > 0); notif = getFirstNotificationOfType(notifListener.getNotifications(), CoreNotificationType.CLUSTER_CONNECTION_STARTED); Assert.assertNotNull(notif); Assert.assertEquals(clusterConnectionControl.getName(), notif.getProperties().getSimpleStringProperty(new SimpleString("name")).toString()); }
@Test public void testAttributes2() throws Exception { checkResource(ObjectNameBuilder.DEFAULT.getClusterConnectionObjectName(clusterConnectionConfig2.getName())); ClusterConnectionControl clusterConnectionControl = createManagementControl(clusterConnectionConfig2.getName()); Assert.assertEquals(clusterConnectionConfig2.getName(), clusterConnectionControl.getName()); Assert.assertEquals(clusterConnectionConfig2.getAddress(), clusterConnectionControl.getAddress()); Assert.assertEquals(clusterConnectionConfig2.getDiscoveryGroupName(), clusterConnectionControl.getDiscoveryGroupName()); Assert.assertEquals(clusterConnectionConfig2.getRetryInterval(), clusterConnectionControl.getRetryInterval()); Assert.assertEquals(clusterConnectionConfig2.isDuplicateDetection(), clusterConnectionControl.isDuplicateDetection()); Assert.assertEquals(clusterConnectionConfig2.getMessageLoadBalancingType().getType(), clusterConnectionControl.getMessageLoadBalancingType()); Assert.assertEquals(clusterConnectionConfig2.getMaxHops(), clusterConnectionControl.getMaxHops()); Object[] connectorPairs = clusterConnectionControl.getStaticConnectors(); Assert.assertEquals(0, connectorPairs.length); String jsonPairs = clusterConnectionControl.getStaticConnectorsAsJSON(); Assert.assertEquals("[]", jsonPairs); Assert.assertEquals(clusterConnectionConfig2.getDiscoveryGroupName(), clusterConnectionControl.getDiscoveryGroupName()); }
@Test public void testAttributes1() throws Exception { checkResource(ObjectNameBuilder.DEFAULT.getClusterConnectionObjectName(clusterConnectionConfig1.getName())); ClusterConnectionControl clusterConnectionControl = createManagementControl(clusterConnectionConfig1.getName()); Assert.assertEquals(clusterConnectionConfig1.getName(), clusterConnectionControl.getName()); Assert.assertEquals(clusterConnectionConfig1.getAddress(), clusterConnectionControl.getAddress()); Assert.assertEquals(clusterConnectionConfig1.getDiscoveryGroupName(), clusterConnectionControl.getDiscoveryGroupName()); Assert.assertEquals(clusterConnectionConfig1.getRetryInterval(), clusterConnectionControl.getRetryInterval()); Assert.assertEquals(clusterConnectionConfig1.isDuplicateDetection(), clusterConnectionControl.isDuplicateDetection()); Assert.assertEquals(clusterConnectionConfig1.getMessageLoadBalancingType().getType(), clusterConnectionControl.getMessageLoadBalancingType()); Assert.assertEquals(clusterConnectionConfig1.getMaxHops(), clusterConnectionControl.getMaxHops()); Assert.assertEquals(0L, clusterConnectionControl.getMessagesPendingAcknowledgement()); Assert.assertEquals(0L, clusterConnectionControl.getMessagesAcknowledged()); Map<String, Object> clusterMetrics = clusterConnectionControl.getMetrics(); Assert.assertEquals(0L, clusterMetrics.get(ClusterConnectionMetrics.MESSAGES_PENDING_ACKNOWLEDGEMENT_KEY)); Assert.assertEquals(0L, clusterMetrics.get(ClusterConnectionMetrics.MESSAGES_ACKNOWLEDGED_KEY)); Assert.assertNull(clusterConnectionControl.getBridgeMetrics("bad")); Object[] connectors = clusterConnectionControl.getStaticConnectors(); Assert.assertEquals(1, connectors.length); String connector = (String) connectors[0]; Assert.assertEquals(clusterConnectionConfig1.getStaticConnectors().get(0), connector); String jsonString = clusterConnectionControl.getStaticConnectorsAsJSON(); Assert.assertNotNull(jsonString); JsonArray array = JsonUtil.readJsonArray(jsonString); Assert.assertEquals(1, array.size()); Assert.assertEquals(clusterConnectionConfig1.getStaticConnectors().get(0), array.getString(0)); Assert.assertNull(clusterConnectionControl.getDiscoveryGroupName()); Assert.assertTrue(clusterConnectionControl.isStarted()); }
ClusterManager clusterManager = serverNode.getClusterManager(); ClusterController clusterController = clusterManager.getClusterController(); ServerLocator serverNodeLocator = clusterController.getServerLocator(new SimpleString(clusterConnectionConfigurationBeforeStart.getName())); List<ClusterConnectionConfiguration> serverNodeClusterConnectionConfigurations = serverNodeConfiguration.getClusterConfigurations();
if (ccc.getName().equals("cluster-connection1")) { Assert.assertEquals("cluster-connection1", ccc.getName()); Assert.assertEquals("clusterConnectionConf minLargeMessageSize", 321, ccc.getMinLargeMessageSize()); assertEquals("check-period", 331, ccc.getClientFailureCheckPeriod()); Assert.assertEquals(222, ccc.getProducerWindowSize()); } else { Assert.assertEquals("cluster-connection2", ccc.getName()); Assert.assertEquals("queues2", ccc.getAddress()); Assert.assertEquals(4, ccc.getRetryInterval());