RMI@Spring的常见问题解决

4、I3C协议详解 I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述.. 阅读详情

原文地址: http://yangwencan2002.iteye.com/blog/284249

RMI 问题 1 背景:

用 ./shutdown.sh 关闭 rmi 服务器的 tomcat ,然后 ./startup.sh 启动,客户端连接总是会导致如下错误:

org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is:

        java.io.EOFException

com.ffcs.ieie.communicate.ieiemp.IeiempException: org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI st

ub failed; nested exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is:

        java.io.EOFException

RMI 问题 1 分析:

The cause of the problem is the fact that Spring creates an RMIRegistry with the classloader of the server webapp. Then, when restarting the server, the RMIRegistry is not shut down. After the restart the Registry keeps its references to the old Stubs which do not exist anymore.
There are two solutions:
1) Start the rmiregistry in a seperate process without the classpath of the server app.
2) (better approach) Let spring start the RMIRegistry throu RmiRegistryFactoryBean, which shuts it down correctly.

参考: http://forum.springframework.org/showthread.php?t=33073

RMI 问题 1 解决:

将服务器中的 spring 配置代码,如下:

    < bean id = "incomingService" class = "com.ffcs.ieiemp.ieie.rmi.IncomingService" />

    < bean id = "rmiService" class = "org.springframework.remoting.rmi.RmiServiceExporter" >

        < property name = "serviceName" value = "IncomingService" />

        < property name = "service" ref = "incomingService" />

        < property name = "serviceInterface" value = "com.ffcs.ieiemp.ieie.rmi.Incoming" />

        < property name = "registryPort" value = "1099" />

</ bean >

替换为:

    <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">

       <property name="port" value="1099"/>

    </bean>

    < bean id = "incomingService" class = "com.ffcs.ieiemp.ieie.rmi.IncomingService" />

    < bean id = "rmiService" class = "org.springframework.remoting.rmi.RmiServiceExporter" >

        < property name = "serviceName" value = "IncomingService" />

        < property name = "service" ref = "incomingService" />

        < property name = "serviceInterface" value = "com.ffcs.ieiemp.ieie.rmi.Incoming" />

        <!-- <property name="registryPort" value="1099"/> -->

        <property name="registry" ref="registry"/>

</ bean >

 

RMI 问题 2 背景:

          RMI 服务器重启,总是会出现客户端连接拒绝的问题。

RMI 问题 2 分析:

          服务器重启会影响到客户端?说明客户端有保存着重启之前的服务器连接相关记录。经研究发现,客户端 Stub 有缓存,所以只要刷新缓存即可解决问题。参考: http://forum.springsource.org/showthread.php?t=61575

RMI 问题 2 解决:

          在客户端连接代码中增加红色标识的代码:

       RmiProxyFactoryBean factory= new RmiProxyFactoryBean();

       factory.setServiceInterface(Incoming. class );

       factory.setServiceUrl(url);

       // XXX vincan: 解决重启 rmi 的服务器后会出现拒绝连接或找不到服务对象的错误

       factory.setLookupStubOnStartup(false );

       factory.setRefreshStubOnConnectFailure(true );

       factory.afterPropertiesSet();

    Incoming service=(Incoming)factory.getObject();

 

RMI 问题 3 背景:

          两台服务器, JDK 都是 1.6 ,在一个局域网内,内网 IP 分别为 192.168.39.11 , 192.168.39.164 ,对应的的还有外网 IP 。写了一个 RMI 服务器和客户端,在本地调试没有问题。把服务器端布署到 11 这台服务器上后,在 164 客户端连接却总是抛错:
java.rmi.ConnectException: Connection refused to host:127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod
(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.call(Unknown Source)
at RMI.Client.callRMI(Client.java:39)
at RMI.Client.main(Client.java:53)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket
(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket
(Unknown Source)
... 9 more
也就是 IP 被指向 127.0.0.1 了,而客户端发起连接的时候 IP 绝对是写的 IP 是 192.168.39.11 。

RMI 问题 3 分析:

这就是典型的服务器有多个 ip 引起的 rmi 连接问题。

RMI 问题 3 解决:

         解决方法有三:

1.       服务器端添加代码: System.setProperty("java.rmi.server.hostname" , "192.168.39.11" );

可写在全局监听器里成为全局变量。

2.  在 RMI 服务器上 root 身份登录,输入 Vi /etc/hosts ,在第一行添加 192.168.39.11     ieie

3.  若是用 spring, 则在 RmiServiceExporter 中添加属性 <property name="registryHost"  value="192.168.39.11" />

总结 :RMI固然好用,但得慎用,以上问题困扰甚久,终得解决:)

Visual Studio报错TRK0005找不到CL.exe?三步彻底解决环境变量问题 本文详细解析了Visual Studio报错TRK0005找不到CL.exe的根本原因,并提供了三步彻底解决环境变量问题的方案。从验证安装完整性到配置永久环境变量,再到注册表级修复,帮助开发者建立健壮的开发环境配置体系,确保编译链稳定运行。 阅读详情

相关推荐

零样本缺陷检测新体验:用AnomalyGPT大模型快速搭建智能质检系统(附Win10适配指南)

本文详细介绍了如何利用AnomalyGPT大模型在Windows 10系统上快速搭建零样本工业缺陷检测系统。通过实战指南,涵盖从环境部署、模型准备到工程化落地的全过程,包括将模型封装为API服务、接入工业相机以及开发可视化监控看板,为制造业智能质检提供了一套高效、低门槛的本地部署解决方案。

weixin_29094775的博客 310

springboot 集成 jconsole 性能监控

 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器。需要在项目中增加JMX 监控:import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframewo...

熊猫的博客 4809

第十九届全国大学生智能车竞赛越野信标 硬件篇

全国大学生智能汽车竞赛,越野信标组

2301_77568650的博客 4118

【Error】Java RM相关错误:java.rmi.UnmarshalException: error unmarshalling arguments

便携codebase相关的Java RMI代码时遇到了如下错误。 运行参数: java \ -Djava.security.policy=jndi.policy \ -Djava.naming.provider.url=rmi://$ip:1099 \ -Djava.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory \ com.basics.RMI.DynamicCodeDownloading.MethodI

think_ycx的专栏 5081

概率数据关联(PDA):多目标跟踪的基石算法

1. 为什么需要概率数据关联? 2. 核心思想与假设条件 3. 算法核心:概率分配与状态更新 4. 典型应用场景与优势 5. 挑战与改进方向 6. 下期预告

qq_44965657的博客 1467

Arduino程序设计(八)LCD显示实验

本文主要介绍温度/温湿度传感器的LCD显示实验,分别是:1、LM35采集环境温度LCD显示;2、DS18B20采集环境温度LCD显示;3、DHT11采集环境温湿度LCD显示。(1)LM35介绍LM35特性特性说明基本功能LM35作为常用的温度传感器,可以检测周围的温度工作原理利用感温材料,通过内部电路将温度值转化为对应的电压信号工作电压4~30V,常用5V供电温度测量测量范围0~100℃ ,误差 ±0.5℃输出信号线性模拟信号输出,LM35输出电压和摄氏温度程线性关系。

Alice的博客 6712

spring通过annotation注解注册MBean到JMX实现监控java运行状态

代码下载地址:http://www.zuidaima.com/share/1828116267568128.htm 原文:spring通过annotation注解注册MBean到JMX实现监控java运行状态 1、前言 JMX管理及使用日趋成熟。spring对bean的管理功能也很强大,通过annotation把某些方法暴露成MBean,然后通过JMX远程管理,在某些场景下会带来意想不到的效...

xiaoliuliu2050的专栏 531

Cadence Virtuoso实战:NMOS差分放大器设计与SPICE仿真全解析

本文详细解析了使用Cadence Virtuoso设计NMOS差分放大器并进行SPICE仿真的全流程。从基础设计要点、原理图绘制到工作点分析与性能调优,提供了实用的设计技巧和常见问题解决方案,帮助工程师高效完成模拟集成电路设计。重点介绍了差分放大器的关键参数设置、饱和区优化及版图设计注意事项,适用于ADC、DAC等高性能电路开发。

weixin_28340315的博客 612

Java rmi踩坑总结

最近在做分布式计算作业的过程中,需要用到Java rmi实现RPC远程调用,踩了不少坑,来总结一下帮助大家避坑。打开一个终端,一定要cd到output目录下,再启动rmiregistry,就OK了再次运行服务端,发现没有报错,一切正常。。

m0_62480812的博客 1614

基于SVD矩阵分解的用户购物篮预测分析实战

基于SVD矩阵分解的用户购物篮预测分析实战

360

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6092

RMI@SPRING的常见问题解决

<br />RMI问题 1背景: <br />用 ./shutdown.sh 关闭 rmi 服务器的 tomcat ,然后 ./startup.sh 启动,客户端连接总是会导致如下错误: <br />org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.rmi.UnmarshalException: error unmarshalli

zhangzeqin的专栏 5799

Open3D 合并两个点云【2025最新版】

两个点云中的数据连接,博客长期更新,本文最新更新时间为:2025年4月26日。

点云侠的博客 7435

java加载类异常_RMI加载类异常

RMI加载类异常场景:写数据到solr,应用调的是经过封装好的jar里面的方法,连接是正常的,但是写json数据时 抛出异常。错误如下:Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:java.rmi.UnmarshalE...

weixin_39821874的博客 941

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java.rmi.UnmarshalException: error unmarshalling return; nested exception is

RMI调用 在server端通过RMI来发布服务的时候,远程调用的时候可能会出现一下错误: Exception in thread “main” java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: rmi.IHelloServi...

下雨天_不打伞的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring boot 实际应用(一) 内置tomcat 实现JMX配置

项目需要增加JMX 监控,SO翻了翻官方文档,有几种实现方式,下面说一个我选择的,一是方便扩展,二是方便我底层封装 package com.ecej.nove.autoconfigure.jmx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.bea

架构技术专栏 5183

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is

今天在学RMI的时候遇到了这个问题: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: 后来是通过在class同一个目录启动start rmiregistry来解决的。 另外,这篇文章介绍的比较全面,...

Tomcat那些事儿 3356

org.springframework.remoting.RemoteLookupFailureException解决

RMI 问题 1 背景: 用 ./shutdown.sh 关闭 rmi 服务器的 tomcat ,然后 ./startup.sh 启动,客户端连接总是会导致如下错误: org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.r

XYM8xym的专栏 7015

java rmi中找不到类的解决

当rmi程序提示如下异常时   java.rmi.ServerException: RemoteException occurred in server thread; nested exce ption is:         java.rmi.UnmarshalException: error unmarshalling arguments; nested excep tion is: ...

lectery的专栏 740

java远程调用(rmi)常见的两个错误

java的 rmi远程调用给分布式编程带来极大的方便,在使用rmi过程中eclipse开发平台会提示一些错误,可能是因为遗漏了需要注意的地方。

孙悟空空的专栏 9817

程序包org.springframework.不存在的解决办法(初始化SpringBoot无法正常运行的解决办法)

程序包org.springframework.不存在,无法解析符号 ‘SpringBootApplication’的解决方法,使用IDEA创建SpringBoot无法使用的问题

m0_64372178的博客 1万+

聊聊JDK原生RPC框架RMI

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、RMI是什么?二、RMI的通信交互图三、废话不多说,上代码,直观感受一下1.代码整体结构2.RegisterApp3.RmiServer4.RmiClient四、运行看看效果五、总结一下RMI的优缺点优点劣势六、补充 前言 随着系统复杂度的提升,分布式变得越来越普遍。那么随之出现的一个问题就是分布式之间应用通信的问题。RPC也渐渐地被大众所知。 开始出现各种RPC实现方案。 例如Spring Cloud、Dubbo(阿里巴

liujianyangbj的博客 674

java.rmi.UnmarshalException:errorunmarshalling return; java.lang.ClassNotFoundException的解决方法

1)problem 出现 java.rmi.UnmarshalException:   error   unmarshalling   return;   nested   exception   is:    java.lang.ClassNotFoundException 异常的原因是,在命令行执行 rmiregistry,并没有指定好 绑定时查找的类文件的路径。 2)solutio

PacosonSWJTU的博客 6221

RMI总结及可能产生的几种异常及解决

RMI技术的总结主要包括5个文件:IRMI(接口),RMIImp, RMIServer, RMIClient, RMIImp_stubrmic cn.cnic.osg.NMServerhttp://dev.firnow.com/course/3_program/java/javashl/20090306/158655.html

薛正华的专栏 2万+

RMI报错:java.rmi.UnmarshalException: Error unmarshaling return;

RMI工程报有个类找不到,信息如下: java.rmi.UnmarshalException: Error unmarshaling return; nested exception is:     java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.CannotAcquireResourceException (no

wenpengy的专栏 2万+
上一篇: (转帖)Efficient Editing With vim
下一篇: MySQL分页优化
Model_CZ
博客等级 码龄19年 223粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值