您的位置:首页 > 其它

[转]:RMI启动服务出现Stub这个ClassNotFound的解决

2014-03-18 21:37 381 查看

RMI启动服务出现Stub这个ClassNotFound的解决

Posted on 2006-03-01 00:58 云自无心水自闲 阅读(1386) 评论(0)  编辑  收藏 所属分类: Java 


今天一个项目要使用RMI,于是开始写了一个小示例运行一下。

1. 写接口继承Remote,并给出要实现的方法

2. 写一个方法继承UnicastRemoteObject,并实现上面的接口

3. 写Server,进行Naming.rebind

4. 运行rmic(在JDK的bin目录,而不是在JDK\jre\bin目录下)生成Stub。

这中间有一个小麻烦,举例来说如果第2步中的类名是TestObj,放在com.test包中。

那么典型的目录结构是WEB-INF\classes\com\test目录下有一个TestObj.class

这时候需要在WEB-INF\classes目录下运行命令 rmic com.test.TestObj

注意:如何运行的路径和方式不正确的话, 会出现找不到TestObj.class的错误.

5. 写Client端代码,Naming.lookup. 然后调用远程方法。

6. 运行start rmiregistry

7. java com.test.TestObjServer, 这时候出问题了,总是报告说找不到TestObj_Stub.class,奇怪啊,这个Class明明很安静地躺在目录下啊?

经过一番查找,最后目标锁定在java的版本上,因为机器安装了Oracle,而Oracle自带了JDK,而且版本较低,在环境变量中调换了JDK使用的顺序,重新运行命令。

成功了!

8. 生成policy.txt

9. java -Djava.security.policy=policy.txt TestObjClient

得到正确结果!

注意点:

启动server时如果遇到找不到stub问题,原因是rmiregistry找不到stub,而不是java com.Server找不到stub,解决方法,在stub的类同一个目录下启动rmiregistry.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐