当前位置:编程学习 > JAVA >>

JMX远程注册MBean报错The MBean class could not be loaded by the default loader reposit

在远程机器上运行一个MBeanServer(如192.168.1.100),spring配置:
<!--导出spring bean所有的方法和属性 不使用赖加载-->  
    <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">  
        <!--需要导出为MBean的spring 类 -->  
        <property name="beans">  
            <map>  
                <entry key="Managed-Beans:name=appMonitorBean" value-ref="appMonitorBean"/>  
                <!-- 将JDMK定义的HtmlAdaptorServer的bean加入mbean map中-->
                <entry key="Managed-Beans:name=jdmkadapter,port=8099" value-ref="httpJDMKAdaptor"/>
                <entry key="Managed-Beans:name=mletLoader" value-ref="mletLoader"/>  
            </map>  
        </property>  
        <!--<property name="autodetect" value="true"/>-->  
        <!--指定export的MBean server -->  
        <property name="server" ref="mbeanServer"/>     
    </bean>  
    <bean id="appMonitorBean" class="cn.com.victorysoft.jmxmonitor.mbean.AppMonitorBean">  
    </bean> 
     <!--配置类加载器 -->
    <bean id="mletLoader" class="javax.management.loading.MLet">  
    </bean> 
    <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"/>
    <!--定义JDMK的HtmlAdaptorServerbean-->
    <bean id="httpJDMKAdaptor" class="com.sun.jdmk.comm.HtmlAdaptorServer">
    <property name="port">
       <value>8099</value>
    </property>
    </bean> 
    
    <!--注册端口 我使用的是9992-->  
    <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean" destroy-method="destroy">  
        <property name="port" value="9992"/>  
    </bean>  
    <!--配置服务连接connector via rmi -->  
    <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">  
        <property name="objectName"  value="connector:name=rmi"/>  
        <property name="serviceUrl" value="service:jmx:rmi:///jndi/rmi://192.168.1.100:9992/jmxrmi"/>  
        <property name="server" ref="mbeanServer"/>
        <!-- 多线程启动connector,一个线程一个connector -->
        <property name="threaded" value="true" />
        <!-- 多线程启动connector,thread daemon --> 
        <property name="daemon" value="true" /> 
    </bean>  
启动192.168.1.100的服务,然后在192.168.1.110机器上远程向192.168.1.100服务器的MBeanServer注册MBean(HelloWorld.java):
          JMXServiceURL jmxUrl = new           JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.1.100:9992/jmxrmi");
          JMXConnector connector = JMXConnectorFactory.connect(jmxUrl);
          MBeanServerConnection mBeanServerconnection = connector.getMBeanServerConnection();
          // 在远程服务器上注册MBean
  mBeanServerconnection .createMBean(HelloWorld.class.getName(),
 new ObjectName("Managed-Beans:name=HelloWorldBean"));
HelloWorld实现接口HelloWorldMBean,运行192.168.1.110机器上的MBean注册代码后报异常:

Exception in thread "main" javax.management.ReflectionException: The MBean class could not be loaded by the default loader repository
at com.sun.jmx.mbeanserver.MBeanInstantiator.findClassWithDefaultLoaderRepository(MBeanInstantiator.java:71)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:259)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:199)
at com.sun.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:286)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1382)
at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
at javax.management.remote.rmi.RMIConnectionImpl.createMBean(RMIConnectionImpl.java:222)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl_Stub.createMBean(Unknown Source)
at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.createMBean(RMIConnector.java:627)
at cn.com.victorysoft.jmxmonitor.mbean.TestRMI.main(TestRMI.java:84)
Caused by: java.lang.ClassNotFoundException: cn.com.victorysoft.jmxmonitor.mbean.HelloWorld
at com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport.loadClass(ClassLoaderRepositorySupport.java:211)
at com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport.loadClass(ClassLoaderRepositorySupport.java:131)
at com.sun.jmx.mbeanserver.MBeanInstantiator.findClassWithDefaultLoaderRepository(MBeanInstantiator.java:68)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:259)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:199)
at com.sun.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:286)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1382)
at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
at javax.management.remote.rmi.RMIConnectionImpl.createMBean(RMIConnectionImpl.java:222)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
请各位大侠解惑,问题出在什么地方?小弟不胜感激 JMX MLET MBEAN远程注册 --------------------编程问答-------------------- 顶起来,大牛们都现身吧,阿门 --------------------编程问答-------------------- 在线等~~~~~ --------------------编程问答-------------------- 人呢,有懂了大侠给解答下啊
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,