This is an automated email from the ASF dual-hosted git repository.
tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 3856ce5ce5 ARTEMIS-5908 Ensure all configuration options checked
3856ce5ce5 is described below
commit 3856ce5ce54458a500d0bbbd19d63417f6ed5818
Author: Timothy Bish <[email protected]>
AuthorDate: Tue Feb 24 13:38:12 2026 -0500
ARTEMIS-5908 Ensure all configuration options checked
Ensure all fields in the policy elements for federation and bridges are
checked so that the configuration update trigger sees them as having
been changed and reloads them as intended.
---
.../AMQPBridgeAddressPolicyElement.java | 6 +-
.../AMQPBridgeQueuePolicyElement.java | 8 +-
.../AMQPFederationAddressPolicyElement.java | 6 +-
.../AMQPFederationQueuePolicyElement.java | 4 +-
.../AMQPBridgeAddressPolicyElementTest.java | 149 +++++++++++++++++++++
.../AMQPBridgeQueuePolicyElementTest.java | 141 +++++++++++++++++++
.../AMQPFederationAddressPolicyElementTest.java | 124 +++++++++++++++++
.../AMQPFederationQueuePolicyElementTest.java | 100 ++++++++++++++
.../connect/AMQPBridgeConfigurationReloadTest.java | 10 +-
.../AMQPFederationConfigurationReloadTest.java | 13 +-
.../tests/integration/jms/RedeployTest.java | 149 +++++++++++++++++++++
11 files changed, 698 insertions(+), 12 deletions(-)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElement.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElement.java
index c4f69cb94d..e06b1567d9 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElement.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElement.java
@@ -220,10 +220,12 @@ public final class AMQPBridgeAddressPolicyElement
implements Serializable {
return Objects.equals(name, other.name) &&
Objects.equals(includes, other.includes) &&
Objects.equals(excludes, other.excludes) &&
+ Objects.equals(properties, other.properties) &&
Objects.equals(priority, other.priority) &&
Objects.equals(includeDivertBindings,
other.includeDivertBindings) &&
Objects.equals(useDurableSubscriptions,
other.useDurableSubscriptions) &&
Objects.equals(filter, other.filter) &&
+ Objects.equals(transformerConfig, other.transformerConfig) &&
Objects.equals(remoteAddress, other.remoteAddress) &&
Objects.equals(remoteAddressPrefix, other.remoteAddressPrefix) &&
Objects.equals(remoteAddressSuffix, other.remoteAddressSuffix) &&
@@ -232,8 +234,8 @@ public final class AMQPBridgeAddressPolicyElement
implements Serializable {
@Override
public int hashCode() {
- return Objects.hash(name, includes, excludes, filter, priority,
remoteAddress, remoteAddressPrefix,
- remoteAddressSuffix, includeDivertBindings,
useDurableSubscriptions,
+ return Objects.hash(name, includes, excludes, properties, filter,
priority, remoteAddress, remoteAddressPrefix,
+ remoteAddressSuffix, includeDivertBindings,
useDurableSubscriptions, transformerConfig,
Arrays.hashCode(remoteTerminusCapabilities));
}
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElement.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElement.java
index 7487f74bb7..b5d5087ed4 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElement.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElement.java
@@ -210,18 +210,22 @@ public final class AMQPBridgeQueuePolicyElement
implements Serializable {
return Objects.equals(name, other.name) &&
Objects.equals(includes, other.includes) &&
Objects.equals(excludes, other.excludes) &&
+ Objects.equals(properties, other.properties) &&
+ Objects.equals(transformerConfig, other.transformerConfig) &&
Objects.equals(priority, other.priority) &&
Objects.equals(priorityAdjustment, other.priorityAdjustment) &&
Objects.equals(filter, other.filter) &&
Objects.equals(remoteAddress, other.remoteAddress) &&
Objects.equals(remoteAddressPrefix, other.remoteAddressPrefix) &&
+ Objects.equals(remoteAddressSuffix, other.remoteAddressSuffix) &&
Arrays.equals(remoteTerminusCapabilities,
other.remoteTerminusCapabilities);
}
@Override
public int hashCode() {
- return Objects.hash(name, includes, excludes, priority,
priorityAdjustment, filter, remoteAddress,
- remoteAddressPrefix,
Arrays.hashCode(remoteTerminusCapabilities));
+ return Objects.hash(name, includes, excludes, properties, priority,
priorityAdjustment, filter, remoteAddress,
+ remoteAddressPrefix, remoteAddressSuffix,
Arrays.hashCode(remoteTerminusCapabilities),
+ transformerConfig);
}
// We are required to implement a named match type so that we can perform
this configuration
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElement.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElement.java
index 5f885fda0c..6ee4351fb7 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElement.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElement.java
@@ -185,15 +185,19 @@ public final class AMQPFederationAddressPolicyElement
implements Serializable {
return Objects.equals(name, other.name) &&
Objects.equals(includes, other.includes) &&
Objects.equals(excludes, other.excludes) &&
+ Objects.equals(properties, other.properties) &&
Objects.equals(autoDelete, other.autoDelete) &&
Objects.equals(autoDeleteDelay, other.autoDeleteDelay) &&
Objects.equals(autoDeleteMessageCount,
other.autoDeleteMessageCount) &&
+ Objects.equals(enableDivertBindings, other.enableDivertBindings)
&&
+ Objects.equals(transformerConfig, other.transformerConfig) &&
maxHops == other.maxHops;
}
@Override
public int hashCode() {
- return Objects.hash(name, includes, excludes, autoDelete,
autoDeleteDelay, autoDeleteMessageCount, maxHops);
+ return Objects.hash(name, includes, excludes, properties, autoDelete,
autoDeleteDelay,
+ autoDeleteMessageCount, maxHops,
enableDivertBindings, transformerConfig);
}
// We are required to implement a named match type so that we can perform
this configuration
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElement.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElement.java
index 37662b8da6..a35f8e8b70 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElement.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElement.java
@@ -156,12 +156,14 @@ public final class AMQPFederationQueuePolicyElement
implements Serializable {
Objects.equals(name, other.name) &&
Objects.equals(includes, other.includes) &&
Objects.equals(excludes, other.excludes) &&
+ Objects.equals(properties, other.properties) &&
+ Objects.equals(transformerConfig, other.transformerConfig) &&
Objects.equals(priorityAdjustment, other.priorityAdjustment);
}
@Override
public int hashCode() {
- return Objects.hash(name, includeFederated, includes, excludes,
priorityAdjustment);
+ return Objects.hash(name, includeFederated, includes, excludes,
properties, priorityAdjustment, transformerConfig);
}
// We are required to implement a named match type so that we can perform
this configuration
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElementTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElementTest.java
new file mode 100644
index 0000000000..3a0376e41b
--- /dev/null
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeAddressPolicyElementTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.config.amqpBrokerConnectivity;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.Map;
+
+import org.apache.activemq.artemis.core.config.TransformerConfiguration;
+import org.junit.Test;
+
+public class AMQPBridgeAddressPolicyElementTest {
+
+ @Test
+ public void testEqualsAndHashCode() {
+ AMQPBridgeAddressPolicyElement config1 = new
AMQPBridgeAddressPolicyElement();
+ AMQPBridgeAddressPolicyElement config2 = new
AMQPBridgeAddressPolicyElement();
+
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Transformer
+ final TransformerConfiguration transformer = new
TransformerConfiguration("foo");
+ config1.setTransformerConfiguration(transformer);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setTransformerConfiguration(transformer);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Properties
+ final Map<String, Object> properties = Map.of("property", "value");
+ config1.setProperties(properties);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setProperties(properties);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Includes
+ config1.addToIncludes("address1");
+ config1.addToIncludes("address2");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToIncludes("address1");
+ config2.addToIncludes("address2");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Excludes
+ config1.addToExcludes("address10");
+ config1.addToExcludes("address20");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToExcludes("address10");
+ config2.addToExcludes("address20");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Name
+ config1.setName("test");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setName("test");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address
+ config1.setRemoteAddress("address");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddress("address");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address Prefix
+ config1.setRemoteAddressPrefix("address-prefix");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddressPrefix("address-prefix");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address Suffix
+ config1.setRemoteAddressSuffix("address-suffix");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddressSuffix("address-suffix");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Terminus Capabilities
+ final String[] capabilities = {"test"};
+ config1.setRemoteTerminusCapabilities(capabilities);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteTerminusCapabilities(capabilities);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Divert Bindings
+ config1.setIncludeDivertBindings(true);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setIncludeDivertBindings(true);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Use durable subscriptions
+ config1.setUseDurableSubscriptions(true);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setUseDurableSubscriptions(true);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Priority
+ config1.setPriority(2);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setPriority(2);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Filter
+ config1.setFilter("color='red'");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setFilter("color='red'");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+ }
+}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElementTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElementTest.java
new file mode 100644
index 0000000000..3e5afae8bf
--- /dev/null
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBridgeQueuePolicyElementTest.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.config.amqpBrokerConnectivity;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.Map;
+
+import org.apache.activemq.artemis.core.config.TransformerConfiguration;
+import org.junit.Test;
+
+public class AMQPBridgeQueuePolicyElementTest {
+
+ @Test
+ public void testEqualsAndHashCode() {
+ AMQPBridgeQueuePolicyElement config1 = new
AMQPBridgeQueuePolicyElement();
+ AMQPBridgeQueuePolicyElement config2 = new
AMQPBridgeQueuePolicyElement();
+
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Transformer
+ final TransformerConfiguration transformer = new
TransformerConfiguration("foo");
+ config1.setTransformerConfiguration(transformer);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setTransformerConfiguration(transformer);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Properties
+ final Map<String, Object> properties = Map.of("property", "value");
+ config1.setProperties(properties);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setProperties(properties);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Includes
+ config1.addToIncludes("address1", "queue1");
+ config1.addToIncludes("address2", "queue2");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToIncludes("address1", "queue1");
+ config2.addToIncludes("address2", "queue2");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Excludes
+ config1.addToExcludes("address10", "queue10");
+ config1.addToExcludes("address20", "queue20");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToExcludes("address10", "queue10");
+ config2.addToExcludes("address20", "queue20");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Name
+ config1.setName("test");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setName("test");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address
+ config1.setRemoteAddress("address");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddress("address");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address Prefix
+ config1.setRemoteAddressPrefix("address-prefix");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddressPrefix("address-prefix");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Address Suffix
+ config1.setRemoteAddressSuffix("address-suffix");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteAddressSuffix("address-suffix");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Remote Terminus Capabilities
+ final String[] capabilities = {"test"};
+ config1.setRemoteTerminusCapabilities(capabilities);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setRemoteTerminusCapabilities(capabilities);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Priority
+ config1.setPriority(2);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setPriority(2);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Priority Adjustment
+ config1.setPriorityAdjustment(-2);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setPriorityAdjustment(-2);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Filter
+ config1.setFilter("color='red'");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setFilter("color='red'");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+ }
+}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElementTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElementTest.java
new file mode 100644
index 0000000000..f8fab0db19
--- /dev/null
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationAddressPolicyElementTest.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.config.amqpBrokerConnectivity;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.Map;
+
+import org.apache.activemq.artemis.core.config.TransformerConfiguration;
+import org.junit.Test;
+
+public class AMQPFederationAddressPolicyElementTest {
+
+ @Test
+ public void testEqualsAndHashCode() {
+ AMQPFederationAddressPolicyElement config1 = new
AMQPFederationAddressPolicyElement();
+ AMQPFederationAddressPolicyElement config2 = new
AMQPFederationAddressPolicyElement();
+
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Transformer
+ final TransformerConfiguration transformer = new
TransformerConfiguration("foo");
+ config1.setTransformerConfiguration(transformer);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setTransformerConfiguration(transformer);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Properties
+ final Map<String, Object> properties = Map.of("property", "value");
+ config1.setProperties(properties);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setProperties(properties);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Includes
+ config1.addToIncludes("address1");
+ config1.addToIncludes("address2");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToIncludes("address1");
+ config2.addToIncludes("address2");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Excludes
+ config1.addToExcludes("address10");
+ config1.addToExcludes("address20");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToExcludes("address10");
+ config2.addToExcludes("address20");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Name
+ config1.setName("test");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setName("test");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Auto Delete
+ config1.setAutoDelete(true);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setAutoDelete(true);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Auto Delete Delay
+ config1.setAutoDeleteDelay(10L);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setAutoDeleteDelay(10L);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Auto Delete Message Count
+ config1.setAutoDeleteMessageCount(20L);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setAutoDeleteMessageCount(20L);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Divert Bindings
+ config1.setEnableDivertBindings(true);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setEnableDivertBindings(true);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Max Hops
+ config1.setMaxHops(10);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setMaxHops(10);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+ }
+}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElementTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElementTest.java
new file mode 100644
index 0000000000..304426eb8d
--- /dev/null
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPFederationQueuePolicyElementTest.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.config.amqpBrokerConnectivity;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.Map;
+
+import org.apache.activemq.artemis.core.config.TransformerConfiguration;
+import org.junit.Test;
+
+public class AMQPFederationQueuePolicyElementTest {
+
+ @Test
+ public void testEqualsAndHashCode() {
+ AMQPFederationQueuePolicyElement config1 = new
AMQPFederationQueuePolicyElement();
+ AMQPFederationQueuePolicyElement config2 = new
AMQPFederationQueuePolicyElement();
+
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Transformer
+ final TransformerConfiguration transformer = new
TransformerConfiguration("foo");
+ config1.setTransformerConfiguration(transformer);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setTransformerConfiguration(transformer);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Properties
+ final Map<String, Object> properties = Map.of("property", "value");
+ config1.setProperties(properties);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setProperties(properties);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Includes
+ config1.addToIncludes("address1", "queue1");
+ config1.addToIncludes("address2", "queue2");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToIncludes("address1", "queue1");
+ config2.addToIncludes("address2", "queue2");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Excludes
+ config1.addToExcludes("address10", "queue10");
+ config1.addToExcludes("address20", "queue20");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.addToExcludes("address10", "queue10");
+ config2.addToExcludes("address20", "queue20");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Name
+ config1.setName("test");
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setName("test");
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Priority Adjustment
+ config1.setPriorityAdjustment(-2);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setPriorityAdjustment(-2);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Include Federated
+ config1.setIncludeFederated(true);
+ assertNotEquals(config1, config2);
+ assertNotEquals(config1.hashCode(), config2.hashCode());
+ config2.setIncludeFederated(true);
+ assertEquals(config1, config2);
+ assertEquals(config1.hashCode(), config2.hashCode());
+ }
+}
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeConfigurationReloadTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeConfigurationReloadTest.java
index 249e500c91..88ff2bd047 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeConfigurationReloadTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeConfigurationReloadTest.java
@@ -127,12 +127,16 @@ class AMQPBridgeConfigurationReloadTest extends
AmqpClientTestSupport {
final AMQPBridgeBrokerConnectionElement updatedElement = new
AMQPBridgeBrokerConnectionElement();
updatedElement.setName(getTestName());
updatedElement.addBridgeFromAddressPolicy(updatedReceiveFromAddress);
+ updatedElement.addProperty(ADDRESS_RECEIVER_IDLE_TIMEOUT, 0);
- amqpConnection.getConnectionElements().clear();
- amqpConnection.addElement(updatedElement); // This should be
equivalent to replacing the previous instance.
+ final AMQPBrokerConnectConfiguration amqpConnectionUpdated =
+ new AMQPBrokerConnectConfiguration(getTestName(), "tcp://" +
remoteURI.getHost() + ":" + remoteURI.getPort());
+ amqpConnectionUpdated.setReconnectAttempts(0);// No reconnects
+ amqpConnectionUpdated.addElement(updatedElement);
+ amqpConnectionUpdated.parseURI();
server.getConfiguration().getAMQPConnection().clear();
- server.getConfiguration().addAMQPConnection(amqpConnection);
+ server.getConfiguration().addAMQPConnection(amqpConnectionUpdated);
protocolFactory.updateProtocolServices(server,
Collections.emptyList());
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java
index 5e40198ef7..75f916465e 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java
@@ -169,16 +169,23 @@ public class AMQPFederationConfigurationReloadTest
extends AmqpClientTestSupport
updatedReceiveFromAddress.setAutoDelete(true);
updatedReceiveFromAddress.setAutoDeleteDelay(10_000L);
updatedReceiveFromAddress.setAutoDeleteMessageCount(-1L);
+
updatedReceiveFromAddress.addProperty(ADDRESS_RECEIVER_IDLE_TIMEOUT, 2);
final AMQPFederatedBrokerConnectionElement updatedElement = new
AMQPFederatedBrokerConnectionElement();
updatedElement.setName(getTestName());
updatedElement.addLocalAddressPolicy(updatedReceiveFromAddress);
- amqpConnection.getConnectionElements().clear();
- amqpConnection.addElement(updatedElement); // This should be
equivalent to replacing the previous instance.
+ final AMQPBrokerConnectConfiguration amqpUpdatedConnection =
+ new AMQPBrokerConnectConfiguration(getTestName(), "tcp://" +
remoteURI.getHost() + ":" + remoteURI.getPort());
+ amqpUpdatedConnection.setReconnectAttempts(0);// No reconnects
+ amqpUpdatedConnection.addElement(element);
+ amqpUpdatedConnection.parseURI();
+
+ amqpUpdatedConnection.getConnectionElements().clear();
+ amqpUpdatedConnection.addElement(updatedElement); // This should
be equivalent to replacing the previous instance.
server.getConfiguration().getAMQPConnection().clear();
- server.getConfiguration().addAMQPConnection(amqpConnection);
+ server.getConfiguration().addAMQPConnection(amqpUpdatedConnection);
protocolFactory.updateProtocolServices(server,
Collections.emptyList());
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java
index bf1a6dd362..8dd4e52f99 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java
@@ -36,6 +36,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -54,6 +55,10 @@ import
org.apache.activemq.artemis.api.core.client.ServerLocator;
import org.apache.activemq.artemis.api.core.management.AcceptorControl;
import org.apache.activemq.artemis.api.core.management.ConnectionRouterControl;
import org.apache.activemq.artemis.core.config.Configuration;
+import
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration;
+import
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectionElement;
+import
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement;
+import
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationQueuePolicyElement;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
import org.apache.activemq.artemis.core.postoffice.Binding;
import org.apache.activemq.artemis.core.postoffice.QueueBinding;
@@ -62,6 +67,7 @@ import
org.apache.activemq.artemis.core.postoffice.impl.LocalQueueBinding;
import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
import org.apache.activemq.artemis.core.security.CheckType;
import org.apache.activemq.artemis.core.security.Role;
+import org.apache.activemq.artemis.core.server.BrokerConnection;
import
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
import
org.apache.activemq.artemis.core.server.cluster.impl.RemoteQueueBindingImpl;
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
@@ -73,6 +79,7 @@ import
org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
+import org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnection;
import
org.apache.activemq.artemis.tests.unit.core.postoffice.impl.fakes.FakeQueue;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.apache.activemq.artemis.tests.util.Wait;
@@ -2166,6 +2173,148 @@ public class RedeployTest extends ActiveMQTestBase {
}
}
+ @Test
+ public void
testUpdateFederationPolicyInBrokerPropertiesRedeploysNewBrokerConnection()
throws Exception {
+ Path brokerXML = getTestDirfile().toPath().resolve("broker.xml");
+ URL url1 =
RedeployTest.class.getClassLoader().getResource("reload-acceptor.xml");
+ Path brokerProperties =
getTestDirfile().toPath().resolve("broker.properties");
+ Files.copy(url1.openStream(), brokerXML);
+
+ final Properties properties = new
ConfigurationImpl.InsertionOrderedProperties();
+
+ properties.put("AMQPConnections.federation-example-server.uri",
"tcp://localhost:5770");
+ properties.put("AMQPConnections.federation-example-server.autostart",
"true");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.type",
"FEDERATION");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includeFederated",
"false");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includes.tracking.addressMatch",
"#");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includes.tracking.queueMatch",
"tracking");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.name",
"queue-federation-from-server-2");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.properties.amqpCredits",
"0");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.properties.amqpPullConsumerCredits",
"1");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.name",
"federation-example-server");
+ properties.put("AMQPConnections.federation-example-server.name",
"federation-example-server");
+
properties.put("AMQPConnections.federation-example-server.reconnectAttempts",
"-1");
+
properties.put("AMQPConnections.federation-example-server.retryInterval",
"1000");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.name",
"federation-example-server");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.params.port",
"5770");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.params.host",
"localhost");
+
+ Writer propertiesWriter = Files.newBufferedWriter(brokerProperties,
StandardOpenOption.WRITE,
+
StandardOpenOption.CREATE,
+
StandardOpenOption.TRUNCATE_EXISTING);
+ try {
+ properties.store(propertiesWriter, null);
+ } finally {
+ propertiesWriter.flush();
+ propertiesWriter.close();
+ }
+
+ final MBeanServer mBeanServer = MBeanServerFactory.createMBeanServer();
+ runAfter(() -> MBeanServerFactory.releaseMBeanServer(mBeanServer));
+
+ EmbeddedActiveMQ embeddedActiveMQ = new EmbeddedActiveMQ();
+ embeddedActiveMQ.setPropertiesResourcePath(brokerProperties.toString());
+ embeddedActiveMQ.setConfigResourcePath(brokerXML.toUri().toString());
+ embeddedActiveMQ.setMbeanServer(mBeanServer);
+ embeddedActiveMQ.start();
+
+ final ReusableLatch latch = new ReusableLatch(1);
+ final Runnable tick = latch::countDown;
+
+ embeddedActiveMQ.getActiveMQServer().getReloadManager().setTick(tick);
+
+ try {
+ latch.await(10, TimeUnit.SECONDS);
+
+ final TransportConfiguration acceptor =
findInConfiguration("artemis",
embeddedActiveMQ.getActiveMQServer().getConfiguration());
+
+ assertNotNull(acceptor);
+ assertEquals("127.0.0.1",
acceptor.getParams().get(TransportConstants.HOST_PROP_NAME));
+ assertEquals("61616",
acceptor.getParams().get(TransportConstants.PORT_PROP_NAME));
+ assertNull(acceptor.getParams().get(TransportConstants.AUTO_START));
+
+ final Collection<BrokerConnection> connections =
embeddedActiveMQ.getActiveMQServer().getBrokerConnections();
+
+ assertFalse(connections.isEmpty());
+ assertEquals(1, connections.size());
+
+ final AMQPBrokerConnection amqpConnection = (AMQPBrokerConnection)
connections.iterator().next();
+
+ assertEquals("federation-example-server", amqpConnection.getName());
+
+ final AMQPBrokerConnectConfiguration configuration =
amqpConnection.getConfiguration();
+ final List<AMQPBrokerConnectionElement> federations =
configuration.getFederations();
+
+ assertEquals(1, federations.size());
+
+ final AMQPFederatedBrokerConnectionElement federation =
(AMQPFederatedBrokerConnectionElement) federations.get(0);
+ final Set<AMQPFederationQueuePolicyElement> policies =
federation.getLocalQueuePolicies();
+
+ assertEquals(1, policies.size());
+
+ final AMQPFederationQueuePolicyElement element =
policies.iterator().next();
+
+ assertEquals("1",
element.getProperties().get("amqpPullConsumerCredits"));
+
+ properties.clear();
+ properties.put("AMQPConnections.federation-example-server.uri",
"tcp://localhost:5770");
+ properties.put("AMQPConnections.federation-example-server.autostart",
"true");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.type",
"FEDERATION");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includeFederated",
"false");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includes.tracking.addressMatch",
"#");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.includes.tracking.queueMatch",
"tracking");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.name",
"queue-federation-from-server-2");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.properties.amqpCredits",
"0");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.localQueuePolicies.queue-federation-from-server-2.properties.amqpPullConsumerCredits",
"10");
+
properties.put("AMQPConnections.federation-example-server.federations.federation-example-server.name",
"federation-example-server");
+ properties.put("AMQPConnections.federation-example-server.name",
"federation-example-server");
+
properties.put("AMQPConnections.federation-example-server.reconnectAttempts",
"-1");
+
properties.put("AMQPConnections.federation-example-server.retryInterval",
"1000");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.name",
"federation-example-server");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.params.port",
"5770");
+
properties.put("AMQPConnections.federation-example-server.transportConfigurations.federation-example-server.params.host",
"localhost");
+
+ propertiesWriter = Files.newBufferedWriter(brokerProperties,
StandardOpenOption.WRITE,
+
StandardOpenOption.TRUNCATE_EXISTING);
+
+ try {
+ properties.store(propertiesWriter, null);
+ } finally {
+ propertiesWriter.flush();
+ propertiesWriter.close();
+ }
+
+ latch.setCount(1);
+ embeddedActiveMQ.getActiveMQServer().getReloadManager().setTick(tick);
+ latch.await(10, TimeUnit.SECONDS);
+
+ final Collection<BrokerConnection> updatedConnections =
embeddedActiveMQ.getActiveMQServer().getBrokerConnections();
+
+ assertFalse(updatedConnections.isEmpty());
+ assertEquals(1, updatedConnections.size());
+
+ final AMQPBrokerConnection amqpConnectionUpdated =
(AMQPBrokerConnection) updatedConnections.iterator().next();
+
+ assertEquals("federation-example-server",
amqpConnectionUpdated.getName());
+
+ final AMQPBrokerConnectConfiguration updatedConfiguration =
amqpConnectionUpdated.getConfiguration();
+ final List<AMQPBrokerConnectionElement> updatedFederations =
updatedConfiguration.getFederations();
+
+ assertEquals(1, updatedFederations.size());
+
+ final AMQPFederatedBrokerConnectionElement updatedFederation =
(AMQPFederatedBrokerConnectionElement) updatedFederations.get(0);
+ final Set<AMQPFederationQueuePolicyElement> updatedPolicies =
updatedFederation.getLocalQueuePolicies();
+
+ assertEquals(1, updatedPolicies.size());
+
+ final AMQPFederationQueuePolicyElement updatedElement =
updatedPolicies.iterator().next();
+
+ assertEquals("10",
updatedElement.getProperties().get("amqpPullConsumerCredits"));
+ } finally {
+ embeddedActiveMQ.stop();
+ }
+ }
+
private TransportConfiguration findInConfiguration(String acceptorName,
Configuration configuration) {
final Set<TransportConfiguration> acceptors =
configuration.getAcceptorConfigurations();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]