--- old/jdk/src/java.management/share/classes/javax/management/remote/JMXConnectorServerFactory.java 2017-02-02 11:14:02.000000000 +0000
+++ new/jdk/src/java.management/share/classes/javax/management/remote/JMXConnectorServerFactory.java 2017-02-02 11:14:02.000000000 +0000
@@ -30,13 +30,16 @@
import com.sun.jmx.remote.util.EnvHelp;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.net.MalformedURLException;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
+import java.util.ServiceLoader.Provider;
+import java.util.function.Predicate;
import javax.management.MBeanServer;
+import javax.management.remote.JMXConnectorFactory.ConnectorFactory;
/**
*
Factory to create JMX API connector servers. There
@@ -205,43 +208,15 @@
}
private static JMXConnectorServer
- getConnectorServerAsService(ClassLoader loader,
- JMXServiceURL url,
- Map map,
- MBeanServer mbs)
+ getConnectorServerAsService(ClassLoader loader, JMXServiceURL url,
+ Map map, MBeanServer mbs,
+ Predicate> filter)
throws IOException {
- Iterator providers =
- JMXConnectorFactory.
- getProviderIterator(JMXConnectorServerProvider.class, loader);
-
- IOException exception = null;
- while (providers.hasNext()) {
- try {
- return providers.next().newJMXConnectorServer(url, map, mbs);
- } catch (JMXProviderException e) {
- throw e;
- } catch (Exception e) {
- if (logger.traceOn())
- logger.trace("getConnectorAsService",
- "URL[" + url +
- "] Service provider exception: " + e);
- if (!(e instanceof MalformedURLException)) {
- if (exception == null) {
- if (e instanceof IOException) {
- exception = (IOException) e;
- } else {
- exception = EnvHelp.initCause(
- new IOException(e.getMessage()), e);
- }
- }
- }
- continue;
- }
- }
- if (exception == null)
- return null;
- else
- throw exception;
+ final ConnectorFactory
+ factory = (p) -> p.newJMXConnectorServer(url, map, mbs);
+ return JMXConnectorFactory.getConnectorAsService(
+ JMXConnectorServerProvider.class,
+ loader, url, filter, factory);
}
/**
@@ -309,18 +284,22 @@
loader);
IOException exception = null;
+ JMXConnectorServer connection = null;
if (provider == null) {
+ Predicate> systemProvider =
+ JMXConnectorFactory::isSystemProvider;
// Loader is null when context class loader is set to null
// and no loader has been provided in map.
// com.sun.jmx.remote.util.Service class extracted from j2se
// provider search algorithm doesn't handle well null classloader.
if (loader != null) {
try {
- JMXConnectorServer connection =
+ connection =
getConnectorServerAsService(loader,
serviceURL,
envcopy,
- mbeanServer);
+ mbeanServer,
+ systemProvider.negate());
if (connection != null)
return connection;
} catch (JMXProviderException e) {
@@ -329,13 +308,13 @@
exception = e;
}
}
- provider =
- JMXConnectorFactory.getProvider(
- protocol,
- PROTOCOL_PROVIDER_DEFAULT_PACKAGE,
- JMXConnectorFactory.class.getClassLoader(),
- providerClassName,
- targetInterface);
+ connection = getConnectorServerAsService(
+ JMXConnectorFactory.class.getClassLoader(),
+ serviceURL,
+ Collections.unmodifiableMap(envcopy),
+ mbeanServer,
+ systemProvider);
+ if (connection != null) return connection;
}
if (provider == null) {