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 f7b15e351e ARTEMIS-4772 expose broker plugin classes via management
     new a88eba2bdb This closes #4935
f7b15e351e is described below

commit f7b15e351ef712213e0db1d072a2f0ce84f7bb8e
Author: m.napieraj <[email protected]>
AuthorDate: Wed May 15 16:37:09 2024 +0200

    ARTEMIS-4772 expose broker plugin classes via management
---
 .../apache/activemq/artemis/logs/AuditLogger.java  |  6 +++++
 .../api/core/management/ActiveMQServerControl.java |  4 +++
 .../management/impl/ActiveMQServerControlImpl.java | 19 ++++++++++++++
 .../management/ActiveMQServerControlTest.java      | 29 ++++++++++++++++++++++
 .../ActiveMQServerControlUsingCoreTest.java        |  5 ++++
 5 files changed, 63 insertions(+)

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 004a9a38c6..215c676bb2 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
@@ -2710,4 +2710,10 @@ public interface AuditLogger {
    @LogMessage(id = 601776, value = "User {} is getting first message as json 
on target resource: {}", level = LogMessage.Level.INFO)
    void peekFirstMessageAsJSON(String user, Object source);
 
+   static void getBrokerPluginClassNames(Object source) {
+      BASE_LOGGER.getBrokerPluginClassNames(getCaller(), source);
+   }
+
+   @LogMessage(id = 601777, value = "User {} is getting broker plugin class 
names on target resource: {}", level = LogMessage.Level.INFO)
+   void getBrokerPluginClassNames(String user, Object source);
 }
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 b8633e8c79..e671a2d2d9 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
@@ -111,6 +111,10 @@ public interface ActiveMQServerControl {
    @Attribute(desc = "List of interceptors used by this server for outgoing 
messages")
    String[] getOutgoingInterceptorClassNames();
 
+
+   @Attribute(desc = "List of broker plugin class names used by this server")
+   String[] getBrokerPluginClassNames();
+
    /**
     * Returns whether this server is clustered.
     */
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 b50489994c..ee31b5186f 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
@@ -49,6 +49,7 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
@@ -125,6 +126,7 @@ import 
org.apache.activemq.artemis.core.server.group.GroupingHandler;
 import org.apache.activemq.artemis.core.server.impl.Activation;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 import 
org.apache.activemq.artemis.core.server.impl.SharedNothingPrimaryActivation;
+import org.apache.activemq.artemis.core.server.plugin.ActiveMQServerBasePlugin;
 import org.apache.activemq.artemis.core.server.replay.ReplayManager;
 import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
@@ -351,6 +353,23 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
       }
    }
 
+   @Override
+   public String[] getBrokerPluginClassNames() {
+      if (AuditLogger.isBaseLoggingEnabled()) {
+         AuditLogger.getBrokerPluginClassNames(this.server);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         return configuration.getBrokerPlugins().stream()
+            .map(brokerPlugin -> brokerPlugin.getClass().getCanonicalName() != 
null ? brokerPlugin.getClass().getCanonicalName() : 
brokerPlugin.getClass().getName())
+            .toArray(String[]::new);
+      } finally {
+         blockOnIO();
+      }
+   }
+
    @Override
    public int getJournalPoolFiles() {
       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 3c50732111..085ea69938 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
@@ -44,6 +44,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Pattern;
 
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
 import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
@@ -100,6 +101,7 @@ import 
org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.core.server.ServiceComponent;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 import org.apache.activemq.artemis.core.server.impl.ServerLegacyProducersImpl;
+import org.apache.activemq.artemis.core.server.plugin.ActiveMQServerPlugin;
 import 
org.apache.activemq.artemis.core.server.plugin.ActiveMQServerSessionPlugin;
 import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
@@ -235,6 +237,28 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
       Assert.assertTrue(serverControl.isActive());
    }
 
+   @Test
+   public void testBrokerPluginClassNames() throws Exception {
+      ActiveMQServerControl serverControl = createManagementControl();
+
+      conf.registerBrokerPlugin(new TestBrokerPlugin());
+      conf.registerBrokerPlugin(new ActiveMQServerPlugin() {
+         @Override
+         public void registered(ActiveMQServer server) {
+         }
+      });
+
+      Assert.assertEquals(2, conf.getBrokerPlugins().size());
+      Assert.assertEquals(2, serverControl.getBrokerPluginClassNames().length);
+      Assert.assertEquals(
+         
"org.apache.activemq.artemis.tests.integration.management.ActiveMQServerControlTest.TestBrokerPlugin",
+         serverControl.getBrokerPluginClassNames()[0]);
+      Assert.assertTrue(Pattern.matches(
+         
"org.apache.activemq.artemis.tests.integration.management.ActiveMQServerControlTest\\$\\d+$",
+         serverControl.getBrokerPluginClassNames()[1]
+      ));
+   }
+
    @Test
    public void testSecurityCacheSizes() throws Exception {
       ActiveMQServerControl serverControl = createManagementControl();
@@ -6190,5 +6214,10 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
       session.commit();
    }
 
+   private static class TestBrokerPlugin implements ActiveMQServerPlugin {
+      @Override
+      public void registered(ActiveMQServer server) {
+      }
+   }
 }
 
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 44c72ed32f..397fdf62a8 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
@@ -540,6 +540,11 @@ public class ActiveMQServerControlUsingCoreTest extends 
ActiveMQServerControlTes
             return (String[]) 
proxy.retrieveAttributeValue("outgoingInterceptorClassNames", String.class);
          }
 
+         @Override
+         public String[] getBrokerPluginClassNames() {
+            return (String[]) 
proxy.retrieveAttributeValue("brokerPluginClassNames", String.class);
+         }
+
          @Override
          public String getJournalDirectory() {
             return (String) proxy.retrieveAttributeValue("journalDirectory");

Reply via email to