This is an automated email from the ASF dual-hosted git repository.
clebertsuconic 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 3a5731c697 ARTEMIS-5607 Support disabling JMX notifications
3a5731c697 is described below
commit 3a5731c697c71514fe9c266fc7bc3aebf052ba2e
Author: Aayush Atharva <[email protected]>
AuthorDate: Fri Mar 6 14:31:27 2026 +0000
ARTEMIS-5607 Support disabling JMX notifications
---
.../api/config/ActiveMQDefaultConfiguration.java | 10 +++++++++
.../artemis/core/config/Configuration.java | 12 +++++++++++
.../core/config/impl/ConfigurationImpl.java | 13 +++++++++++
.../deployers/impl/FileConfigurationParser.java | 2 ++
.../management/impl/ActiveMQServerControlImpl.java | 12 +++++++++++
.../management/impl/ManagementServiceImpl.java | 2 +-
.../resources/schema/artemis-configuration.xsd | 8 +++++++
.../core/config/impl/ConfigurationImplTest.java | 25 ++++++++++++++++++++++
.../config/impl/DefaultsFileConfigurationTest.java | 2 ++
.../core/config/impl/FileConfigurationTest.java | 1 +
.../management/impl/ManagementServiceImplTest.java | 20 +++++++++++++++++
.../resources/ConfigurationTest-full-config.xml | 1 +
.../ConfigurationTest-xinclude-config.xml | 1 +
.../ConfigurationTest-xinclude-schema-config.xml | 1 +
14 files changed, 109 insertions(+), 1 deletion(-)
diff --git
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
index f49da2c223..e71fb2b9ed 100644
---
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
+++
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
@@ -192,6 +192,9 @@ public final class ActiveMQDefaultConfiguration {
// true means that the management API is available via JMX
private static boolean DEFAULT_JMX_MANAGEMENT_ENABLED = true;
+ // true means that management notifications are reproduced as JMX
notifications
+ private static boolean DEFAULT_JMX_NOTIFICATION_ENABLED = true;
+
// the JMX domain used to registered Apache Artemis MBeans in the
MBeanServer
private static String DEFAULT_JMX_DOMAIN = "org.apache.activemq.artemis";
@@ -900,6 +903,13 @@ public final class ActiveMQDefaultConfiguration {
return DEFAULT_JMX_MANAGEMENT_ENABLED;
}
+ /**
+ * {@code true} means that management notifications are reproduced as JMX
notifications
+ */
+ public static boolean isDefaultJmxNotificationEnabled() {
+ return DEFAULT_JMX_NOTIFICATION_ENABLED;
+ }
+
/**
* the JMX domain used to registered Apache Artemis MBeans in the
MBeanServer
*/
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
index fa58778bea..67aa0279cc 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
@@ -284,6 +284,18 @@ public interface Configuration {
*/
Configuration setJMXManagementEnabled(boolean enabled);
+ /**
+ * {@return whether management notifications are reproduced as JMX
notifications; default is {@link
+ * ActiveMQDefaultConfiguration#DEFAULT_JMX_NOTIFICATION_ENABLED}}
+ */
+ boolean isJMXNotificationEnabled();
+
+ /**
+ * Sets whether management notifications are reproduced as JMX
notifications; default is
+ * {@link ActiveMQDefaultConfiguration#DEFAULT_JMX_NOTIFICATION_ENABLED}}
+ */
+ Configuration setJMXNotificationEnabled(boolean enabled);
+
/**
* {@return the domain used by JMX MBeans (provided JMX management is
enabled); default is {@link
* ActiveMQDefaultConfiguration#DEFAULT_JMX_DOMAIN}}
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 53f9c92505..5647b653a3 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -210,6 +210,8 @@ public class ConfigurationImpl extends
javax.security.auth.login.Configuration i
protected boolean jmxManagementEnabled =
ActiveMQDefaultConfiguration.isDefaultJmxManagementEnabled();
+ protected boolean jmxNotificationEnabled =
ActiveMQDefaultConfiguration.isDefaultJmxNotificationEnabled();
+
protected String jmxDomain =
ActiveMQDefaultConfiguration.getDefaultJmxDomain();
protected boolean jmxUseBrokerName =
ActiveMQDefaultConfiguration.isDefaultJMXUseBrokerName();
@@ -2173,6 +2175,17 @@ public class ConfigurationImpl extends
javax.security.auth.login.Configuration i
return this;
}
+ @Override
+ public boolean isJMXNotificationEnabled() {
+ return jmxNotificationEnabled;
+ }
+
+ @Override
+ public ConfigurationImpl setJMXNotificationEnabled(final boolean enabled) {
+ jmxNotificationEnabled = enabled;
+ return this;
+ }
+
@Override
public String getJMXDomain() {
return jmxDomain;
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 3e1963b4ed..7927aa6b73 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -462,6 +462,8 @@ public final class FileConfigurationParser extends
XMLConfigurationUtil {
config.setJMXManagementEnabled(getBoolean(e, "jmx-management-enabled",
config.isJMXManagementEnabled()));
+ config.setJMXNotificationEnabled(getBoolean(e,
"jmx-notification-enabled", config.isJMXNotificationEnabled()));
+
config.setJMXDomain(getString(e, "jmx-domain", config.getJMXDomain(),
NOT_NULL_OR_EMPTY));
config.setJMXUseBrokerName(getBoolean(e, "jmx-use-broker-name",
config.isJMXUseBrokerName()));
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 7f72ed455c..83be85e376 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
@@ -4226,6 +4226,9 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
public void removeNotificationListener(final NotificationListener listener,
final NotificationFilter filter,
final Object handback) throws
ListenerNotFoundException {
+ if (broadcaster == null) {
+ return;
+ }
if (AuditLogger.isBaseLoggingEnabled()) {
AuditLogger.removeNotificationListener(this.server, listener, filter,
handback);
}
@@ -4239,6 +4242,9 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
@Override
public void removeNotificationListener(final NotificationListener listener)
throws ListenerNotFoundException {
+ if (broadcaster == null) {
+ return;
+ }
if (AuditLogger.isBaseLoggingEnabled()) {
AuditLogger.removeNotificationListener(this.server, listener);
}
@@ -4254,6 +4260,9 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
public void addNotificationListener(final NotificationListener listener,
final NotificationFilter filter,
final Object handback) throws
IllegalArgumentException {
+ if (broadcaster == null) {
+ return;
+ }
if (AuditLogger.isBaseLoggingEnabled()) {
AuditLogger.addNotificationListener(this.server, listener, filter,
handback);
}
@@ -4438,6 +4447,9 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
@Override
public void
onNotification(org.apache.activemq.artemis.core.server.management.Notification
notification) {
+ if (broadcaster == null) {
+ return;
+ }
if (!(notification.getType() instanceof CoreNotificationType type))
return;
if (type == CoreNotificationType.SESSION_CREATED) {
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
index f7e6734d0b..bb35f814c6 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
@@ -178,7 +178,7 @@ public class ManagementServiceImpl implements
ManagementService {
messageCounterEnabled = configuration.isMessageCounterEnabled();
managementAddress = configuration.getManagementAddress();
managementNotificationAddress =
configuration.getManagementNotificationAddress();
- broadcaster = new NotificationBroadcasterSupport();
+ broadcaster = configuration.isJMXNotificationEnabled() ? new
NotificationBroadcasterSupport() : null;
notificationsEnabled = true;
objectNameBuilder =
ObjectNameBuilder.create(configuration.getJMXDomain(), configuration.getName(),
configuration.isJMXUseBrokerName());
managementMessageRbacResourceNamePrefix =
configuration.isManagementMessageRbac() ?
SimpleString.of(configuration.getManagementRbacPrefix()).concat('.') : null;
diff --git a/artemis-server/src/main/resources/schema/artemis-configuration.xsd
b/artemis-server/src/main/resources/schema/artemis-configuration.xsd
index d65b21327d..63c6cf5321 100644
--- a/artemis-server/src/main/resources/schema/artemis-configuration.xsd
+++ b/artemis-server/src/main/resources/schema/artemis-configuration.xsd
@@ -252,6 +252,14 @@
</xsd:annotation>
</xsd:element>
+ <xsd:element name="jmx-notification-enabled" type="xsd:boolean"
default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ whether management notifications are reproduced as JMX
notifications
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
<xsd:element name="jmx-domain" type="xsd:string"
default="org.apache.activemq" maxOccurs="1" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index 9a9c9990f6..8b2bf1f4ad 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -3148,6 +3148,31 @@ public class ConfigurationImplTest extends
AbstractConfigurationTestBase {
assertTrue(properties.containsKey("addressConfigurations.test.queueConfigs.test.name"));
}
+ @Test
+ public void testParseJMXEnabledOnProperties() throws Exception {
+ Properties properties = new Properties();
+
+ properties.put("JMXNotificationEnabled", "false");
+ ConfigurationImpl configuration = new ConfigurationImpl();
+ configuration.parsePrefixedProperties(properties, null);
+
+ assertFalse(configuration.isJMXNotificationEnabled());
+
+ File outputProperty = new File(getTestDirfile(), "broker.properties");
+ configuration.exportAsProperties(outputProperty);
+
+ Properties brokerProperties = new Properties();
+
+ try (FileInputStream is = new FileInputStream(outputProperty)) {
+ BufferedInputStream bis = new BufferedInputStream(is);
+ brokerProperties.load(bis);
+ }
+
+ assertEquals("false", brokerProperties.get("JMXNotificationEnabled"));
+ }
+
+
+
/**
* Verifies the lock coordinator configuration parsing and export process:
* <ul>
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DefaultsFileConfigurationTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DefaultsFileConfigurationTest.java
index ac82dd031a..8701f6cc31 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DefaultsFileConfigurationTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DefaultsFileConfigurationTest.java
@@ -52,6 +52,8 @@ public class DefaultsFileConfigurationTest extends
AbstractConfigurationTestBase
assertEquals(ActiveMQDefaultConfiguration.isDefaultJmxManagementEnabled(),
conf.isJMXManagementEnabled());
+
assertEquals(ActiveMQDefaultConfiguration.isDefaultJmxNotificationEnabled(),
conf.isJMXNotificationEnabled());
+
assertEquals(ActiveMQDefaultConfiguration.getDefaultJmxDomain(),
conf.getJMXDomain());
assertEquals(0, conf.getIncomingInterceptorClassNames().size());
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index 4dead4742a..b885e6e3fd 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -205,6 +205,7 @@ public class FileConfigurationTest extends
AbstractConfigurationTestBase {
assertEquals("Frog", configInstance.getClusterUser());
assertEquals("Wombat", configInstance.getClusterPassword());
assertFalse(configInstance.isJMXManagementEnabled());
+ assertFalse(configInstance.isJMXNotificationEnabled());
assertEquals("gro.qtenroh", configInstance.getJMXDomain());
assertTrue(configInstance.isMessageCounterEnabled());
assertEquals(5, configInstance.getMessageCounterMaxDayHistory());
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
index 198a6e3ddf..38ddebbc85 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.activemq.artemis.core.server.management.impl;
+import java.lang.reflect.Field;
import javax.management.MBeanServer;
import org.apache.activemq.artemis.api.core.RoutingType;
@@ -40,6 +41,9 @@ import
org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
public class ManagementServiceImplTest {
MBeanServer mBeanServer = Mockito.mock(MBeanServer.class);
@@ -190,6 +194,22 @@ public class ManagementServiceImplTest {
}
+ @Test
+ public void testBroadcasterNullWhenJMXNotificationDisabled() throws
Exception {
+ Field broadcasterField =
ManagementServiceImpl.class.getDeclaredField("broadcaster");
+ broadcasterField.setAccessible(true);
+
+ FileConfiguration enabledConfig = new FileConfiguration();
+ enabledConfig.setJMXNotificationEnabled(true);
+ ManagementServiceImpl enabledService = new
ManagementServiceImpl(mBeanServer, enabledConfig);
+ assertNotNull(broadcasterField.get(enabledService));
+
+ FileConfiguration disabledConfig = new FileConfiguration();
+ disabledConfig.setJMXNotificationEnabled(false);
+ ManagementServiceImpl disabledService = new
ManagementServiceImpl(mBeanServer, disabledConfig);
+ assertNull(broadcasterField.get(disabledService));
+ }
+
@Test
public void testGetAttributeNoSecurityCheck() throws Exception {
diff --git
a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
index 14b76645c8..88a7619c8f 100644
--- a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
+++ b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
@@ -40,6 +40,7 @@
<mask-password>true</mask-password>
<log-delegate-factory-class-name>com.foo</log-delegate-factory-class-name>
<jmx-management-enabled>false</jmx-management-enabled>
+ <jmx-notification-enabled>false</jmx-notification-enabled>
<jmx-domain>gro.qtenroh</jmx-domain>
<message-counter-enabled>true</message-counter-enabled>
<message-counter-sample-period>123456</message-counter-sample-period>
diff --git
a/artemis-server/src/test/resources/ConfigurationTest-xinclude-config.xml
b/artemis-server/src/test/resources/ConfigurationTest-xinclude-config.xml
index 803eed9747..86274bc7a2 100644
--- a/artemis-server/src/test/resources/ConfigurationTest-xinclude-config.xml
+++ b/artemis-server/src/test/resources/ConfigurationTest-xinclude-config.xml
@@ -41,6 +41,7 @@
<mask-password>true</mask-password>
<log-delegate-factory-class-name>com.foo</log-delegate-factory-class-name>
<jmx-management-enabled>false</jmx-management-enabled>
+ <jmx-notification-enabled>false</jmx-notification-enabled>
<jmx-domain>gro.qtenroh</jmx-domain>
<message-counter-enabled>true</message-counter-enabled>
<message-counter-sample-period>123456</message-counter-sample-period>
diff --git
a/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config.xml
b/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config.xml
index eec3aae8e7..05c9e062be 100644
---
a/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config.xml
+++
b/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config.xml
@@ -41,6 +41,7 @@
<mask-password>true</mask-password>
<log-delegate-factory-class-name>com.foo</log-delegate-factory-class-name>
<jmx-management-enabled>false</jmx-management-enabled>
+ <jmx-notification-enabled>false</jmx-notification-enabled>
<jmx-domain>gro.qtenroh</jmx-domain>
<message-counter-enabled>true</message-counter-enabled>
<message-counter-sample-period>123456</message-counter-sample-period>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]