远程方法调用(Remote Method Invocation,RMI)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
一个正常工作的RMI系统由下面几个部分组成:·
.远程服务的接口定义
·远程服务接口的具体实现
·桩(Stub)和框架(Skeleton)文件
·一个运行远程服务的服务器
·一个RMI命名服务,它允许客户端去发现这个远程服务
·类文件的提供者(一个HTTP或者FTP服务器)
·一个需要这个远程服务的客户端程序
要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成占位程序和骨干网(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
1. 创建远程接口及声明远程方法(TimerServiceInterface.java)
package com.weiythi.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ITimeService extends Remote{
public long getTime() throws RemoteException;
}
2. 实现远程接口及远程方法(继承UnicastRemoteObject)TimerService.java
package com.weiythi.service;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class TimerService extends UnicastRemoteObject implements ITimeService{
private static final long serialVersionUID = 1L;
/**
* 必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常
*/
public TimerService() throws RemoteException{
}
/**
* 接口方法的实现
*/
@Override
public long getTime() throws RemoteException {
return System.currentTimeMillis();
}
}
3. 启动RMI注册服务,并注册远程对象
方法一,打开一个DOS窗口,使用rmic命令
rmic com.weiythi.service.TimerService
start rmiregistry
注册远程对象(HelloServer.java)
package com.weiythi.service;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
public class StartTimerServer {
public static void main(String[] args){
try {
TimerService timerservice=new TimerService();
//把TimerService注册到RMI注册服务器上,命名为b1
Naming.bind("b1", timerservice);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AlreadyBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
方法二:
package com.weiythi.service;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class StartTimerServer {
public static void main(String[] args){
try {
//启动RMI注册服务
//也可以通过命令 start rmigesitry启动
//这里用这种方式避免了再打开一个DOS窗口
//而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个stub类为它所用
LocateRegistry.createRegistry(1099);
TimerService timerservice=new TimerService();
//把TimerService注册到RMI注册服务器上,命名为b1
Naming.bind("b1", timerservice);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AlreadyBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4. 客户端查找远程对象,并调用远程方法(GetTimerService.java)package com.weiythi.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import com.weiythi.service.ITimeService;
public class GetTimerService {
public static void main(String[] args){
try {
ITimeService time=(ITimeService) Naming.lookup("rmi://localhost/b1");
System.out.println("the time is:"+time.getTime());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
### 初识JVM – JVM概念 #### 一、JVM简介 JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而...
初识CommonsCollectionsJava安全漫谈 - 10.用TransformedMap编写真正的POCJava安全漫谈 - 11.LazyMap详解Java安全漫谈 - 12.简化版CommonsCollections6Java安全漫谈-番外篇1. BCEL ClassLoader去哪了?Jav
1 初识Applet和Servlet网络通信 11. 2. 2 Applet和Servlet之间传递对象 11. 3 Applet和Servlet之间实现远程方法调用 11. 3. 1 远程方法调用中的设计模式 11. 3. 2 设计应用程序子协议 11. 3. 3 远程方法调用的...
#### 一、初识EJB EJB(Enterprise JavaBeans)是Java EE平台中用于开发企业级应用的重要组件模型。它为开发者提供了构建可伸缩、健壮的企业应用的框架。自1998年发布以来,EJB已经经历了多个版本的迭代,其中最...
初识分布式架构与意义 如何把应用从单机扩展到分布式 大型分布式架构演进过程 分布式架构设计 主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么...
#### 一、初识PowerPoint 2010 ##### 1.1 PowerPoint 2010新增功能 PowerPoint 2010作为Microsoft Office 2010套件的一员,相较于其前一代产品PowerPoint 2007,新增了多项实用功能: - **强大的视频和图像处理...