Guillaume Nodet created ARTEMIS-5947:
----------------------------------------
Summary: ActiveMQServers.newActiveMQServer(String, MBeanServer,
SecurityManager) hardcodes enablePersistence=true, ignoring XML configuration
Key: ARTEMIS-5947
URL: https://issues.apache.org/jira/browse/ARTEMIS-5947
Project: Artemis
Issue Type: Bug
Affects Versions: 2.44.0
Reporter: Guillaume Nodet
h3. Summary
{{ActiveMQServers.newActiveMQServer(String configURL, MBeanServer,
ActiveMQSecurityManager)}} hardcodes {{enablePersistence=true}},
silently ignoring the XML configuration's
{{<persistence-enabled>false</persistence-enabled>}}.
h3. Details
The 3-arg method parses an XML configuration file but then calls the 3-arg
{{newActiveMQServer(Configuration, MBeanServer,
ActiveMQSecurityManager)}} which delegates to the 4-arg version with
{{enablePersistence=true}} hardcoded:
{code:java}
public static ActiveMQServer newActiveMQServer(final String configURL,
final MBeanServer mbeanServer,
final ActiveMQSecurityManager
securityManager) throws Exception {
FileConfiguration config = new FileConfiguration();
LegacyJMSConfiguration legacyJMSConfiguration = new
LegacyJMSConfiguration(config);
new FileDeploymentManager(configURL)
.addDeployable(config).addDeployable(legacyJMSConfiguration).readConfiguration();
// This calls the 3-arg version which hardcodes enablePersistence=true:
ActiveMQServer server = ActiveMQServers.newActiveMQServer(config,
mbeanServer, securityManager);
return server;
}
public static ActiveMQServer newActiveMQServer(final Configuration config,
final MBeanServer mbeanServer,
final ActiveMQSecurityManager
securityManager) {
// Hardcodes enablePersistence=true, overriding the XML's
<persistence-enabled>false</persistence-enabled>
ActiveMQServer server = ActiveMQServers.newActiveMQServer(config,
mbeanServer, securityManager, true);
return server;
}
{code}
The 4-arg method does {{config.setPersistenceEnabled(enablePersistence)}},
overriding whatever was parsed from XML.
h3. Impact
On JDK 25 (macOS), enabling persistence causes the embedded broker to get
stuck in {{STARTING}} state during journal initialization,
likely due to JDK 25's tighter native access restrictions
({{System::loadLibrary}} warnings from {{activemq-artemis-native}}) affecting
the AIO to NIO journal fallback path. The broker never transitions to
{{STARTED}}, and {{waitForActivation()}} times out.
h3. Suggested fix
The {{newActiveMQServer(String, MBeanServer, SecurityManager)}} method should
honor the parsed XML configuration's persistence setting:
{code:java}
public static ActiveMQServer newActiveMQServer(final String configURL,
final MBeanServer mbeanServer,
final ActiveMQSecurityManager
securityManager) throws Exception {
FileConfiguration config = new FileConfiguration();
LegacyJMSConfiguration legacyJMSConfiguration = new
LegacyJMSConfiguration(config);
new FileDeploymentManager(configURL)
.addDeployable(config).addDeployable(legacyJMSConfiguration).readConfiguration();
// Use config.isPersistenceEnabled() instead of hardcoding true
ActiveMQServer server = ActiveMQServers.newActiveMQServer(
config, mbeanServer, securityManager, config.isPersistenceEnabled());
return server;
}
{code}
h3. Workaround
Parse the XML manually and call the 4-arg version directly:
{code:java}
FileConfiguration config = new FileConfiguration();
LegacyJMSConfiguration legacyJMSConfiguration = new
LegacyJMSConfiguration(config);
new FileDeploymentManager(configURL)
.addDeployable(config).addDeployable(legacyJMSConfiguration).readConfiguration();
activeMQServer = ActiveMQServers.newActiveMQServer(config, null,
securityManager, false);
{code}
h3. Environment
* Artemis 2.44.0
* JDK 25 (Temurin 25.0.2+10)
* macOS (Darwin)
Discovered via Apache Camel {{JmsToJmsTransactedSecurityIT}} test failure.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]