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文件注入类:
<bean id="segmentProxy" class="com.tellhow.searchplatform.segmentct.SegmentProxy" init-method="validateStub">
<property name="rmiURL" value="rmi://localhost:1099/Segment" />
</bean>
报错信息 提示找不到类 com.tellhow.searchplatform.segmentct.SegmentProxy
解决办法:
在build path中删除 外部依赖包SegmentCt-0.0.1-SNAPSHOT.jar,把 SegmentCt-0.0.1-SNAPSHOT.jar复制到 WEB-INF的lib目录下面,
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文件注入类:
<bean id="segmentProxy" class="com.tellhow.searchplatform.segmentct.SegmentProxy" init-method="validateStub">
<property name="rmiURL" value="rmi://localhost:1099/Segment" />
</bean>
报错信息 提示找不到类 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服务器的时候遇到的。大致的情况是出现了下列异常信息:
- 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)
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,而且接口和接口实现类必须放在同一个包下