这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。
1. 这里是基于JDK1.5的,节省了繁琐的手工编译(生成桩和骨架)。不像1.4之前的RMI。
2. 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,而不是同一个package下面。是真正的分布式。
3. 这里不过多阐述原理,这只是一个Hello World!!
好,以下是步骤:
1. 在Eclipse里面创建一个server 端的project。然后,创建一个接口,这个接口是你要向client端开放的方法定义。它叫做:UserManagerInterface,而且必须继承Remote接口。
01.package dataserver.rmi.stub; 02. 03.import java.rmi.Remote; 04.import java.rmi.RemoteException; 05. 06.import dataserver.rmi.bean.Account; 07. 08.public interface UserManagerInterface extends Remote{ 09. public String getUserName() throws RemoteException; 10. public Account getAdminAccount() throws RemoteException; 11.}
2. 为了证明RMI中,“面向对象”或者是“无缝传递JAVA Object”是何等简单,我们需要定义一个Account类,该类是一个Bean,必须实现implements Serializable序列化接口。这是一个可以在client和server传输的可序列化对象。
01.package dataserver.rmi.bean; 02. 03.import java.io.Serializable; 04. 05.public class Account implements Serializable,Cloneable{ 06. 07. /** 08. * 09. */ 10. private static final long serialVersionUID = -1858518369668584532L; 11. private String username; 12. private String password; 13. 14. public String getUsername() { 15. return username; 16. } 17. public void setUsername(String username) { 18. this.username = username; 19. } 20. public String getPassword() { 21. return password; 22. } 23. public void setPassword(String password) { 24. this.password = password; 25. } 26. 27.}
3. 此时,需要实现你已经开放的接口:
01.package dataserver.rmi; 02. 03.import java.rmi.RemoteException; 04. 05.import dataserver.rmi.bean.Account; 06.import dataserver.rmi.stub.UserManagerInterface; 07. 08.public class UserManagerImpl implements UserManagerInterface { 09. 10. public UserManagerImpl() throws RemoteException { 11. //super(); 12. // TODO Auto-generated constructor stub 13. //UnicastRemoteObject.exportObject(this); 14. } 15. 16. /** 17. * 18. */ 19. private static final long serialVersionUID = -3111492742628447261L; 20. 21. public String getUserName() throws RemoteException { 22. // TODO Auto-generated method stub 23. return "Tommy Lee"; 24. } 25. 26. public Account getAdminAccount() throws RemoteException { 27. // TODO Auto-generated method stub 28. Account account=new Account(); 29. account.setUsername("admin"); 30. account.setPassword("admin"); 31. return account; 32. } 33. 34.}
4. 定义一个主程序入口,注册你已经实现的RMI接口,包括开放端口等。其实很简单:
把我们的接口名称,命名为“userManager”,方便client进行调用
01.package dataserver.entry; 02. 03.import java.rmi.AlreadyBoundException; 04.import java.rmi.RemoteException; 05.import java.rmi.registry.LocateRegistry; 06.import java.rmi.registry.Registry; 07.import java.rmi.server.UnicastRemoteObject; 08. 09.import dataserver.rmi.UserManagerImpl; 10.import dataserver.rmi.stub.UserManagerInterface; 11. 12.public class Entry { 13. 14. public static void main(String []args) throws AlreadyBoundException, RemoteException{ 15. 16. 17. UserManagerImpl userManager=new UserManagerImpl(); 18. UserManagerInterface userManagerI=(UserManagerInterface)UnicastRemoteObject.exportObject(userManager,0); 19. // Bind the remote object's stub in the registry 20. Registry registry = LocateRegistry.createRegistry(2001); 21. registry.rebind("userManager", userManagerI); 22. System.out.println("server is ready"); 23. } 24.}
5. Server端的代码已经全部写完,但是还要把bean类(Account)和接口类(UserMangerInterface)打包成jar,以便可以在下面导入进client端的项目中。
项目--》右键--》导出--》jar--》选择bean和interface--》命名为RmiServerInterface.jar--》finish
6. 开始创建client端的程序。新建一个project。创建完成后,把刚才jar包导入进client的项目中。
7. 导入我们的接口jar以后,可以开始编写一个client端的主程序,并调用server端的方法。
01.package weiblog.rmi; 02.import java.rmi.NotBoundException; 03.import java.rmi.RemoteException; 04.import java.rmi.registry.LocateRegistry; 05.import java.rmi.registry.Registry; 06. 07.import dataserver.rmi.stub.UserManagerInterface; 08. 09.public class Entry2 { 10. 11. public static void main(String []args){ 12. 13. try { 14. Registry registry = LocateRegistry.getRegistry("localhost",2001); 15. UserManagerInterface userManager = (UserManagerInterface) registry.lookup("userManager"); 16. System.out.println(""+userManager.getAdminAccount().getUsername() 17. +userManager.getAdminAccount().getPassword()); 18. } catch (RemoteException e) { 19. // TODO Auto-generated catch block 20. e.printStackTrace(); 21. } catch (NotBoundException e) { 22. // TODO Auto-generated catch block 23. e.printStackTrace(); 24. } 25. 26. } 27.}
8. 启动server端的主程序,然后启动client端的主程序。
server控制台打印:server is ready
client控制台打印:adminadmin
大功告成!!
相关推荐
RMI是基于Java语言编写的一组API,用于开发和维护分布式应用程序。RMI采用三层体系结构,基于C/S模式进行通信,并采用代理来进行客户端和远程对象之间的通信。RMI作为一种远程对象,可以生成客户端和服务器端代理,...
分布式程序设计是现代软件开发中的一个重要领域,它允许在多台计算机之间共享资源和执行任务,从而提高了系统的可扩展性和性能。RMI(Remote Method Invocation)是Java平台上的一个核心特性,用于实现分布式计算,...
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...
Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行远程调用。RMI是构建分布式应用的重要工具,特别适合于需要跨网络通信的服务器端和客户端应用...
Java Remote Method Invocation(Java RMI)是Java编程语言中用于在网络间进行远程对象调用的技术。它是Java平台的标准部分,允许程序员在分布式环境中调用对象的方法,就像它们在同一台计算机上一样。Java RMI对于...
【基于JAVA的分布式聊天系统设计】是一个以JAVA编程语言为核心技术构建的聊天应用程序,它采用分布式架构以提高系统的可扩展性和容错性。这个系统设计不仅涵盖了基础的聊天功能,还包括了利用JAVA语言特性和分布式...
Java开发基于rmi的数据库中间件设计源码,并利用中间件建立一个数据库应(Java web项目),分布式对象技术课程实践 主机安装Node.js,并在控制台进入front-end-pages目录下,按顺序执行以下命令运行前端: npm install ...
Java RMI(Remote Method Invocation,远程方法...虽然现代Java开发中,RMI可能不是首选的分布式计算解决方案(例如,Web服务和RESTful API更为流行),但了解RMI的基本工作原理对于理解Java的分布式特性仍然很有价值。
【描述】:本文探讨了在系统异构应用领域如何利用Java RMI进行二次开发,旨在在保留原系统功能的同时,通过Java的更新升级减少工作量,并发挥其在分布式网络应用中的优势。 【标签】:“java” 【主要内容】: 在...
Java RMI 是一种分布式应用程序开发技术,允许对象在不同的 Java 虚拟机(JVM)上调用远程 Java 对象的方法。 Java RMI 的主要特点是使用对象序列化来 marshal 和 unmarshal 参数,不会截断类型,支持真正的面向...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...
### Java RMI 规范详解 ...综上所述,Java RMI作为一种成熟且高效的分布式计算解决方案,在实现远程对象调用的同时,也充分融合了Java语言的特点,为开发者提供了简洁、安全、易于使用的分布式编程体验。
与其他分布式对象技术相比,如CORBA和DCOM,RMI是Java平台的标准组成部分,从JDK 1.1开始就内置于Java虚拟机中。这意味着所有的Java系统可以直接相互通信,而无需额外的协议转换。CORBA,由Object Management Group ...
这个特性使得Java成为开发分布式应用程序的理想选择。下面我们将深入探讨Java RMI及其相关知识点。 1. **RMI概念**: - **远程方法调用**:RMI的核心是远程方法调用,它允许Java对象在不同的JVM之间通信。这涉及将...
RMI是构建在Java对象序列化和网络通信之上的分布式对象系统。这意味着它能够通过网络传输对象,而这些对象在服务器端被创建,在客户端被引用和操作。RMI为Java应用程序提供了一种机制,使得远程对象的调用看起来就像...
Java RMI,全称为Remote Method Invocation,是Java平台上的一个标准API,用于实现分布式计算,使得在不同Java虚拟机(JVM)上的对象能够互相调用方法。这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个...