rmi调试

1.服务端报错信息如下:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
         java.lang.ClassNotFoundException: ISegment
解决办法: 
控制台执行如下:
set classpath=%classpath%;D:\wordSerach\tdp-common-lib\lib\SegmentCt-0.0.1-SNAPSHOT.jar
start  rmiregistry
2、客户端报错如下:
caused by java.rmi.NotBoundException:
原因是 服务端没有正确设置 rmiUrl
正确的设置应该是:
// srvRmiUrl = "rmi://localhost:1099/Segment";
srvRmiUrl = "Segment";
ISegment stub = (ISegment) UnicastRemoteObject.exportObject(impl, 0);
registry.rebind(srvRmiUrl, stub);

3、web工程引入 SegmentCt-0.0.1-SNAPSHOT.jar,没有将此jar放置于web工程的lib目录下面,而是直接引用
在xml文件注入类:





 

报错信息 提示找不到类  com.tellhow.searchplatform.segmentct.SegmentProxy
解决办法:
在build path中删除 外部依赖包SegmentCt-0.0.1-SNAPSHOT.jar,把 SegmentCt-0.0.1-SNAPSHOT.jar复制到 WEB-INF的lib目录下面,

加载到build path中。



----------------------------------------------------------------------------------------------------------------------------------------------


    近段由于项目中要用到jmx,所以对其有所接触!从网上获得一些示例代码后就开始动手了,入门的代码网上很多,但是有些要留意的地方没有提及!这里就说下mbean的命名规范的问题。这个情况是我在把MBean注册到MBean服务器的时候遇到的。大致的情况是出现了下列异常信息:

Java代码 复制代码  收藏代码
  1. Create an RMI connector server  
  2. javax.management.NotCompliantMBeanException: MBean class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl does not implement DynamicMBean, neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl: Class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl is not a JMX compliant MXBean)  
  3.     at com.sun.jmx.mbeanserver.Introspector.checkCompliance(Introspector.java:160)  
  4.     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:305)  
  5.     at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)  
  6.     at com.skywin.monitor.appadt.AppadtMbanAgent.main(AppadtMbanAgent.java:30)  
Create an RMI connector server
javax.management.NotCompliantMBeanException: MBean class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl does not implement DynamicMBean, neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl: Class com.skywin.monitor.appadt.mbean.GlobalsdrMbeanImpl is not a JMX compliant MXBean)
	at com.sun.jmx.mbeanserver.Introspector.checkCompliance(Introspector.java:160)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:305)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
	at com.skywin.monitor.appadt.AppadtMbanAgent.main(AppadtMbanAgent.java:30)

 查了资料才知道,是我的MBean不符合命名规范 !命名规范要遵从一下两点

 

1标准MBean 名称必需是在要监控的类名后面加上“MBean,

 

2监控的类和MBean 接口必需在同一包下

也可以理解为注册的接口名字必须以MBean结尾,接口实现类比接口名字少了MBean,而且接口和接口实现类必须放在同一个包下



你可能感兴趣的:(rmi调试)