首页 > 代码库 > RMI no such object in table异常
RMI no such object in table异常
问题描述
同一RMI服务端export多个远程服务实现时,在客户端调用时有的能访问,有的不能访问,出现异常:NoSuchObjectException: no such object in table
问题分析
在远程服务器export服务实现时是通过匿名对象的方式:
SmsSenderImplsmsSender = new SmsSenderImpl();
iSmsSender =(ISmsSender) UnicastRemoteObject.exportObject(smsSender, 0);
registry.bind("SmsSender",iSmsSender);
在匿名对象创建后,没有其他的引用,方法返回后,可能会被System GC(垃圾回收),所以出现可能该对象不存在的现象。
解决方法
将服务实现对象设为static静态变量,我的相关代码如下:public static SmsSenderImpl smsSender = new SmsSenderImpl();//用static,避免NoSuchObjectException public static ISmsSender iSmsSender = null; public static void startSmsServer() { try { iSmsSender = (ISmsSender) UnicastRemoteObject.exportObject(smsSender, 0); Registry registry = null; int port = 9999; try{ registry = LocateRegistry.getRegistry(port); registry.list(); }catch(Exception ex){ registry = LocateRegistry.createRegistry(port); } registry.bind("SmsSender", iSmsSender); logger.info("启动远程短信调用接口..."); } catch (Exception e) { logger.error("启动远程短信调用接口异常!", e); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。