JAMES-2439 Allow to disable JMX
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a2e1b1d2 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a2e1b1d2 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a2e1b1d2 Branch: refs/heads/master Commit: a2e1b1d23b03e66086c0919353417c48975fb059 Parents: 3c3c8fc Author: benwa <[email protected]> Authored: Mon Jun 25 11:50:04 2018 +0700 Committer: benwa <[email protected]> Committed: Tue Jun 26 16:11:09 2018 +0700 ---------------------------------------------------------------------- .../apache/james/modules/server/JMXServer.java | 3 ++ .../james/modules/server/JmxConfiguration.java | 36 ++++++++++++++++---- .../modules/server/JmxConfigurationTest.java | 25 +++++++++++++- 3 files changed, 56 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/a2e1b1d2/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java ---------------------------------------------------------------------- diff --git a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java index 130b572..7d37c14 100644 --- a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java +++ b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java @@ -57,6 +57,9 @@ public class JMXServer { public void start() { synchronized (lock) { + if (!jmxConfiguration.isEnabled()) { + return; + } if (isStarted) { return; } http://git-wip-us.apache.org/repos/asf/james-project/blob/a2e1b1d2/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java ---------------------------------------------------------------------- diff --git a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java index 793e930..05ceb32 100644 --- a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java +++ b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java @@ -20,35 +20,56 @@ package org.apache.james.modules.server; import java.util.Objects; +import java.util.Optional; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.james.util.Host; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; public class JmxConfiguration { public static final String LOCALHOST = "localhost"; public static final int DEFAULT_PORT = 9999; + public static final boolean ENABLED = true; - public static final JmxConfiguration DEFAULT_CONFIGURATION = new JmxConfiguration(Host.from(LOCALHOST, DEFAULT_PORT)); + public static final JmxConfiguration DEFAULT_CONFIGURATION = new JmxConfiguration(ENABLED, Optional.of(Host.from(LOCALHOST, DEFAULT_PORT))); + public static final JmxConfiguration DISABLED = new JmxConfiguration(!ENABLED, Optional.empty()); public static JmxConfiguration fromProperties(PropertiesConfiguration configuration) { + boolean jmxEnabled = configuration.getBoolean("jmx.enabled", true); + if (!jmxEnabled) { + return DISABLED; + } + String address = configuration.getString("jmx.address", LOCALHOST); int port = configuration.getInt("jmx.port", DEFAULT_PORT); - return new JmxConfiguration(Host.from(address, port)); + return new JmxConfiguration(ENABLED, Optional.of(Host.from(address, port))); } - private final Host host; + private final boolean enabled; + private final Optional<Host> host; @VisibleForTesting - JmxConfiguration(Host host) { + JmxConfiguration(boolean enabled, Optional<Host> host) { + Preconditions.checkArgument(disabledOrHasHost(enabled, host), "Specifying a host is compulsory when JMX is enabled"); + this.enabled = enabled; this.host = host; } + private boolean disabledOrHasHost(boolean enabled, Optional<Host> host) { + return !enabled || host.isPresent(); + } + + public boolean isEnabled() { + return enabled; + } + public Host getHost() { - return host; + Preconditions.checkState(isEnabled(), "Trying to access JMX host while JMX is not enabled"); + return host.get(); } @Override @@ -56,14 +77,15 @@ public class JmxConfiguration { if (o instanceof JmxConfiguration) { JmxConfiguration that = (JmxConfiguration) o; - return Objects.equals(this.host, that.host); + return Objects.equals(this.host, that.host) + && Objects.equals(this.enabled, that.enabled); } return false; } @Override public final int hashCode() { - return Objects.hash(host); + return Objects.hash(host, enabled); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/a2e1b1d2/server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java b/server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java index a727b58..604d4f6 100644 --- a/server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java +++ b/server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java @@ -22,6 +22,7 @@ package org.apache.james.modules.server; import static org.assertj.core.api.Assertions.assertThat; import java.io.StringReader; +import java.util.Optional; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.james.util.Host; @@ -50,6 +51,28 @@ public class JmxConfigurationTest { "jmx.port=889\n")); assertThat(JmxConfiguration.fromProperties(configuration)) - .isEqualTo(new JmxConfiguration(Host.from("172.0.0.5", 889))); + .isEqualTo(new JmxConfiguration(JmxConfiguration.ENABLED, Optional.of(Host.from("172.0.0.5", 889)))); + } + + @Test + void fromPropertiesShouldReturnDisabledWhenConfiguredAsDisabled() throws Exception { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.load(new StringReader( + "jmx.enabled=false\n")); + + assertThat(JmxConfiguration.fromProperties(configuration)) + .isEqualTo(JmxConfiguration.DISABLED); + } + + @Test + void fromPropertiesShouldReturnDisabledWhenConfiguredAsDisabledWithHost() throws Exception { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.load(new StringReader( + "jmx.enabled=false\n" + + "jmx.address=172.0.0.5\n" + + "jmx.port=889\n")); + + assertThat(JmxConfiguration.fromProperties(configuration)) + .isEqualTo(JmxConfiguration.DISABLED); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
