`
dchaoxiong
  • 浏览: 180017 次
  • 性别: 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基础教程PPT

    这是提供给入门学习java的计算机语言爱好者的PPT版java基础教程,涉及对象,容器,多线程,数据库处理,网络编程,RMI和JSP等等技术章节.....适合初学者或有其它编程语言基础者学习使用

    Java基础教程【精品】

    Java 技术是由美国 Sun公司倡导和推出的,它包括 Java 语言和 Java Media APIS、Security APIs、 Management APIs、 Java Applet、 Java RMI、 JavaBean、 JavaOS、 Java Servlet、JavaServer Page 以及 JDBC 等。

    Java基础教程

    Java基础教程 Java技术是由美国Sun公司倡导和推出的,它包括Java语言和Java Media APIS、Security APIs、Management APIs、Java Applet、Java RMI、JavaBean、JavaOS、Java Servlet、JavaServer Page 以及JDBC等。

    Java基础教程(实用)

    Java技术是由美国Sun公司倡导和推出的,它包括Java语言和Java Media APIS、Security APIs、Management APIs、Java Applet、Java RMI、JavaBean、JavaOS、Java Servlet、JavaServer Page 以及JDBC等。

    JAVA清华大学教程

    清华大学java课程学习使用教程 ★ 第一讲 Java语言概述 ◇课前索引 ◇1.1 java语言的发展史 ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本...

    JAVA 清华大学 教程

    ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言中的面向对象特性 ◇课前...

    Java编程语言详细教程

    ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言中的面向对象特性 ◇课前...

    java教程.rar

    示例描述:演示简单Java语言基础。 BianLiang.java 一个局部变量的例子 第3章 示例描述:本章学习、介绍如何使用控制语句。 BreakText1.java 基于for循环的例子 第5章 示例描述:介绍并演示类的概念以及类的...

    java课件 面向对象java技术教程 java例题解答

    java编程思想课件 java经典教程教程例题解答 java学习材料 内含java语言基础 面向对象基本概念 反射 io与对象列化 GUI组件 applet 分布式计算与RMI

    清华大学JAVA教程

    这是清华大学的一套JAVA教程,包括详尽的例子、课后习题与解答、相关计算机英语词汇,就课程本身的内容来说也非常丰富,囊括了以下章节: ★ 第一讲 Java语言概述 ◇课前索引 ◇1.1 java语言的发展史 ◇1.2 java...

    JAVA清华教程 详细

    java清华版教程, ■ Java语言的发展及相关技术的介绍,Java技术和平台在网络计算及电子商务中的应用介绍;  ■ Java语言的基础知识:Java语言的主要特点,设计思想,Java虚拟机,垃圾回收机制,安全性的保证机制...

    Java清华教程.rar

     ■ Java语言的基础知识:Java语言的主要特点,设计思想,Java虚拟机,垃圾回收机制,安全性的保证机制;  ■ Java语言的基本语法规范,包括标识符、关键字、数据类型、表达式和流控制,程序基本结构;  ■ ...

    清华大学java教程

     ■ Java语言的基础知识:Java语言的主要特点,设计思想,Java虚拟机,垃圾回收机制,安全性的保证机制;  ■ Java语言的基本语法规范,包括标识符、关键字、数据类型、表达式和流控制,程序基本结构;  ■ ...

    [清华大学]JAVA教程

     ■ Java语言的基础知识:Java语言的主要特点,设计思想,Java虚拟机,垃圾回收机制,安全性的保证机制;  ■ Java语言的基本语法规范,包括标识符、关键字、数据类型、表达式和流控制,程序基本结构;  ■ ...

    java后端源码部署-JavaTutorial:Java教程:基础、中级、高级;常用的工具和Servlet容器使用说明

    JavaTutorial(Java教程) 在成长的过程中,会学到许多新的知识;在项目实践过程中,经常需要学习新的技术。但经过一段时间后,这些知识点和技术又忘得差不多了,等到要用的时候又要搜索很多的资料从头到尾学习一次...

    清华大学JAVA教程(HTML),RAR

    第二讲:Java语言基础知识 第三讲:Java语言中的面向对象特性 第四讲:Java的例外处理和I/O流 第五讲:AWT图形用户界面设计 第六讲:Java的线程和Java Applet 第七讲:Swing用户界面设计 第八讲:Java网络编程 第九...

    JSP快速入门教程

    第一讲(参考《Java Web程序设计基础教程》第1章) 1 JSP 和 Java的关系  一般Java指的标注版 Java SE  另外两个版本:Java EE 和 Java ME  JSP属于Java EE的一部分。  Java EE:  组件:Web层组件(JSP+...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD...

Global site tag (gtag.js) - Google Analytics