关于RMI服务比较有意思的几点
来源:互联网 发布:matlab矩阵某两行相加 编辑:程序博客网 时间:2024/06/18 05:03
- 当你使用UnicastRemoteObject.export(Remote)发布一个对象时会触发一次FULL GC。
- 你必须手动管理你发布的Remote对象,意即如果没有别的客户端访问,你发布的对象/服务会被回收,然后你会收到如下的错
“NO SUCH OBJECT IN TABLE.”
package test;import static java.util.concurrent.TimeUnit.MILLISECONDS;import static java.util.concurrent.TimeUnit.SECONDS;import java.rmi.Remote;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;import java.rmi.server.UnicastRemoteObject;interface RemoteOperations extends Remote { String remoteOperation() throws RemoteException;}public final class rmi implements RemoteOperations { private static final String REMOTE_NAME = RemoteOperations.class.getName(); private static final RemoteOperations classVariable = new rmi(); private static boolean holdStrongReference = false; private static boolean invokeGarbageCollector = true; private static int delay = 0; public static void main(final String... args) throws Exception { for (final String arg : args) { if ("-gc".equals(arg)) { invokeGarbageCollector = true; } else if ("-nogc".equals(arg)) { invokeGarbageCollector = false; } else if ("-hold".equals(arg)) { holdStrongReference = true; } else if ("-release".equals(arg)) { holdStrongReference = false; } else if (arg.startsWith("-delay")) { delay = Integer.parseInt(arg.substring("-delay".length())); } else { System.err.println("usage: javac RMITest.java && java RMITest [-gc] [-nogc] [-hold] [-release] [-delay<seconds>]"); System.exit(1); } } server(); if (invokeGarbageCollector) { System.gc(); } if (delay > 0) { System.out.println("delaying " + delay + " seconds"); final long milliseconds = MILLISECONDS.convert(delay, SECONDS); Thread.sleep(milliseconds); } client(); System.exit(0); // stop RMI server thread } @Override public String remoteOperation() { return "foo"; } private static void server() throws Exception { // This reference is eligible for GC after this method returns final RemoteOperations methodVariable = new rmi(); final RemoteOperations toBeStubbed = holdStrongReference ? classVariable : methodVariable; final Remote remote = UnicastRemoteObject.exportObject(toBeStubbed, 0); final Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); registry.bind(REMOTE_NAME, remote); } private static void client() throws Exception { final Registry registry = LocateRegistry.getRegistry(); final Remote remote = registry.lookup(REMOTE_NAME); final RemoteOperations stub = RemoteOperations.class.cast(remote); final String message = stub.remoteOperation(); System.out.println("received: " + message); }}
http://stackoverflow.com/questions/645208/java-rmi-nosuchobjectexception-no-such-object-in-table
0 0
- 关于RMI服务比较有意思的几点
- RMI的几点补充
- 关于Serverless服务的几点建议
- 关于Serverless服务的几点建议
- Linux 特别有意思的几点知识
- 关于ArcGIS Server10.0发布服务的几点注意事项
- 关于服务程序开发的几点注意事项
- 关于dhcp服务你必须知道的几点
- RichTextBox控件的几点有意思的东西
- 个人总结的几条比较有意思的sql语句
- RMI几种发布和引用服务的方式
- 比较有意思的指针
- 比较有意思的问题
- 比较有意思的地图
- 关于foursquare(四方)应用的讨论,比较有意思
- 关于grub的几点
- 关于优化的几点
- 关于接口的几点
- 如何获取android项目下某个文件的绝对路径
- 解决linux运行某程序时提示error while loading shared libraries: abc.so cannot open shared object file
- 红黑树 学习笔记
- Mybatis实现批量插入和更新(Mybatis3.2源码修改)
- 数据结构 第六章 图
- 关于RMI服务比较有意思的几点
- 关于View Tag值的不同理解
- 二叉树实验
- 密文类型及格式帮助
- Ubuntu-配置JDK
- QML布局管理
- 移动硬盘分区(win7系统)
- Cocos2d-x3.2版本移植安卓提示'Serializing CDT Project settings..'has encountered a project
- python 排序并统计相同文本出现的个数