This is an automated email from the ASF dual-hosted git repository.

iuliana pushed a commit to branch revert-1097-fix/BROOkLYN-626
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 8547fea64ca77f1cfab7fa365640a6c934b22d6a
Author: Iuliana Cosmina <[email protected]>
AuthorDate: Mon Sep 6 10:14:57 2021 +0100

    Revert "BROOKLYN-626: fix jmxmp"
---
 karaf/features/src/main/feature/feature.xml             |  1 +
 .../java/org/apache/brooklyn/feed/jmx/JmxHelper.java    | 17 ++++++++++-------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/karaf/features/src/main/feature/feature.xml 
b/karaf/features/src/main/feature/feature.xml
index abacdc8..0c326b5 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -260,6 +260,7 @@
 
     <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}$Import-Package=javax.management.openmbean,*</bundle>
         <feature>brooklyn-software-winrm</feature>
         <feature>brooklyn-policy</feature>
     </feature>
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 0fd1384..dd93d72 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
@@ -306,13 +306,16 @@ 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 {
-        // Fix for BROOKLYN-626
-        // In Karaf 4.2.8, they added jmxmp support via a jar in boot/lib/
-        // This means it's on the root classpath without it being a 
proper/normal bundle!
-        // We need to use the classes from that ClassLoader rather than our 
own bundle, otherwise
-        // we get ClassCastException when we deserialize a jmxmp message and 
try to cast it to
-        // `Message` from the other ClassLoader. 
-        return JMXConnectorFactory.connect(url, env);
+        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" })

Reply via email to