This is an automated email from the ASF dual-hosted git repository.
jbertram pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 8511cf3617 ARTEMIS-3843 add/remove connector via management
new 38ee7bad33 This closes #4089
8511cf3617 is described below
commit 8511cf36178fef32cad8617ce016342806221c79
Author: Justin Bertram <[email protected]>
AuthorDate: Thu May 19 21:36:45 2022 -0500
ARTEMIS-3843 add/remove connector via management
---
.../apache/activemq/artemis/logs/AuditLogger.java | 16 +++++++++++
.../api/core/management/ActiveMQServerControl.java | 7 +++++
.../management/impl/ActiveMQServerControlImpl.java | 32 ++++++++++++++++++++++
.../management/ActiveMQServerControlTest.java | 27 +++++++++++++++++-
.../ActiveMQServerControlUsingCoreTest.java | 10 +++++++
5 files changed, 91 insertions(+), 1 deletion(-)
diff --git
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
index 5633997375..481a5945be 100644
---
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
+++
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
@@ -2960,4 +2960,20 @@ public interface AuditLogger extends BasicLogger {
@LogMessage(level = Logger.Level.INFO)
@Message(id = 601761, value = "User {0} rolled back transaction {1}
involving {2}", format = Message.Format.MESSAGE_FORMAT)
void rolledBackTransaction(String user, String tx, String resource);
+
+ static void addConnector(Object source, Object... args) {
+ BASE_LOGGER.addConnector(getCaller(), source, arrayToString(args));
+ }
+
+ @LogMessage(level = Logger.Level.INFO)
+ @Message(id = 601762, value = "User {0} is adding a connector on target
resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+ void addConnector(String user, Object source, Object... args);
+
+ static void removeConnector(Object source, Object... args) {
+ BASE_LOGGER.addConnector(getCaller(), source, arrayToString(args));
+ }
+
+ @LogMessage(level = Logger.Level.INFO)
+ @Message(id = 601763, value = "User {0} is remove a connector on target
resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+ void removeConnector(String user, Object source, Object... args);
}
diff --git
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
index c7c335f892..ad88409819 100644
---
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
+++
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
@@ -1823,6 +1823,13 @@ public interface ActiveMQServerControl {
@Operation(desc = "Destroy a bridge", impact = MBeanOperationInfo.ACTION)
void destroyBridge(@Parameter(name = "name", desc = "Name of the bridge")
String name) throws Exception;
+ @Operation(desc = "Add a connector", impact = MBeanOperationInfo.ACTION)
+ void addConnector(@Parameter(name = "name", desc = "the unique name of the
connector to add; may be referenced from other components (e.g. bridges)")
String name,
+ @Parameter(name = "url", desc = "the URL of the
connector") String url) throws Exception;
+
+ @Operation(desc = "Remove a connector", impact = MBeanOperationInfo.ACTION)
+ void removeConnector(@Parameter(name = "name", desc = "the name of the
connector to remove") String name) throws Exception;
+
@Operation(desc = "List the existing broker connections", impact =
MBeanOperationInfo.INFO)
String listBrokerConnections();
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index 5695cb1f65..658df90f2a 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -3911,6 +3911,38 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
}
}
+ @Override
+ public void addConnector(String name, String url) throws Exception {
+ if (AuditLogger.isBaseLoggingEnabled()) {
+ AuditLogger.addConnector(this.server, name, url);
+ }
+ checkStarted();
+
+ clearIO();
+
+ try {
+ server.getConfiguration().addConnectorConfiguration(name, url);
+ } finally {
+ blockOnIO();
+ }
+ }
+
+ @Override
+ public void removeConnector(String name) throws Exception {
+ if (AuditLogger.isBaseLoggingEnabled()) {
+ AuditLogger.removeConnector(this.server, name);
+ }
+ checkStarted();
+
+ clearIO();
+
+ try {
+ server.getConfiguration().getConnectorConfigurations().remove(name);
+ } finally {
+ blockOnIO();
+ }
+ }
+
@Override
public String listBrokerConnections() {
if (AuditLogger.isBaseLoggingEnabled()) {
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 30f76a3186..210c8b5a42 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -1984,6 +1984,15 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
@Test
public void testCreateAndDestroyBridgeFromJson() throws Exception {
+ internalTestCreateAndDestroyBridgeFromJson(false);
+ }
+
+ @Test
+ public void testCreateAndDestroyBridgeFromJsonDynamicConnector() throws
Exception {
+ internalTestCreateAndDestroyBridgeFromJson(true);
+ }
+
+ private void internalTestCreateAndDestroyBridgeFromJson(boolean
dynamicConnector) throws Exception {
String name = RandomUtil.randomString();
String sourceAddress = RandomUtil.randomString();
String sourceQueue = RandomUtil.randomString();
@@ -2007,13 +2016,19 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
session.createQueue(new
QueueConfiguration(targetQueue).setAddress(targetAddress).setRoutingType(RoutingType.ANYCAST).setDurable(false));
}
+ String connectorName = connectorConfig.getName();
+ if (dynamicConnector) {
+ connectorName = RandomUtil.randomString();
+ serverControl.addConnector(connectorName, "vm://0");
+ }
+
BridgeConfiguration bridgeConfiguration = new BridgeConfiguration(name)
.setQueueName(sourceQueue)
.setForwardingAddress(targetAddress)
.setUseDuplicateDetection(false)
.setConfirmationWindowSize(1)
.setProducerWindowSize(-1)
-
.setStaticConnectors(Collections.singletonList(connectorConfig.getName()))
+ .setStaticConnectors(Collections.singletonList(connectorName))
.setHA(false)
.setUser(null)
.setPassword(null);
@@ -2072,6 +2087,16 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
locator.close();
}
+ @Test
+ public void testAddAndRemoveConnector() throws Exception {
+ ActiveMQServerControl serverControl = createManagementControl();
+ String connectorName = RandomUtil.randomString();
+ serverControl.addConnector(connectorName, "vm://0");
+ assertEquals(connectorName,
server.getConfiguration().getConnectorConfigurations().get(connectorName).getName());
+ serverControl.removeConnector(connectorName);
+
assertNull(server.getConfiguration().getConnectorConfigurations().get(connectorName));
+ }
+
@Test
public void testListPreparedTransactionDetails() throws Exception {
SimpleString atestq = new SimpleString("BasicXaTestq");
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
index b7c412874f..a28ee4e633 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
@@ -1587,6 +1587,16 @@ public class ActiveMQServerControlUsingCoreTest extends
ActiveMQServerControlTes
proxy.invokeOperation("createBridge", bridgeConfiguration);
}
+ @Override
+ public void addConnector(String name, String url) throws Exception {
+ proxy.invokeOperation("addConnector", name, url);
+ }
+
+ @Override
+ public void removeConnector(String name) throws Exception {
+ proxy.invokeOperation("removeConnector", name);
+ }
+
@Override
public String listProducersInfoAsJSON() throws Exception {
return (String) proxy.invokeOperation("listProducersInfoAsJSON");