`
dchaoxiong
  • 浏览: 182835 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java RMI 基础教程

阅读更多
java创建远程方法调用的步骤如下:

  1. 定义一个扩展远程接口(Remote)的接口,这个接口方法将供给客户端调用,该接口中的每个方法都必须声明抛出RemoteException。
  2. 定义一个实现该接口并扩展了UnicastRemoteObject的类(服务端运行的服务类),这个类将实现给客户端调用的所用方法。
  3. 创建服务端供客户端调用的应用程序。
  4. 创建客户端RMI调用服务端的应用程序。
  5. 启动服务端,再启动客户端,测试是否调用成功。
  6. 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类路径下




我的例子:

package com.diaoge.java.rmi.beans;

import java.io.Serializable;

public class Employees implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -8202439972511838105L;

	private String id;
	private String name;
	
	
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getId() {
		return id;
	}
}



定义供远程调用的接口
package com.diaoge.java.rmi;

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

import com.diaoge.java.rmi.beans.Employees;

public interface RemoteInterface extends Remote{

	public String getServerInfo(int index)throws RemoteException;
	
	public Employees getEmployeesById(String id)throws RemoteException;
}


实现远程接口,定义服务类
package com.diaoge.java.rmi;

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

import com.diaoge.java.rmi.beans.Employees;

public class RemoteInterfaceImpl extends UnicastRemoteObject implements RemoteInterface{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -3491749919079349917L;


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

	@Override
	public Employees getEmployeesById(String id) throws RemoteException {
		Employees employees = new Employees();
		employees.setId(id);
		employees.setName("雕戈_"+id);
		return employees;
	}

	@Override
	public String getServerInfo(int index) throws RemoteException {
		if(index==5)
			throw new RemoteException("远程抛出的异常");
		return "远程方法调用RMI测试程序_"+index;
	}

}


创建服务端应用程序
package com.diaoge.java.rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class RmiServer {
	
	private static final int PORT = 9930;
	
	public static void main(String[] args) {
		try {
			RemoteInterfaceImpl impl = new RemoteInterfaceImpl();
			LocateRegistry.createRegistry(PORT);
			Naming.rebind("//localhost:"+PORT+"/rmitest", impl);
			System.out.println("RMI的服务端已经启动。。。。。");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		
	}
}


创建客户端应用程序
package com.diaoge.java.rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import com.diaoge.java.rmi.beans.Employees;

public class RmiClient {

	public static void main(String[] args) {
		try {
			final RemoteInterface client = (RemoteInterface) Naming.lookup("//192.168.1.101:9930/rmitest");
			new Thread(new Runnable(){

				@Override
				public void run() {					
					Employees emp;
					int index = 0;
					try {
						while(true){
							Thread.sleep(1000);
							emp = client.getEmployeesById(""+(index++));
							System.out.println("ID="+emp.getId());
							System.out.println("Name="+emp.getName());
						}
					} catch (RemoteException e) {
						e.printStackTrace();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				
			}).start();
			
			new Thread(new Runnable(){

				@Override
				public void run() {					
					int index = 0;
					try {
						while(true){
							Thread.sleep(5000);
							System.out.println(client.getServerInfo(index++));
						}
					} catch (RemoteException e) {
						e.printStackTrace();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				
			}).start();
			
			System.out.println("");
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}
}



运行服务端和客户端测试

运行命令rmic 生产总框架
在命令行运行 rmic com.diaoge.java.RemoteInterfaceImpl
然后把生产的RemoteInterfaceImpl_stub.class拷贝到客户端
分享到:
评论
2 楼 dplead 2010-09-03  
同志,谢谢了~~
1 楼 jape198654 2010-03-19  
太感谢刁哥了!!!收起

相关推荐

    JAVA RMI入门教程

    【JAVA RMI入门教程】 Java Remote Method Invocation (RMI) 是Java平台中用于构建分布式应用程序的一个关键技术。RMI使得不同Java虚拟机(JVM)之间的对象可以相互通信,从而共享资源和处理能力,实现分布式计算。其...

    rmi基础教程

    ### RMI基础教程:系统运行机理深度解析 #### RMI概述与应用场景 RMI(Remote Method Invocation)是Java平台提供的一种远程方法调用技术,它允许在不同JVM(Java虚拟机)上的对象互相通信,就如同本地调用一样...

    java_in_rmi.rar_Java RMI_RMI java_rmi _精通rmi

    1. RMI基础知识:解释RMI的概念,介绍其工作原理,包括客户端和服务端的角色。 2. 创建远程接口:讲解如何定义远程接口,它是远程方法调用的合同。 3. 实现远程对象:介绍如何实现远程接口,并创建远程对象实例,...

    java基础教程PPT

    这份"java基础教程PPT"是专为那些对计算机语言感兴趣的初学者或有一定编程经验的人设计的,它覆盖了Java语言的核心概念和技术,旨在帮助学习者快速掌握Java编程。 教程首先会讲解Java的基础部分,包括语言语法、...

    Java分布式之RMI实例教程

    #### 一、RMI基础知识介绍 **RMI (Remote Method Invocation)** 是一种Java技术,用于实现分布式应用程序之间的远程过程调用。通过RMI,开发者可以在不同的JVM之间调用方法,就像是在本地JVM中调用一样。 - **基础...

    java 基础教程学习

    通过学习Java的基础教程,初学者可以掌握Java语言的基本概念,包括变量与数据类型的使用、运算符、表达式与语句、循环与选择结构、数组与方法的使用等。这些都是编程的基石,理解了这些概念,就可以为后续学习更高级...

    (转)通用JAVA RMI服务器框架

    本资源分享的是一个通用的RMI服务器框架,它为开发者提供了一个基础平台,用于快速搭建和实现自己的RMI服务。 首先,我们来理解RMI的基本概念。RMI是一种Java平台上的机制,它允许Java对象在不同的JVM之间进行通信...

    SSD8 Java RMI and HTTP

    - **Java RMI 入门.doc**:适合初学者的RMI教程,可能包括基本概念、示例和实践指导。 - **Key Differences between HTTP1.0 and HTTP1.1.mht**:这个文件详细列出了HTTP1.0和HTTP1.1之间的关键差异。 - **Getting...

    Java RMI Tutorial.pdf

    ### Java RMI (Remote Method Invocation) 教程详解 #### 一、Java RMI 概述 Java Remote Method Invocation(RMI)是一种机制,它允许一个Java虚拟机(JVM)中的对象调用另一个JVM中的对象的方法。这种远程方法调用...

    java基础入门教程+android必备基础

    Java技术不仅包含Java编程语言,还包括一系列的技术组件,如Java Media APIs、Security APIs、Management APIs、Java Applet、Java RMI、Java Bean、Java OS、Java Servlet、Java Server Page以及JDBC等。...

    RMI.zip_HTTP RMI_http视频_rmi视频教程

    这样的教程会涵盖Java编程基础,RMI的概念与API,以及如何与HTTP协议交互。 文件列表中的“RMI”可能是源代码文件夹,其中包含了实现上述功能的Java类。可能有以下组成部分: 1. Remote接口类:定义了远程方法,如...

    网络编程入门rmi初级教程

    本教程主要针对RMI的初级学习者,将引导你逐步进入这个激动人心的网络编程世界。 首先,让我们理解什么是RMI。RMI是Java的特性之一,它使得Java应用程序能够透明地调用远程对象的方法,就像调用本地对象一样。这种...

    rmi学习资料

    "RMI基础教程 - 深海有约 - BlogJava.files"和"rmi入门教程,简单明了(转).files"可能包含了相关的源代码或者图片资源,帮助读者更好地理解和实践RMI编程。 通过深入阅读这些资料,你可以了解如何设置RMI环境,...

    java开发教程

    该教程涵盖了Java语言的基础知识,包括变量与数据类型、运算符、表达式与语句、循环与选择结构、数组和方法的使用。此外,由于Android应用开发的基础也是Java,因此,这份教程同样适合那些希望入门Android开发的学习...

    liaotianshi.rar_RMI聊天室_java 网络_rmi _rmi 聊天_网络聊天室

    【标题】"liaotianshi.rar_RMI聊天室_java 网络_rmi _rmi 聊天_网络聊天室" 涉及的主要知识点是使用Java的远程方法调用(Remote Method Invocation, RMI)技术来实现一个网络聊天室。RMI是Java平台提供的一种分布式...

    Java基础教程.pdf

    Java技术包括Java语言本身以及一系列相关的APIs,例如Java Media APIs、Security APIs、Management APIs、Java Applet、Java RMI(远程方法调用)、Java Bean、Java OS、Java Servlet、Java Server Pages和JDBC...

Global site tag (gtag.js) - Google Analytics