我发现类似的问题并没有解决我的问题。
我创建了一个MBean接口及其Implementation类。我想在远程进程上创建这个MBean并调用它的方法。当我尝试mBeanServer.registerMBean(diskSpace, beanName);
时,这适用于本地流程
但是当我在JMXConnector上使用MBeanServerConnection在远程服务器上创建相同内容时出错: - mBeanServerConnection.createMBean(CheckDiskSpace.class.getName(), beanName);
这是整个Stack Trace: -
线程中的异常" main" javax.management.ReflectionException:默认的加载器存储库无法加载MBean类 at com.sun.jmx.mbeanserver.MBeanInstantiator.findClassWithDefaultLoaderRepository(MBeanInstantiator.java:104) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:268) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:206) at com.sun.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:326) 在javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1425) 在javax.management.remote.rmi.RMIConnectionImpl.access $ 300(RMIConnectionImpl.java:76) at javax.management.remote.rmi.RMIConnectionImpl $ PrivilegedOperation.run(RMIConnectionImpl.java:1311) 在javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1403) 在javax.management.remote.rmi.RMIConnectionImpl.createMBean(RMIConnectionImpl.java:259) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:497) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) at sun.rmi.transport.Transport $ 1.run(Transport.java:200) at sun.rmi.transport.Transport $ 1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.lambda $ run $ 79(TCPTransport.java:683) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler $$ Lambda $ 46 / 1217272183.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:682) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source) 在javax.management.remote.rmi.RMIConnectionImpl_Stub.createMBean(未知来源) at javax.management.remote.rmi.RMIConnector $ RemoteMBeanServerConnection.createMBean(RMIConnector.java:651) 在com.walmart.healthcheck.diskspace.remote.JMXCheckDiskSpaceServer.jmxCheckDiskSpaceServer(JMXCheckDiskSpaceServer.java:34) 在com.walmart.healthcheck.diskspace.remote.RunJMX.main(RunJMX.java:18) 引起:java.lang.ClassNotFoundException:com.walmart.healthcheck.diskspace.CheckDiskSpace at com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport.loadClass(ClassLoaderRepositorySupport.java:232) at com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport.loadClass(ClassLoaderRepositorySupport.java:144) at com.sun.jmx.mbeanserver.MBeanInstantiator.findClassWithDefaultLoaderRepository(MBeanInstantiator.java:101) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:268) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:206) at com.sun.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:326) 在javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1425) 在javax.management.remote.rmi.RMIConnectionImpl.access $ 300(RMIConnectionImpl.java:76) at javax.management.remote.rmi.RMIConnectionImpl $ PrivilegedOperation.run(RMIConnectionImpl.java:1311) 在javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1403) 在javax.management.remote.rmi.RMIConnectionImpl.createMBean(RMIConnectionImpl.java:259) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:497) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) at sun.rmi.transport.Transport $ 1.run(Transport.java:200) at sun.rmi.transport.Transport $ 1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.lambda $ run $ 79(TCPTransport.java:683) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler $$ Lambda $ 46 / 1217272183.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:682) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)
如何在远程进程上创建此MBean? 我已经尝试单独创建MBean类,并在我的类中包含jar文件。