这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。
1. 这里是基于JDK1.5的,节省了繁琐的手工编译(生成桩和骨架)。不像1.4之前的RMI。
2. 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,而不是同一个package下面。是真正的分布式。
3. 这里不过多阐述原理,这只是一个Hello World!!
好,以下是步骤:
1. 在Eclipse里面创建一个server 端的project。然后,创建一个接口,这个接口是你要向client端开放的方法定义。它叫做:UserManagerInterface,而且必须继承Remote接口。
package dataserver.rmi.stub;
import java.rmi.Remote;
import java.rmi.RemoteException;
import dataserver.rmi.bean.Account;
public interface UserManagerInterface extends Remote{
public String getUserName() throws RemoteException;
public Account getAdminAccount() throws RemoteException;
}
2. 为了证明RMI中,“面向对象”或者是“无缝传递JAVA Object”是何等简单,我们需要定义一个Account类,该类是一个Bean,必须实现implements Serializable序列化接口。这是一个可以在client和server传输的可序列化对象。
package dataserver.rmi.bean;
import java.io.Serializable;
public class Account implements Serializable,Cloneable{
/**
*
*/
private static final long serialVersionUID = -1858518369668584532L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3. 此时,需要实现你已经开放的接口:
package dataserver.rmi;
import java.rmi.RemoteException;
import dataserver.rmi.bean.Account;
import dataserver.rmi.stub.UserManagerInterface;
public class UserManagerImpl implements UserManagerInterface {
public UserManagerImpl() throws RemoteException {
//super();
// TODO Auto-generated constructor stub
//UnicastRemoteObject.exportObject(this);
}
/**
*
*/
private static final long serialVersionUID = -3111492742628447261L;
public String getUserName() throws RemoteException {
// TODO Auto-generated method stub
return "Tommy Lee";
}
public Account getAdminAccount() throws RemoteException {
// TODO Auto-generated method stub
Account account=new Account();
account.setUsername("admin");
account.setPassword("admin");
return account;
}
}
4. 定义一个主程序入口,注册你已经实现的RMI接口,包括开放端口等。其实很简单:
把我们的接口名称,命名为“userManager”,方便client进行调用
package dataserver.entry;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import dataserver.rmi.UserManagerImpl;
import dataserver.rmi.stub.UserManagerInterface;
public class Entry {
public static void main(String []args) throws AlreadyBoundException, RemoteException{
UserManagerImpl userManager=new UserManagerImpl();
UserManagerInterface userManagerI=(UserManagerInterface)UnicastRemoteObject.exportObject(userManager,0);
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.createRegistry(2001);
registry.rebind("userManager", userManagerI);
System.out.println("server is ready");
}
}
5. Server端的代码已经全部写完,但是还要把bean类(Account)和接口类(UserMangerInterface)打包成jar,以便可以在下面导入进client端的项目中。
项目--》右键--》导出--》jar--》选择bean和interface--》命名为RmiServerInterface.jar--》finish
6. 开始创建client端的程序。新建一个project。创建完成后,把刚才jar包导入进client的项目中。
7. 导入我们的接口jar以后,可以开始编写一个client端的主程序,并调用server端的方法。
package weiblog.rmi;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import dataserver.rmi.stub.UserManagerInterface;
public class Entry2 {
public static void main(String []args){
try {
Registry registry = LocateRegistry.getRegistry("localhost",2001);
UserManagerInterface userManager = (UserManagerInterface) registry.lookup("userManager");
System.out.println(""+userManager.getAdminAccount().getUsername()
+userManager.getAdminAccount().getPassword());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8. 启动server端的主程序,然后启动client端的主程序。
server控制台打印:server is ready
client控制台打印:adminadmin
大功告成!!
原文转自:http://6221123.blog.51cto.com/6211123/1112633
相关推荐
本篇将深入探讨如何利用JDK 1.5版本搭建一个基本的分布式Java RMI程序。RMI是Java在分布式计算领域的重要工具,它简化了网络应用的开发,使得开发者可以像操作本地对象一样操作远程对象。 首先,我们需要了解RMI的...
RMI是基于Java语言编写的一组API,用于开发和维护分布式应用程序。RMI采用三层体系结构,基于C/S模式进行通信,并采用代理来进行客户端和远程对象之间的通信。RMI作为一种远程对象,可以生成客户端和服务器端代理,...
Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行远程调用。RMI是构建分布式应用的重要工具,特别适合于需要跨网络通信的服务器端和客户端应用...
总之,Java RMI是构建分布式Java应用的重要工具,它简化了网络通信的复杂性,让开发者可以专注于业务逻辑,而不是底层网络实现。虽然现代的Java框架如Spring、EJB等提供了更高级别的分布式服务,但理解RMI的基本原理...
Java RMI对于构建分布式应用程序至关重要,尤其是在服务器端应用、云计算服务以及需要跨网络通信的系统中。 RMI的核心概念包括以下几个方面: 1. **远程接口**:远程接口定义了可以在远程对象上调用的方法。这些...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...
分布式程序设计是现代软件开发中的一个重要领域,它允许在多台计算机之间共享资源和执行任务,从而...通过深入学习和实践,你可以更好地掌握RMI在分布式系统中的运用,为构建高效、可扩展的Java应用程序打下坚实基础。
此外,RMI还可以与EJB(Enterprise JavaBeans)、JMS(Java Message Service)等企业级技术结合,构建更复杂的分布式应用程序。虽然现代Java开发中,RMI可能不是首选的分布式计算解决方案(例如,Web服务和RESTful ...
Java RMI,全称为Remote Method Invocation,是Java平台上的一个标准API,用于实现分布式计算,使得在不同Java虚拟机(JVM)上的对象能够互相调用方法。这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个...
Java RMI 是一种分布式应用程序开发技术,允许对象在不同的 Java 虚拟机(JVM)上调用远程 Java 对象的方法。 Java RMI 的主要特点是使用对象序列化来 marshal 和 unmarshal 参数,不会截断类型,支持真正的面向...
与其他分布式对象技术相比,如CORBA和DCOM,RMI是Java平台的标准组成部分,从JDK 1.1开始就内置于Java虚拟机中。这意味着所有的Java系统可以直接相互通信,而无需额外的协议转换。CORBA,由Object Management Group ...
Java远程方法调用(Java RMI)是Java平台的标准组件之一,允许开发者创建分布式应用程序。在Java RMI中,一个对象可以调用另一个Java对象的方法,该对象可以运行在不同的Java虚拟机(JVM)上,甚至在不同的主机上。...
【基于JAVA的分布式聊天系统设计】是一个以JAVA编程语言为核心技术构建的聊天应用程序,它采用分布式架构以提高系统的可扩展性和容错性。这个系统设计不仅涵盖了基础的聊天功能,还包括了利用JAVA语言特性和分布式...
Java Platform, Standard Edition 的 Java Remote Method Invocation(Java RMI)允许您创建分布式应用程序。Java RMI 允许对象在另一个 Java Virtual Machine(JVM)上调用远程 Java 对象的方法,可能位于不同的...
这个特性使得Java成为开发分布式应用程序的理想选择。下面我们将深入探讨Java RMI及其相关知识点。 1. **RMI概念**: - **远程方法调用**:RMI的核心是远程方法调用,它允许Java对象在不同的JVM之间通信。这涉及将...
Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,实现远程方法调用。本压缩包文件"rmi-code"包含了一个完整的RMI测试代码示例,适合在Linux和...
Java Remote Method Invocation(Java RMI)是 Java 平台提供的一种分布式应用程序开发技术,允许对象在不同的 Java 虚拟机(JVM)上调用远程 Java 对象的方法。RMI 使用对象序列化来 marshal 和 unmarshal 参数,...