使用 JavaRMI 步骤及Stub not found 等问题解决方法

8 篇文章 0 订阅

转载请表明出处: http://blog.csdn.net/jiangsq12345

 

对JavaRMI的介绍我就省略了,本文主要是帮助大家解决一个常见的在运行RMI过程中出现的烦人Exception(特别是Stub not found)。

 

开始前先提醒几点:

1对于.编写代码,我想大家差不多都用的是Eclipse这个IDE,但是对于运行RMI用IDE反而麻烦,所以先做好用命令编译运行java程序的准备 (一般要3个命令窗口,分别是服务器客户端 +RMI注册程序rmiregistry

2.网上有很多教程是写一部分代码编译最后再运行,而我觉得编写代码需要连贯性,因此我提倡先写代码,然后运行RMI; j建议大家先从最简单的例子开始:

  4个类(3个在服务器端,1个在客户端); 将这3个类放在同一个包下面,或者如果你不太懂包的含义干脆就默认不用包

 

先了解一下RMI的大致步骤:

1. 创建远程接口及声明远程方法(HelloInterface.java)
2. 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)

3. 客户端查找远程对象,并调用远程方法(HelloClient)
4. 启动RMI注册服务,并注册远程对象(HelloServer.java)
5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用

 

代码参考 http://topic.csdn.net/u/20090306/22/060e1a70-8d4a-47e9-987c-11637d6d7e7f.html ,我省略

 

我们重点来说一下编译和运行中的步骤及注意点:

假设我们代码的结构是这样的

 +projet

    +src

      +test(包)

         - HelloInterface.java

                                    - Hello.java

                                    - HelloServer.java

         -HelloClient.java

 


1. 编译代码

  进入到 ....../workspace/projet/src 文件夹下 (省略号表示你的系统的绝对路径),先给环境变量加一条默认的classpath,

   Linux下: export CLASSPATH='....../workspace/projet/src ';

             Windows 下可以考虑用手动右击我的电脑手动设置

  然后 用命令(前提是你的电脑已经设置好java虚拟机的路径,否则先把这个设置好):

   $Javac *.java

 2. 用RMIC生成一个stub类

  命令(注意到包与类名用. 连接,而且不用.class):

           $rmic test.Hello

 3. 运行rmiregistry,

     用另一个窗口运行命令:

          $rmiregistry  

 4. 运行服务器(我记得早些版本不用再设置路径就可以直接找到stub的,但是现在好像不行了,不管怎么样加个路径中没有错的)

  要在....../workspace/projet/src目录下

    $java  -Djava.rmi.server.codebase=file:/....../workspace/projet/src/  test.HelloServer

 5. 运行客户端

  要在....../workspace/projet/src目录下

    $java test.HelloClient

 

 如果没有其他意外的话,应该可以看到helloworld了。如还有问题可以给在我留言

  

 

注:

1. 用RMI传递对象时,必须将对象序列化

 2. rmiregistry  默认端口是1099,因此注意服务器端发布服务是端口必须要于此端口一致,否则无法完成注册;会有Connection refuse的exception

 3. 如果项目比较大,代码大时,可以用Ant , 例子

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值