提交 d09fa405 编写于 作者: A alanb

8001048: JSR-160: Allow IIOP transport to be optional

Reviewed-by: dsamersoff, dfuchs, mchung
上级 397d95ab
......@@ -26,13 +26,8 @@
package com.sun.jmx.remote.internal;
import java.util.Properties;
import java.io.IOException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.NoSuchObjectException;
import java.util.Properties;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.NoSuchObjectException;
import java.security.AccessController;
......@@ -115,9 +110,10 @@ public final class IIOPHelper {
* Connects the Stub to the given ORB.
*/
public static void connect(Object stub, Object orb)
throws RemoteException
throws IOException
{
ensureAvailable();
if (proxy == null)
throw new IOException("Connection to ORB failed, RMI/IIOP not available");
proxy.connect(stub, orb);
}
......@@ -125,15 +121,17 @@ public final class IIOPHelper {
* Returns true if the given object is an ORB.
*/
public static boolean isOrb(Object obj) {
ensureAvailable();
return proxy.isOrb(obj);
return (proxy == null) ? false : proxy.isOrb(obj);
}
/**
* Creates, and returns, a new ORB instance.
*/
public static Object createOrb(String[] args, Properties props) {
ensureAvailable();
public static Object createOrb(String[] args, Properties props)
throws IOException
{
if (proxy == null)
throw new IOException("ORB initialization failed, RMI/IIOP not available");
return proxy.createOrb(args, props);
}
......@@ -166,24 +164,27 @@ public final class IIOPHelper {
/**
* Makes a server object ready to receive remote calls
*/
public static void exportObject(Remote obj) throws RemoteException {
ensureAvailable();
public static void exportObject(Remote obj) throws IOException {
if (proxy == null)
throw new IOException("RMI object cannot be exported, RMI/IIOP not available");
proxy.exportObject(obj);
}
/**
* Deregisters a server object from the runtime.
*/
public static void unexportObject(Remote obj) throws NoSuchObjectException {
ensureAvailable();
public static void unexportObject(Remote obj) throws IOException {
if (proxy == null)
throw new NoSuchObjectException("Object not exported");
proxy.unexportObject(obj);
}
/**
* Returns a stub for the given server object.
*/
public static Remote toStub(Remote obj) throws NoSuchObjectException {
ensureAvailable();
public static Remote toStub(Remote obj) throws IOException {
if (proxy == null)
throw new NoSuchObjectException("Object not exported");
return proxy.toStub(obj);
}
}
......@@ -137,8 +137,10 @@ import com.sun.jmx.remote.util.EnvHelp;
* JAR conventions for service providers</a>, where the service
* interface is <code>JMXConnectorProvider</code>.</p>
*
* <p>Every implementation must support the RMI connector protocols,
* specified with the string <code>rmi</code> or
* <p>Every implementation must support the RMI connector protocol with
* the default RMI transport, specified with string <code>rmi</code>.
* An implementation may optionally support the RMI connector protocol
* with the RMI/IIOP transport, specified with the string
* <code>iiop</code>.</p>
*
* <p>Once a provider is found, the result of the
......
......@@ -129,8 +129,10 @@ import javax.management.MBeanServer;
* JAR conventions for service providers</a>, where the service
* interface is <code>JMXConnectorServerProvider</code>.</p>
*
* <p>Every implementation must support the RMI connector protocols,
* specified with the string <code>rmi</code> or
* <p>Every implementation must support the RMI connector protocol with
* the default RMI transport, specified with string <code>rmi</code>.
* An implementation may optionally support the RMI connector protocol
* with the RMI/IIOP transport, specified with the string
* <code>iiop</code>.</p>
*
* <p>Once a provider is found, the result of the
......
......@@ -238,10 +238,21 @@ public class RMIConnector implements JMXConnector, Serializable, JMXAddressable
//--------------------------------------------------------------------
// implements JMXConnector interface
//--------------------------------------------------------------------
/**
* @throws IOException if the connection could not be made because of a
* communication problem, or in the case of the {@code iiop} protocol,
* that RMI/IIOP is not supported
*/
public void connect() throws IOException {
connect(null);
}
/**
* @throws IOException if the connection could not be made because of a
* communication problem, or in the case of the {@code iiop} protocol,
* that RMI/IIOP is not supported
*/
public synchronized void connect(Map<String,?> environment)
throws IOException {
final boolean tracing = logger.traceOn();
......
......@@ -337,7 +337,8 @@ public class RMIConnectorServer extends JMXConnectorServer {
* @exception IllegalStateException if the connector server has
* not been attached to an MBean server.
* @exception IOException if the connector server cannot be
* started.
* started, or in the case of the {@code iiop} protocol, that
* RMI/IIOP is not supported.
*/
public synchronized void start() throws IOException {
final boolean tracing = logger.traceOn();
......
......@@ -36,8 +36,8 @@ questions.
that different implementations of the RMI connector can
interoperate.</p>
<p>The RMI connector supports both the JRMP and the IIOP transports
for RMI.</p>
<p>The RMI connector supports the JRMP transport for RMI, and
optionally the IIOP transport.</p>
<p>Like most connectors in the JMX Remote API, an RMI connector
usually has an address, which
......
......@@ -45,19 +45,36 @@ public class AddressableTest {
private static final MBeanServer mbs = MBeanServerFactory.createMBeanServer();
private static boolean isProtocolSupported(String protocol) {
if (protocol.equals("rmi"))
return true;
if (protocol.equals("iiop")) {
try {
Class.forName("javax.management.remote.rmi._RMIConnectionImpl_Tie");
return true;
} catch (ClassNotFoundException x) { }
}
return false;
}
public static void main(String[] args) throws Exception {
System.out.println(">>> test the new interface Addressable.");
boolean ok = true;
for (int i = 0; i < protocols.length; i++) {
try {
test(protocols[i], prefixes[i]);
System.out.println(">>> Test successed for "+protocols[i]);
} catch (Exception e) {
System.out.println(">>> Test failed for "+protocols[i]);
e.printStackTrace(System.out);
ok = false;
String protocol = protocols[i];
if (isProtocolSupported(protocol)) {
try {
test(protocol, prefixes[i]);
System.out.println(">>> Test successed for "+protocols[i]);
} catch (Exception e) {
System.out.println(">>> Test failed for "+protocols[i]);
e.printStackTrace(System.out);
ok = false;
}
} else {
System.out.format(">>> Test skipped for %s, protocol not supported%n",
protocol);
}
}
......@@ -65,7 +82,7 @@ public class AddressableTest {
System.out.println(">>> All Test passed.");
} else {
System.out.println(">>> Some TESTs FAILED");
System.exit(1);
throw new RuntimeException("See log for details");
}
}
......
......@@ -42,7 +42,6 @@ import javax.management.remote.rmi.RMIConnector;
import javax.management.remote.rmi.RMIIIOPServerImpl;
import javax.management.remote.rmi.RMIJRMPServerImpl;
import javax.management.remote.rmi.RMIServerImpl;
import org.omg.stub.javax.management.remote.rmi._RMIConnection_Stub;
public class CloseableTest {
private static final Class closeArray[] = {
......@@ -51,26 +50,43 @@ public class CloseableTest {
RMIConnection.class,
RMIConnectionImpl.class,
RMIConnectionImpl_Stub.class,
_RMIConnection_Stub.class,
RMIServerImpl.class,
RMIIIOPServerImpl.class,
RMIJRMPServerImpl.class
};
static int error;
static void test(Class<?> c) {
System.out.println("\nTest " + c);
if (Closeable.class.isAssignableFrom(c)) {
System.out.println("Test passed!");
} else {
error++;
System.out.println("Test failed!");
}
}
static void test(String cn) {
try {
test(Class.forName(cn));
} catch (ClassNotFoundException ignore) {
System.out.println("\n" + cn + " not tested.");
}
}
public static void main(String[] args) throws Exception {
System.out.println("Test that all the JMX Remote API classes that " +
"define\nthe method \"void close() throws " +
"IOException;\" extend\nor implement the " +
"java.io.Closeable interface.");
int error = 0;
for (Class c : closeArray) {
System.out.println("\nTest " + c);
if (Closeable.class.isAssignableFrom(c)) {
System.out.println("Test passed!");
} else {
error++;
System.out.println("Test failed!");
}
for (Class<?> c : closeArray) {
test(c);
}
// Stub classes not present if RMI-IIOP not supported
test("org.omg.stub.javax.management.remote.rmi._RMIConnection_Stub");
if (error > 0) {
final String msg = "\nTest FAILED! Got " + error + " error(s)";
System.out.println(msg);
......
......@@ -39,33 +39,22 @@ import javax.management.NotificationListener;
import java.util.Map;
public class ConnectionListenerNullTest {
static final boolean optionalFlag;
static {
Class genericClass = null;
static boolean isPresent(String cn) {
try {
genericClass =
Class.forName("javax.management.remote.generic.GenericConnector");
Class.forName(cn);
return true;
} catch (ClassNotFoundException x) {
// NO optional package
return false;
}
optionalFlag = (genericClass != null);
}
final static String[] mandatoryList = {
"service:jmx:rmi://", "service:jmx:iiop://"
};
final static String[] optionalList = {
"service:jmx:jmxmp://"
};
public static int test(String[] urls) {
public static int test(String... urls) {
int errCount = 0;
for (int i=0;i<urls.length;i++) {
try {
final JMXServiceURL url = new JMXServiceURL(urls[i]);
final JMXConnector c =
JMXConnectorFactory.newJMXConnector(url,(Map)null);
JMXConnectorFactory.newJMXConnector(url,(Map<String,String>)null);
final NotificationListener nl = null;
final NotificationFilter nf = null;
final Object h = null;
......@@ -121,12 +110,19 @@ public class ConnectionListenerNullTest {
public static void main(String args[]) {
int errCount = 0;
errCount += test(mandatoryList);
if (optionalFlag) errCount += test(optionalList);
// mandatory
errCount += test("service:jmx:rmi://");
// optional
if (isPresent("javax.management.remote.rmi._RMIConnectionImpl_Tie"))
errCount += test("service:jmx:iiop://");
if (isPresent("javax.management.remote.generic.GenericConnector"))
errCount += test("service:jmx:jmxmp://");
if (errCount > 0) {
System.err.println("ConnectionListenerNullTest failed: " +
errCount + " error(s) reported.");
System.exit(1);
throw new RuntimeException("ConnectionListenerNullTest failed: " +
errCount + " error(s) reported.");
}
System.out.println("ConnectionListenerNullTest passed.");
}
......
......@@ -49,17 +49,24 @@ public class IIOPURLTest {
public static void main(String[] args) throws Exception {
JMXServiceURL inputAddr =
new JMXServiceURL("service:jmx:iiop://");
JMXConnectorServer s =
JMXConnectorServerFactory.newJMXConnectorServer(inputAddr, null,
null);
JMXConnectorServer s;
try {
s = JMXConnectorServerFactory.newJMXConnectorServer(inputAddr, null, null);
} catch (java.net.MalformedURLException x) {
try {
Class.forName("javax.management.remote.rmi._RMIConnectionImpl_Tie");
throw new RuntimeException("MalformedURLException thrown but iiop appears to be supported");
} catch (ClassNotFoundException expected) { }
System.out.println("IIOP protocol not supported, test skipped");
return;
}
MBeanServer mbs = MBeanServerFactory.createMBeanServer();
mbs.registerMBean(s, new ObjectName("a:b=c"));
s.start();
JMXServiceURL outputAddr = s.getAddress();
if (!outputAddr.getURLPath().startsWith("/ior/IOR:")) {
System.out.println("URL path should start with \"/ior/IOR:\": " +
outputAddr);
System.exit(1);
throw new RuntimeException("URL path should start with \"/ior/IOR:\": " +
outputAddr);
}
System.out.println("IIOP URL path looks OK: " + outputAddr);
JMXConnector c = JMXConnectorFactory.connect(outputAddr);
......
......@@ -52,21 +52,27 @@ import javax.management.remote.JMXServiceURL;
import com.sun.jmx.remote.util.EnvHelp;
public class IdleTimeoutTest {
static boolean isPresent(String cn) {
try {
Class.forName(cn);
return true;
} catch (ClassNotFoundException x) {
return false;
}
}
public static void main(String[] args) throws Exception {
boolean ok = true;
List protos;
if (args.length > 0)
protos = Arrays.asList(args);
else {
protos =
new ArrayList(Arrays.asList(new String[] {"rmi", "iiop"}));
try {
Class.forName("javax.management.remote.jmxmp." +
"JMXMPConnectorServer");
protos = new ArrayList(Arrays.asList(new String[] {"rmi"}));
if (isPresent("javax.management.remote.rmi._RMIConnectionImpl_Tie"))
protos.add("iiop");
if (isPresent("javax.management.remote.jmxmp.JMXMPConnectorServer"))
protos.add("jmxmp");
} catch (ClassNotFoundException e) {
// OK: Optional JMXMP support is not present
}
}
for (Iterator it = protos.iterator(); it.hasNext(); ) {
String proto = (String) it.next();
......@@ -81,13 +87,13 @@ public class IdleTimeoutTest {
}
}
if (!ok) {
System.out.println("SOME TESTS FAILED");
System.exit(1);
throw new RuntimeException("Some tests failed - see log for details");
}
}
private static long getIdleTimeout(MBeanServer mbs, JMXServiceURL url)
throws Exception {
throws Exception
{
JMXConnectorServer server =
JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
server.start();
......
......@@ -253,4 +253,3 @@ public class MultiThreadDeadLockTest {
System.out.println("===Leave the method: " + m);
}
}
......@@ -40,27 +40,16 @@ import com.sun.jmx.remote.security.MBeanServerAccessController;
public class SetMBeanServerForwarder {
static final boolean optionalFlag;
static {
Class genericClass = null;
static boolean isPresent(String cn) {
try {
genericClass =
Class.forName("javax.management.remote.generic.GenericConnector");
Class.forName(cn);
return true;
} catch (ClassNotFoundException x) {
// NO optional package
return false;
}
optionalFlag = (genericClass != null);
}
final static String[] mandatoryList = {
"service:jmx:rmi://", "service:jmx:iiop://"
};
final static String[] optionalList = {
"service:jmx:jmxmp://"
};
public static int test(String[] urls) {
public static int test(String... urls) {
int errorCount = 0;
for (int i=0;i<urls.length;i++) {
try {
......@@ -241,12 +230,19 @@ public class SetMBeanServerForwarder {
public static void main(String args[]) {
int errCount = 0;
errCount += test(mandatoryList);
if (optionalFlag) errCount += test(optionalList);
// mandatory
errCount += test("service:jmx:rmi://");
// optional
if (isPresent("javax.management.remote.rmi._RMIConnectionImpl_Tie"))
errCount += test("service:jmx:iiop://");
if (isPresent("javax.management.remote.generic.GenericConnector"))
errCount += test("service:jmx:jmxmp://");
if (errCount > 0) {
System.err.println("SetMBeanServerForwarder failed: " +
errCount + " error(s) reported.");
System.exit(1);
throw new RuntimeException("SetMBeanServerForwarder failed: " +
errCount + " error(s) reported.");
}
System.out.println("SetMBeanServerForwarder passed.");
}
......
......@@ -70,7 +70,6 @@ import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.remote.rmi.RMIConnectorServer;
import org.omg.CORBA.MARSHAL;
public class MissingClassTest {
private static final int NNOTIFS = 50;
......@@ -84,6 +83,15 @@ public class MissingClassTest {
private static final Object unserializableObject = Thread.currentThread();
private static boolean isInstance(Object o, String cn) {
try {
Class<?> c = Class.forName(cn);
return c.isInstance(o);
} catch (ClassNotFoundException x) {
return false;
}
}
public static void main(String[] args) throws Exception {
System.out.println("Test that the client or server end of a " +
"connection does not fail if sent an object " +
......@@ -118,8 +126,7 @@ public class MissingClassTest {
if (ok)
System.out.println("Test passed");
else {
System.out.println("TEST FAILED");
System.exit(1);
throw new RuntimeException("TEST FAILED");
}
}
......@@ -133,7 +140,7 @@ public class MissingClassTest {
JMXConnectorServer cs;
JMXServiceURL url = new JMXServiceURL(proto, null, 0);
Map serverMap = new HashMap();
Map<String,Object> serverMap = new HashMap<>();
serverMap.put(JMXConnectorServerFactory.DEFAULT_CLASS_LOADER,
serverLoader);
......@@ -151,7 +158,7 @@ public class MissingClassTest {
}
cs.start();
JMXServiceURL addr = cs.getAddress();
Map clientMap = new HashMap();
Map<String,Object> clientMap = new HashMap<>();
clientMap.put(JMXConnectorFactory.DEFAULT_CLASS_LOADER,
clientLoader);
......@@ -174,7 +181,7 @@ public class MissingClassTest {
ok = false;
} catch (IOException e) {
Throwable cause = e.getCause();
if (cause instanceof MARSHAL) // see CR 4935098
if (isInstance(cause, "org.omg.CORBA.MARSHAL")) // see CR 4935098
cause = cause.getCause();
if (cause instanceof ClassNotFoundException) {
System.out.println("Success: got an IOException wrapping " +
......@@ -188,7 +195,7 @@ public class MissingClassTest {
}
System.out.println("Doing queryNames to ensure connection alive");
Set names = mbsc.queryNames(null, null);
Set<ObjectName> names = mbsc.queryNames(null, null);
System.out.println("queryNames returned " + names);
System.out.println("Provoke exception of unknown class");
......@@ -198,7 +205,7 @@ public class MissingClassTest {
ok = false;
} catch (IOException e) {
Throwable wrapped = e.getCause();
if (wrapped instanceof MARSHAL) // see CR 4935098
if (isInstance(wrapped, "org.omg.CORBA.MARSHAL")) // see CR 4935098
wrapped = wrapped.getCause();
if (wrapped instanceof ClassNotFoundException) {
System.out.println("Success: got an IOException wrapping " +
......@@ -251,7 +258,7 @@ public class MissingClassTest {
ok = false;
} catch (IOException e) {
Throwable cause = e.getCause();
if (cause instanceof MARSHAL) // see CR 4935098
if (isInstance(cause, "org.omg.CORBA.MARSHAL")) // see CR 4935098
cause = cause.getCause();
if (cause instanceof ClassNotFoundException) {
System.out.println("Success: got an IOException " +
......@@ -584,15 +591,13 @@ public class MissingClassTest {
try {
new ObjectOutputStream(new ByteArrayOutputStream())
.writeObject(tricky);
System.out.println("TEST INCORRECT: tricky notif is " +
"serializable");
System.exit(1);
throw new RuntimeException("TEST INCORRECT: tricky notif is " +
"serializable");
} catch (NotSerializableException e) {
// OK: tricky notif is not serializable
} catch (IOException e) {
System.out.println("TEST INCORRECT: tricky notif " +
"serialization check failed");
System.exit(1);
throw new RuntimeException("TEST INCORRECT: tricky notif " +
"serialization check failed");
}
/* Now shuffle an imaginary deck of cards where K, U, T, and
......@@ -629,12 +634,11 @@ public class MissingClassTest {
}
if (knownCount != 0 || unknownCount != 0
|| trickyCount != 0 || boringCount != 0) {
System.out.println("TEST INCORRECT: Shuffle failed: " +
throw new RuntimeException("TEST INCORRECT: Shuffle failed: " +
"known=" + knownCount +" unknown=" +
unknownCount + " tricky=" + trickyCount +
" boring=" + boringCount +
" deal=" + notifList);
System.exit(1);
}
String notifs = notifList.toString();
System.out.println("Shuffle: " + notifs);
......@@ -646,10 +650,8 @@ public class MissingClassTest {
case 't': n = tricky; break;
case 'b': n = boring; break;
default:
System.out.println("TEST INCORRECT: Bad shuffle char: " +
notifs.charAt(i));
System.exit(1);
throw new Error();
throw new RuntimeException("TEST INCORRECT: Bad shuffle char: " +
notifs.charAt(i));
}
sendNotification(n);
}
......
......@@ -49,13 +49,13 @@ import javax.management.MBeanServer;
import provider.JMXConnectorProviderImpl;
import provider.JMXConnectorServerProviderImpl;
public class ProviderTest {
public static void main(String[] args) throws Exception {
System.out.println("Starting ProviderTest");
MBeanServer mbs = MBeanServerFactory.newMBeanServer();
//First do the test with a protocol handled by Service providers
JMXServiceURL url =
new JMXServiceURL("service:jmx:rmi://");
// First do the test with a protocol handled by Service providers
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://");
dotest(url, mbs);
boolean clientCalled = provider.JMXConnectorProviderImpl.called();
......@@ -66,16 +66,22 @@ public class ProviderTest {
System.out.println("Client provider not called");
if (!serverCalled)
System.out.println("Server provider not called");
System.out.println("Test Failed");
System.exit(1);
throw new RuntimeException("Test failed - see log for details");
}
//The Service Provider doesn't handle IIOP. Default providers MUST
//be called.
url =
new JMXServiceURL("service:jmx:iiop://");
dotest(url, mbs);
// The Service Provider doesn't handle IIOP. Default providers MUST
// be called, which may or may not support IIOP.
url = new JMXServiceURL("service:jmx:iiop://");
try {
dotest(url, mbs);
} catch (MalformedURLException e) {
try {
Class.forName("javax.management.remote.rmi._RMIConnectionImpl_Tie");
e.printStackTrace(System.out);
throw new RuntimeException("MalformedURLException throw but IIOP appears to be supported");
} catch (ClassNotFoundException expected) { }
System.out.println("MalformedURLException thrown, IIOP transport not supported");
}
// Unsupported protocol.
JMXConnectorServer server = null;
......@@ -87,31 +93,19 @@ public class ProviderTest {
JMXConnectorServerFactory.newJMXConnectorServer(url,
null,
mbs);
System.out.println("Exception not thrown.");
System.exit(1);
}catch(MalformedURLException e) {
throw new RuntimeException("Exception not thrown.");
} catch (MalformedURLException e) {
System.out.println("Expected MalformedURLException thrown.");
}
catch(Exception e) {
e.printStackTrace();
System.out.println("Exception thrown : " + e);
System.exit(1);
}
try {
client =
JMXConnectorFactory.newJMXConnector(url,
null);
System.out.println("Exception not thrown.");
System.exit(1);
}catch(MalformedURLException e) {
throw new RuntimeException("Exception not thrown.");
} catch (MalformedURLException e) {
System.out.println("Expected MalformedURLException thrown.");
}
catch(Exception e) {
e.printStackTrace();
System.out.println("Exception thrown : " + e);
System.exit(1);
}
//JMXConnectorProviderException
url =
......@@ -121,60 +115,34 @@ public class ProviderTest {
JMXConnectorServerFactory.newJMXConnectorServer(url,
null,
mbs);
System.out.println("Exception not thrown.");
System.exit(1);
}catch(JMXProviderException e) {
throw new RuntimeException("Exception not thrown.");
} catch(JMXProviderException e) {
System.out.println("Expected JMXProviderException thrown.");
}
catch(Exception e) {
e.printStackTrace();
System.out.println("Exception thrown : " + e);
System.exit(1);
}
try {
client =
JMXConnectorFactory.newJMXConnector(url,
null);
System.out.println("Exception not thrown.");
System.exit(1);
throw new RuntimeException("Exception not thrown.");
}catch(JMXProviderException e) {
System.out.println("Expected JMXProviderException thrown.");
}
catch(Exception e) {
e.printStackTrace();
System.out.println("Exception thrown : " + e);
System.exit(1);
}
System.out.println("Test OK");
return;
}
private static void dotest(JMXServiceURL url, MBeanServer mbs)
throws Exception {
JMXConnectorServer server = null;
JMXConnector client = null;
try {
server =
JMXConnectorServerFactory.newJMXConnectorServer(url,
null,
mbs);
}catch(IllegalArgumentException e) {
e.printStackTrace();
System.exit(1);
}
server = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
server.start();
JMXServiceURL outputAddr = server.getAddress();
System.out.println("Server started ["+ outputAddr+ "]");
try {
client =
JMXConnectorFactory.newJMXConnector(outputAddr, null);
}catch(IllegalArgumentException e) {
e.printStackTrace();
System.exit(1);
}
client = JMXConnectorFactory.newJMXConnector(outputAddr, null);
client.connect();
System.out.println("Client connected");
......
......@@ -120,7 +120,7 @@ public class JMXServerErrorTest {
try {
cs=JMXConnectorServerFactory.newJMXConnectorServer(jurl,null,kbs);
} catch (MalformedURLException m) {
if ("jmxmp".equals(jurl.getProtocol())) {
if ("jmxmp".equals(jurl.getProtocol()) || "iiop".equals(jurl.getProtocol())) {
// OK, we may not have this in the classpath...
System.out.println("WARNING: Skipping protocol: " + jurl);
return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册