`
usiboy
  • 浏览: 27323 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Eclipse编写Java RMI程序详解

阅读更多

      Java远程方法调用 ,即Java RMI (Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用应用程序编程接口 。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

      Java RMI极大地依赖于接口。在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。这样一来,程序员只需关心如何通过自己的接口句柄发送消息。(此段摘自Wiki)

      RMI其实是一个远程代理模式,程序员在本地调用的代码实质上是交给了服务器处理接口的请求,并将结果返回。对于程序而言看到的如同在本地调用接口一样的效果。

      在这里,我将重点结合Eclipse来讲解如何编写Java RMI。

      在讲解之前我们需要以下几个工具 :

 

      Eclipse 3.0 or above

      RMIC Eclipse Plugin -- 此工具用来生成RMI的Stub类,下载地址:https://rmic-eclipse-plugin.dev.java.net/

 

      对于需要访问传入到接口的参数的对象都应使他成为一个序列化的对象,即实现Serializable接口,否则数据是无法传入到服务器中。接下来开始代码的讲解

 

一、首先编写一个接口中的参数类型,此类型也是一个接口

package remote.test;

public interface HelloTask {
	public String execute();
}
 

二、实现这个接口,记住,实现的时候一定要实现Serializeable接口

package remote.test;

import java.io.Serializable;

public class HelloTaskImpl implements HelloTask,Serializable{
	private static final long serialVersionUID = 1L;

	public String execute() {
		return "Hello World";
	}
}

 三、编写Remote接口

package remote.test;

import java.rmi.RemoteException;

public interface IHello extends java.rmi.Remote{
	String say(HelloTask task) throws RemoteException;
}

 四、编写Server类

package remote.test.server;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import remote.test.IHello;
import remote.test.HelloTask;

public class HelloServer extends java.rmi.server.UnicastRemoteObject implements
		IHello{
	private static final long serialVersionUID = 2279096828129284306L;

	public HelloServer() throws RemoteException {
		super();
	}

	public String say(HelloTask task) throws RemoteException {
		String result = task.execute();
		System.out.println("execute say,task.execute : " + result);
		return result;
	}

	public static void main(String[] args) {
		try {
			HelloServer h = new HelloServer();
			Registry registry = LocateRegistry.createRegistry(2500);
			registry.bind("hello", h);
			System.out.println("Start...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


 您看到在HelloServer将会实现IHello中的接口,并执行HelloTask的接口,HelloTask是从客户端那边传送过来,所以执行任务的逻辑将在say方法中由服务端来实现,客户端是不知道服务端如何执行这个HelloTask,他只需要知道执行的结果。

对于服务端代码的编写,这里需要注意的是Registry,Registry是由Java Security管理,如果没有权限getRegistry将会报错,如果使用如下方法获得

Registry registry = LocateRegistry.getRegistry(2500);

 就需要注意,在Jar中需要有个*.policy策略文件,如果没有设置这些将会抛出"Access Denied "异常。此方式的编写这里不详细讲解,请搜索网络需找资料。

接下来registry只需要绑定一个名字空间和对象即可开启2500端口开始监听。

 

五、生成Stub对象

      在java环境中生成这个对象需要使用rmic命令以及rmiregistry,这两个命令的用法其实也比较简单,但是无论如何使用起来还是会觉得有点麻烦,在Spring中也有rmi的功能,其实他也就是包装了一下rmi的类,但是他最大的优点在于它可以自动生成这些托管类,那么使用RMIC - Eclipse - Plugin也可以帮助我们自动生成。

      装好RMIC - Eclipse之后,对着项目的根目录点击右键,您将会看到"Rmic Marcar/Desmarcar para Auto-Gerar Stubs "的选项,点击它,这时你将会在Bin文件夹下看到Hello_Stub 类,如果有接口继承了Remote 类,那么他将会自动搜索并生成。

 

六、编写Client类

package remote.test.client;

import java.rmi.Naming;
import remote.test.HelloTask;
import remote.test.HelloTaskImpl;
import remote.test.IHello;

public class HelloClient {
	public static void main(String[] args) {
		try {
			IHello hi = (IHello) Naming.lookup("rmi://127.0.0.1:2500/hello");

			HelloTask task = new HelloTaskImpl();
			for (int i = 0; i < 10; i++) {
				System.out.println(hi.say(task));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 

在Client类中,首先需要使用JNDI的Naming来需找服务,并从服务中返回对象。URL的格式可以参考JDK中RMI URL。

七、运行

先运行Server类,成功以后,运行Cient类,您将会看到Server类接收到Client的请求,并将请求打印出来,同时Client类获得Server返回的结果,并打印出来。

4
0
分享到:
评论
3 楼 TheMatrix 2014-06-05  
racnow 写道
引用

   在java环境中生成这个对象需要使用rmic命令以及rmiregistry,这两个命令的用法其实也比较简单,但是无论如何使用起来还是会觉得有点麻烦,在Spring中也有rmi的功能,其实他也就是包装了一下rmi的类,但是他最大的优点在于它可以自动生成这些托管类,那么使用RMIC - Eclipse - Plugin也可以帮助我们自动生成。

      装好RMIC - Eclipse之后,对着项目的根目录点击右键,您将会看到"Rmic Marcar/Desmarcar para Auto-Gerar Stubs "的选项,点击它,这时你将会在Bin文件夹下看到Hello_Stub 类,如果有接口继承了Remote 类,那么他将会自动搜索并生成。


jdk 5开始就不需要自己生成这些东西了,不要以讹传讹哦


是的,只要把server端的代码打个jar放在client的工程即可。
2 楼 racnow 2010-07-10  
引用

   在java环境中生成这个对象需要使用rmic命令以及rmiregistry,这两个命令的用法其实也比较简单,但是无论如何使用起来还是会觉得有点麻烦,在Spring中也有rmi的功能,其实他也就是包装了一下rmi的类,但是他最大的优点在于它可以自动生成这些托管类,那么使用RMIC - Eclipse - Plugin也可以帮助我们自动生成。

      装好RMIC - Eclipse之后,对着项目的根目录点击右键,您将会看到"Rmic Marcar/Desmarcar para Auto-Gerar Stubs "的选项,点击它,这时你将会在Bin文件夹下看到Hello_Stub 类,如果有接口继承了Remote 类,那么他将会自动搜索并生成。


jdk 5开始就不需要自己生成这些东西了,不要以讹传讹哦
1 楼 fxyc 2010-05-25  
学习了,谢谢。

相关推荐

    RMI商品管理系统.zip

    《基于RMI的Java商品管理系统实现详解》 在IT领域,远程方法调用(Remote Method Invocation,简称RMI)是Java编程语言中一种强大的分布式计算技术。本项目“RMI商品管理系统”即利用了RMI特性,实现了商品信息的...

    实验2 RMI.doc

    通过本次实验,学生能够深入了解 Java RMI 的工作原理,并能够熟练地使用 RMI 开发简单的分布式应用程序。实验不仅涉及了远程接口的设计与实现,还涵盖了服务器端与客户端程序的编写、编译以及运行过程中的注意事项...

    java应用详解

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。它的设计目标是具有高可移植性、健壮性和安全性,使其能够跨平台运行,从移动设备到大型服务器,都能找到Java的身影。...

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

    11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...

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

    11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...

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

    11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...

    JAVA技术体系

    - **Eclipse IDE**:掌握如何使用Eclipse进行Java程序的编写、调试和部署。Eclipse是一款广泛使用的Java集成开发环境(IDE),支持代码编辑、调试、构建等多种功能。 - **Linux下的Java开发**:在Linux环境下编写和...

    JAVA 调用SAP SOAP webservice.docx

    JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...

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

    11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...

    Eclipse开发Web Service

    ### Eclipse开发Web Service详解 #### 一、理解Web Service与Eclipse Web Service是一种通过网络进行数据交换和服务交互的标准方式,允许不同系统间基于XML的数据通信。Eclipse是一款开源的集成开发环境(IDE),...

    Java WebService 简单实例 方式二(axis1直接调用方式)

    - 在Eclipse或其他IDE中新建一个Java Web项目。 - 配置项目的类路径,添加Axis1相关的库文件。 2. **编写服务接口**: - 定义一个接口,例如`HelloWorldService`,其中包含一个方法`sayHello(String name)`。 -...

    图解eclipse+myelcipse开发EJB2.0

    【EJB2.0开发详解:使用Eclipse和MyEclipse】 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上的一个核心组件,主要用于构建可扩展、安全且可移植的企业级应用。EJB2.0是EJB规范的一个重要版本,它...

    基于JAVA网络远程监控系统软件的实现(源码)

    JAVA远程控制是利用JAVA的RMI(Remote Method Invocation,远程方法调用)或JMX(Java Management Extensions,Java管理扩展)等技术,使得运行在不同计算机上的程序能够相互通信,进行数据交换和操作控制。...

    Java+JDK6学习笔记(PDF版书籍,免费下载)

    - **可移植**:Java程序可以在任何支持JVM的平台上运行,实现了一次编写,到处运行的理念。 - **高性能**:虽然Java最初被认为性能较差,但随着JIT编译器的发展,其执行效率已显著提高。 #### 三、Java的应用平台...

    Java访问c#开发的webservice

    ### Java访问C#开发的Webservice详解 #### 一、引言 在现代软件开发过程中,尤其是对于大型项目而言,采用分布式系统架构已经成为一种常态。分布式应用能够将复杂的业务逻辑分解并部署到不同的服务器上,从而提高...

    java技术体系图

    ### Java技术体系详解 #### 一、Java技术体系概览 Java作为一种广泛使用的编程语言,在IT行业中占有举足轻重的地位。为了帮助那些希望在Java领域发展的技术人员更好地理解和掌握Java的相关知识和技术,本文将根据...

    基于Java的远程视频会议系统(系统+论文).zip

    1. Java技术基础:Java以其“一次编写,到处运行”的特性闻名,具有跨平台性、安全性、稳定性和高性能。在远程视频会议系统中,Java主要负责后台服务的处理,如用户管理、会话管理、数据传输等。 2. Java网络编程:...

    Lunar Eclipse-开源

    Lunar Eclipse 的 RMI 生成插件简化了 RMI 应用程序的开发过程,自动创建远程接口、服务器端实现、客户端存根等必要组件。这极大地减少了手动编写这些代码的时间和可能出现的错误,使得开发者可以更专注于业务逻辑。...

Global site tag (gtag.js) - Google Analytics