You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/07/06 11:30:41 UTC

[2/3] brooklyn-server git commit: JMX connector: supply classloader for OSGi bundle

JMX connector: supply classloader for OSGi bundle


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/4e078265
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/4e078265
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/4e078265

Branch: refs/heads/master
Commit: 4e078265b3cf278cc8f520e2e902ebd044476e18
Parents: 1f2e2a1
Author: Aled Sage <al...@gmail.com>
Authored: Tue Jul 5 20:25:33 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Jul 6 11:30:42 2016 +0100

----------------------------------------------------------------------
 karaf/features/src/main/feature/feature.xml     |  2 +-
 .../org/apache/brooklyn/feed/jmx/JmxHelper.java | 24 +++++++++++++++++---
 2 files changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4e078265/karaf/features/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index 057cd3b..b1d7923 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -211,9 +211,9 @@
 
     <feature name="brooklyn-software-base"  version="${project.version}"  description="Brooklyn Software Base">
         <bundle>mvn:org.apache.brooklyn/brooklyn-software-base/${project.version}</bundle>
+        <bundle dependency="true">wrap:mvn:org.glassfish.external/opendmk_jmxremote_optional_jar/${opendmk_jmxremote_optional_jar.version}</bundle>
         <feature>brooklyn-software-winrm</feature>
         <feature>brooklyn-policy</feature>
-        <!-- python dependency required but not supported since karaf cannot handle its runtime bindings -->
     </feature>
 
     <feature name="brooklyn-jmxmp-agent" version="${project.version}" description="Brooklyn Secure JMXMP Agent">

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4e078265/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java b/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
index d3af18c..d29dee0 100644
--- a/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
+++ b/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
@@ -20,7 +20,6 @@ package org.apache.brooklyn.feed.jmx;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.brooklyn.util.JavaGroovyEquivalents.groovyTruth;
-import groovy.time.TimeDuration;
 
 import java.io.IOException;
 import java.security.KeyStore;
@@ -63,6 +62,7 @@ import javax.net.ssl.TrustManager;
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.entity.java.JmxSupport;
 import org.apache.brooklyn.entity.java.UsesJmx;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.crypto.SecureKeys;
 import org.apache.brooklyn.util.crypto.SslTrustUtils;
 import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -80,6 +80,8 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
+import groovy.time.TimeDuration;
+
 public class JmxHelper {
 
     private static final Logger LOG = LoggerFactory.getLogger(JmxHelper.class);
@@ -272,7 +274,7 @@ public class JmxHelper {
         JMXServiceURL serviceUrl = new JMXServiceURL(url);
         Map env = getConnectionEnvVars();
         try {
-            connector = JMXConnectorFactory.connect(serviceUrl, env);
+            connector = newConnector(serviceUrl, env);
         } catch (NullPointerException npe) {
             //some software -- eg WSO2 -- will throw an NPE exception if the JMX connection can't be created, instead of an IOException.
             //this is a break of contract with the JMXConnectorFactory.connect method, so this code verifies if the NPE is
@@ -300,9 +302,25 @@ public class JmxHelper {
         }
     }
 
+    /**
+     * Handles loading the {@link JMXConnector} in OSGi, where we need to supply the classloader.
+     */
+    public static JMXConnector newConnector(JMXServiceURL url, Map<String, ?> env) throws IOException {
+        Map<String, Object> envCopy = MutableMap.copyOf(env);
+        String protocol = url.getProtocol();
+        if ("jmxmp".equalsIgnoreCase(protocol)) {
+            envCopy.put(JMXConnectorFactory.PROTOCOL_PROVIDER_CLASS_LOADER, javax.management.remote.jmxmp.JMXMPConnector.class.getClassLoader());
+            envCopy.put(JMXConnectorFactory.DEFAULT_CLASS_LOADER, javax.management.remote.jmxmp.JMXMPConnector.class.getClassLoader());
+        } else if ("rmi".equalsIgnoreCase(protocol)) {
+            envCopy.put(JMXConnectorFactory.PROTOCOL_PROVIDER_CLASS_LOADER, javax.management.remote.rmi.RMIConnector.class.getClassLoader());
+            envCopy.put(JMXConnectorFactory.DEFAULT_CLASS_LOADER, javax.management.remote.rmi.RMIConnector.class.getClassLoader());
+        }
+        return JMXConnectorFactory.connect(url, envCopy);
+    }
+    
     @SuppressWarnings({ "rawtypes", "unchecked" })
     public Map getConnectionEnvVars() {
-        Map env = new LinkedHashMap();
+        Map<String, Object> env = new LinkedHashMap();
         
         if (groovyTruth(user) && groovyTruth(password)) {
             String[] creds = new String[] {user, password};