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]

Reply via email to