`
hubin
  • 浏览: 9115 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Eclipse Java RMI 入门

阅读更多
    最近在网上看了一些关于RMI的相关内容,可是在写一个例子的时候总是不成功.经过一段时间的改进.总算是成功运行.在这在里,把我的例子大家分想一下.
    在开始写例子之前还是先,了解一下RMI的相关知识.
什么是RMI
    远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,
使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程
序语法规则和在本地机上对象间的方法调用的语法规则一样。

优点
这种机制给分布计算的系统设计、编程都带来了极大的方便。
只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。
任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。

1、面向对象:
RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。
也就是说,可以将类似Java哈西表这样的复杂类型作为一个参数进行传递。

2、可移动属性:
RMI可将属性从客户机移动到服务器,或者从服务器移动到客户机。

3、设计方式:
对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。
如果用户能够传递属性,那么就可以在自己的解决方案中使用面向对象的设计方式。
所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象——包括实现和类型
——就会失去设计方式上所提供的优点。

4、安全性:
RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。
RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全管理程序。
5、便于编写和使用
RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。
远程接口实际上就是Java接口。
为了实现RMI的功能必须创建远程对象任何可以被远程调用的对象必须实现远程接口。但远程
接口本身并不包含任何方法。因而需要创建一个新的接口来扩展远程接口。
新接口将包含所有可以远程调用的方法。远程对象必须实现这个新接口,由于新的接口扩展了
远程接口,实现了新接口,就满足了远程对象对实现远程接口的要求,所实现的每个对象都将
作为远程对象引用。

个人总结:
    RMI说白了,就是提供了一种远程的方法调用。 这种调用简单方便,可以传递复杂java对象。现在流行的j2ee中的EJB的底层实现技术就是RMI,EJB的调用就是经过封装的,更高级的RMI调用。


下面我们就来写一个RMI的程序:

一.创建RMI程序的6个步骤:
1.定义一个远程接口
2.实现这个远程接口
3.开发服务器
4.开发客户机
5.生成存根和基干,启动RMI注册表、服务器和客户机 (可在dos中用rmic生成存根和基干)

二. 程序详细说明


Eclipse RMI插件下载地址是http://www.genady.net/rmi/v16/
这里下载的是v1.6.5 适用于Eclipse 3.1.x
下载解压后将features和 plugins分别拷到eclipse的对应文件夹中

先建一个java工项"rmiDemo1"(我的是I:\codeDemo\elispe\rmidemo1\rmiDemo1,在这里要特别注意的存放目录)

1.定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。

import java.rmi.Remote;
import java.rmi.RemoteException;


public interface SayHello extends Remote {//需要从Remote继承
  public String sayHello(String info)throws RemoteExceptio //需要抛出remote异常n;

}


2、定义一个实现该接口的类。

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class SayHelloImpl extends UnicastRemoteObject implements SayHello {

        protected SayHelloImpl() throws RemoteException {
                super();
                // TODO Auto-generated constructor stub
        }

    public String sayHello(String info) throws RemoteException {
        return "hello="+info;
    }

}

实现接口的类必须继承UnicastRemoteObject类。
扩展java.rmi.server.UnicastRemoteObject
UnicastRemoteObject顾名思义,是让客户机与服务器对象实例建立一对一的连接。

3.生成程序的根文件
在rmiDemo1上单击右键,选择RMI--Enable Stubs Generation,自动会在bin/文件夹中生成SayHelloImpl_Stub.class。

4.创建服务器类

import java.rmi.*;
import java.net.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class SayRmiServer {
    public SayRmiServer() {
    }

    public static void main(String args[]) throws RemoteException, MalformedURLException {
                SayHelloImpl add = new SayHelloImpl();
                Naming.rebind("addnumbers", add);
        }
}

5.创建Client类

import java.rmi.*;
import java.net.*;

/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class SayRmiClient {
    public SayRmiClient() {
    }
    public static void main(String args[]) throws RemoteException,
            MalformedURLException, NotBoundException {
        String url = "rmi://127.0.0.1/addnumbers";
        SayHello add = (SayHello) Naming.lookup(url);
        String result = add.sayHello("hubin");
        System.out.println(result);
    }

}
三.运行调试项目


       在运行之前需要进行一下设置,否则,会提示错误信息,说找不到stub类。


       1、启动RMIRegistry


       Eclipse菜单window->show view->others,在弹出菜单中选择RMI Views->RMI Registry Inspector,这是会多出来一个窗口,这里可以显示已经注册的RMI应用。


       点击工具条上的RMI Plugin图标,在菜单中选择Start Local Registry。

在  运行-->cmd--->cd 进入你项目生成class文件所在目录,如我的是(  cd I:\codeDemo\elispe\rmidemo1\rmiDemo1\bin,在当前目录下,运行rmiRegistry命令),如果不在存处注册,你的服务会总是联结不上的.目前我还没有找到好的方法来设置,如哪位有好的方法可以告诉我.邮箱:live525@126.com



       注意这个只需要启动一次,除非你把它关掉。
       2、配置运行RMI服务


       右键点击左边树中的RMI_Server.java文件,菜单Debug As ->RMI Application。在弹出对话框中找到RMI Properties标签页。


       这时这里前两项显示红色。


       选中java.security.police项的value框,点击选择按钮会出现文件选择对话框,我们这里设置成C:\Java\jre1.5.0_05\lib\security\java.security。就是jre的安全策略配置文件,要选择成泥当前用的jdk的侧略文件。


       选中第二项java.rmi.server.codebase的value项,这里选择编译后类包所在的文件夹。点击选择按钮->add按钮->pick from workspace,选择当前工程RMITest的bin文件夹。这里是file:/I:\codeDemo\elispe\rmidemo1\rmiDemo1\bin。


       点击apply按钮。


       点击debug按钮。

4.单击RmiServer选择Run as--RMI Application
5.单击RmiClient选择Run as--Java Application








分享到:
评论

相关推荐

    原创的JavaRMI项目

    这是原创的最简单的Java RMI入门项目,内含二个Eclipse项目,一是服务器端,二是客户端。非常简单,只看其中的注释就能理解(当然先要知道什么是RMI了),只供入门用。 这是用Java 1.7编辑的,如果你用的版本低,则...

    java高手真经 光盘源码

    javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java...

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java...

    Java高手真经(编程基础卷)光盘全部源码

    javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型...

    Java核心编程技术源码

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    Java高手真经 编程基础卷.part1.rar

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    Java高手真经 编程基础卷.part3.rar

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    Java高手真经 编程基础卷.part4.rar

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    Java高手真经 编程基础卷.part2.rar

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    Java项目开发与毕业设计指导

    安装JDK,并正确配置环境变量(如果有疑问,可以参考任何一本java入门书籍)。打开Eclipse(可以到http://www.eclipse.org/现在官方最新版,Eclipse本身是免费软件),导入ch01下的java项目,然后保存、运行game....

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

Global site tag (gtag.js) - Google Analytics