RMI的几个问题总结, 共勉
2009-09-29 00:52
246 查看
最近由于项目的需要,研究了一下RMI的相关应用,学习JAVA最大的好处就是大牛们为我们做了好多底层的工作,我们只是直接拿过来用就好了,但是这之间也碰到了不少的问题,所以对于学习JAVA的人来说,必要的了解一些底层的东西还是很有必要的,不然以后只能停留在技工的这个阶段上了。
开发一直用的是Ubuntu系统,很喜欢这个系统,部分原因是因为它的特效做的很炫,当然更大的原因是对开源社区的尊敬和喜爱,因为真的能学到很多的东西。不过用Ubuntu的时候,发现用sudo apt-get install sun-java5-jdk之后,不用设置JAVA、CLASSPATH等环境变量也可以真接进行编译和运行程序,具体的原因不明白,只是觉得神奇,所以下面的第2个问题,在网上找了好多的资料,当然只是看了之篇文章才解决的,所以觉得这位仁兄的文章很有收藏价值,特此转载一下,现在之些是我的废话,下面的是转封不动的转载,感谢!!!!!
这几天小弟在学习RMI, 也碰到了一些头疼的问题!!!
万事开头难嘛, 好歹现在已经运行起来了, 写写总结, 留作以后学习!!
书目:<Java网络高级编程> 作者 殷兆麟, 张永平, 姜淑娟,
源码:第2章 Java RMI 技术 中的 例子
(书中的说明实在简单, 还有几处错误)
先说明一下系统环境:
操作系统: windows 2003 server
安装与java相关的有 JDK. 和 Oracle9i,
因为装有Ghost, 所以常常还原.
最终的文件目录如下:
C:.
│ tree.txt
│
├─client
│ UpperClient.class
│ UpperImpl_Stub.class
│ Upper.class
│ RMIpolicy1.policy
│
└─serv
Upper.java
UpperImpl.java
UpperClient.java
Upper.class
UpperImpl.class
UpperImpl_Stub.class
RMIpolicy1.policy
遇到的问题有:
1> 起初启动 rmiregistry 时报告Warning;
C:/> rmigistry
Warning: JIT compiler "symcjit" not found. Will use interpreter.
原因:
因为用Ghost还原系统后忘记了将JDK的bin路径设置到系统path环境变量中, 故找不到所需程序而发出警告.
其实在这里使用的是Oracle的 rmiregistry.exe 程序, 在以下的问题中你会发现其他与 rmiregistry.exe 相关
的错误.
解决:
将JDK的bin目录添加到 系统 path 变量中
2> 启动服务器端时报告错误:
错误一:
C:/serv> java -Djava.security.policy=file:./RMIpolicy1.policy -Djava.rmi.server.codebase=file:./ UpperImpl
Result errors is:
java.rmi.ServerException: Server RemoteException; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excepti
on is:
......
原因:
Oracle9i把自己的bin路径添加到了系统path的最前端, 因而可以找到 Oracle 的 rmiregistry.exe,
而不是JDK的 rmiregistry.exe; 因而会执行错误,它和JDK的比较如下:
oracle的rmiregistry,大小为:6144字节
jdk1.4的rmiregistry,大小为:28775 字节
解决:
将所有与 Oracle 相关的 path 变量 移动到 path 变量的末尾, 将 JDK的bin路径移动到 path 变量的最前端
(警告: 未测试这样作对 Oracle 系统会带来什么样的影响)
错误二:
C:/serv> java -Djava.security.policy=file:./RMIpolicy1.policy -Djava.rmi.server.codebase=file:./ UpperImpl
RMIserver erroraccess denied (java.net.SocketPermission 127.0.0.1:1099 conne
esolve)
java.security.AccessControlException: access denied (java.net.SocketPermissi
27.0.0.1:1099 connect,resolve)
......
原因:
没有设置 classpath, 且文件 RMIpolicy1.policy 的内容不对
原内容为:
grant{
permission java.security.ALLPermission;
}
这样并不使我得程序运行成功
解决:
更改 RMIpolicy1.policy 内容为:
grant {
permission java.net.SocketPermission "*:1024-65535", "accept,connect,listen,resolve"; //(1.1)
permission java.net.SocketPermission "*:80", "accept,connect,listen,resolve"; //(1.2)
permission java.security.ALLPermission;
};
或者配置你的$JRE_PATH/lib/security/java.policy
其中加入如下两行:
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
(如果你按照第二种方法改动的话, 恐怕不会遇到下面的错误, 仅仅是猜测而已)
3> 启动客户机时有错误:
C:/client> java UpperClient
RMI exception : access denied (java.net.SocketPermission 127.0.0.1:1099 connect,
resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 1
27.0.0.1:1099 connect,resolve)
....
原因:
UpperClient.class并不是 applet , 而是 application, 又因为 RMI 有安全限制, 所以需要在客户端
使用 policy 策略文件.
解决:
将服务器目录下的 RMIpolicy1.policy 文件拷贝到 客户端目录并使用如下命令:
C:/client> java -Djava.security.policy=file:./RMIpolicy1.policy UpperClient
btpka3@163.com
2006-5-16
资料参考:
http://www.itpub.net/142217.html
配置你的$JRE_PATH/lib/security/java.policy
其中加入如下两行:
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
然后你再试试看,ok?
http://202.102.240.73/java/javaweb/linuxjava/cjdk1_2-doc-zh/jdk1.2/zh/docs/guide/rmi/getstart.doc.html
注册服务程序的缺省运行端口为 1099。要在其它端口上启动注册服务程序,可利用命令行指定端口号。
例如,要在 Windows NT 系统上从端口 2001 启动注册服务程序:
start rmiregistry 2001
如果注册服务程序是在缺省端口以外的端口运行,则需要在名称中指定端口号。当调用注册服务程序时,
该名称将传给 java.rmi.Naming 类基于 URL 的方法。例如在 Hello World 示例中,如果注册服务
程序在端口 2001 上运行,则将 HelloServer 的 URL 绑定到远程对象引用所需的调用为:
Naming.rebind("//myhost:2001/HelloServer", obj);
http://ehot.blogdriver.com/ehot/455591.html
因为rmi有安全限制,所以在客户端必须建立一个策略文件
http://www.javaworld.com.tw/jute/post/print?bid=5&id=23374
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/goleagle/archive/2009/04/25/4107853.aspx
开发一直用的是Ubuntu系统,很喜欢这个系统,部分原因是因为它的特效做的很炫,当然更大的原因是对开源社区的尊敬和喜爱,因为真的能学到很多的东西。不过用Ubuntu的时候,发现用sudo apt-get install sun-java5-jdk之后,不用设置JAVA、CLASSPATH等环境变量也可以真接进行编译和运行程序,具体的原因不明白,只是觉得神奇,所以下面的第2个问题,在网上找了好多的资料,当然只是看了之篇文章才解决的,所以觉得这位仁兄的文章很有收藏价值,特此转载一下,现在之些是我的废话,下面的是转封不动的转载,感谢!!!!!
这几天小弟在学习RMI, 也碰到了一些头疼的问题!!!
万事开头难嘛, 好歹现在已经运行起来了, 写写总结, 留作以后学习!!
书目:<Java网络高级编程> 作者 殷兆麟, 张永平, 姜淑娟,
源码:第2章 Java RMI 技术 中的 例子
(书中的说明实在简单, 还有几处错误)
先说明一下系统环境:
操作系统: windows 2003 server
安装与java相关的有 JDK. 和 Oracle9i,
因为装有Ghost, 所以常常还原.
最终的文件目录如下:
C:.
│ tree.txt
│
├─client
│ UpperClient.class
│ UpperImpl_Stub.class
│ Upper.class
│ RMIpolicy1.policy
│
└─serv
Upper.java
UpperImpl.java
UpperClient.java
Upper.class
UpperImpl.class
UpperImpl_Stub.class
RMIpolicy1.policy
遇到的问题有:
1> 起初启动 rmiregistry 时报告Warning;
C:/> rmigistry
Warning: JIT compiler "symcjit" not found. Will use interpreter.
原因:
因为用Ghost还原系统后忘记了将JDK的bin路径设置到系统path环境变量中, 故找不到所需程序而发出警告.
其实在这里使用的是Oracle的 rmiregistry.exe 程序, 在以下的问题中你会发现其他与 rmiregistry.exe 相关
的错误.
解决:
将JDK的bin目录添加到 系统 path 变量中
2> 启动服务器端时报告错误:
错误一:
C:/serv> java -Djava.security.policy=file:./RMIpolicy1.policy -Djava.rmi.server.codebase=file:./ UpperImpl
Result errors is:
java.rmi.ServerException: Server RemoteException; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excepti
on is:
......
原因:
Oracle9i把自己的bin路径添加到了系统path的最前端, 因而可以找到 Oracle 的 rmiregistry.exe,
而不是JDK的 rmiregistry.exe; 因而会执行错误,它和JDK的比较如下:
oracle的rmiregistry,大小为:6144字节
jdk1.4的rmiregistry,大小为:28775 字节
解决:
将所有与 Oracle 相关的 path 变量 移动到 path 变量的末尾, 将 JDK的bin路径移动到 path 变量的最前端
(警告: 未测试这样作对 Oracle 系统会带来什么样的影响)
错误二:
C:/serv> java -Djava.security.policy=file:./RMIpolicy1.policy -Djava.rmi.server.codebase=file:./ UpperImpl
RMIserver erroraccess denied (java.net.SocketPermission 127.0.0.1:1099 conne
esolve)
java.security.AccessControlException: access denied (java.net.SocketPermissi
27.0.0.1:1099 connect,resolve)
......
原因:
没有设置 classpath, 且文件 RMIpolicy1.policy 的内容不对
原内容为:
grant{
permission java.security.ALLPermission;
}
这样并不使我得程序运行成功
解决:
更改 RMIpolicy1.policy 内容为:
grant {
permission java.net.SocketPermission "*:1024-65535", "accept,connect,listen,resolve"; //(1.1)
permission java.net.SocketPermission "*:80", "accept,connect,listen,resolve"; //(1.2)
permission java.security.ALLPermission;
};
或者配置你的$JRE_PATH/lib/security/java.policy
其中加入如下两行:
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
(如果你按照第二种方法改动的话, 恐怕不会遇到下面的错误, 仅仅是猜测而已)
3> 启动客户机时有错误:
C:/client> java UpperClient
RMI exception : access denied (java.net.SocketPermission 127.0.0.1:1099 connect,
resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 1
27.0.0.1:1099 connect,resolve)
....
原因:
UpperClient.class并不是 applet , 而是 application, 又因为 RMI 有安全限制, 所以需要在客户端
使用 policy 策略文件.
解决:
将服务器目录下的 RMIpolicy1.policy 文件拷贝到 客户端目录并使用如下命令:
C:/client> java -Djava.security.policy=file:./RMIpolicy1.policy UpperClient
btpka3@163.com
2006-5-16
资料参考:
http://www.itpub.net/142217.html
配置你的$JRE_PATH/lib/security/java.policy
其中加入如下两行:
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
然后你再试试看,ok?
http://202.102.240.73/java/javaweb/linuxjava/cjdk1_2-doc-zh/jdk1.2/zh/docs/guide/rmi/getstart.doc.html
注册服务程序的缺省运行端口为 1099。要在其它端口上启动注册服务程序,可利用命令行指定端口号。
例如,要在 Windows NT 系统上从端口 2001 启动注册服务程序:
start rmiregistry 2001
如果注册服务程序是在缺省端口以外的端口运行,则需要在名称中指定端口号。当调用注册服务程序时,
该名称将传给 java.rmi.Naming 类基于 URL 的方法。例如在 Hello World 示例中,如果注册服务
程序在端口 2001 上运行,则将 HelloServer 的 URL 绑定到远程对象引用所需的调用为:
Naming.rebind("//myhost:2001/HelloServer", obj);
http://ehot.blogdriver.com/ehot/455591.html
因为rmi有安全限制,所以在客户端必须建立一个策略文件
http://www.javaworld.com.tw/jute/post/print?bid=5&id=23374
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/goleagle/archive/2009/04/25/4107853.aspx
相关文章推荐
- 几个常见笔试问题的总结
- 最近在SPARK上定位的几个内存泄露问题总结
- 最近在SPARK上定位的几个内存泄露问题总结
- PHP Header用于页面跳转要注意的几个问题总结
- 【项目总结(一)】---视频摘要matlab的程序实现几个问题的总结
- 总结:PHP值得注意的几个问题
- 昨天弄android 碰到的几个问题总结
- Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结
- JAVA-近日遇到的java的日期时间类型的几个问题总结
- 辩护技巧总结——律师在刑事辩护中应注意的几个问题 z
- 几个需要总结的问题
- 总结几个问题
- 最近用了IE6下的滤镜,遇到的几个问题总结:
- 面试中几个基本的重要问题总结
- maven几个问题总结
- 关于文件下载的几个问题总结
- 关于“foreach循环”中遇到的几个问题总结
- 转:Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结
- tms320f28335在制板过程中几个问题总结
- 日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName