`
wang吖
  • 浏览: 241000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初识JavaRMI原理(转)

 
阅读更多
RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extendsjava.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在远程接口(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用。 
 
注意:extendsRemote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。 
 
同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”,而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。 
 
RMI 框架的基本原理大概如下图,应用了代理模式来封装了本地存根与真实的远程对象进行通信的细节。
下面给出一个简单的RMI 应用,其中类图如下:其中IService接口用于声明服务器端必须提供的服务(即service()方法),ServiceImpl类是具体的服务实现类,而Server类是最终负责注册服务器远程对象,以便在服务器端存在骨架代理对象来对客户端的请求提供处理和响应。
各个类的源代码如下:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IService extends Remote {

	// 声明服务器端必须提供的服务
	public String service(String content) throws RemoteException;
}




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

//UnicastRemoteObject用于导出的远程对象和获得与该远程对象通信的存根。
public class ServiceImpl extends UnicastRemoteObject implements IService {

	private String name;

	protected ServiceImpl(String name) throws RemoteException {
		this.name = name;
	}

	@Override
	public String service(String content) throws RemoteException {

		System.out.println(content + " ---------  我被客户端调用了 ---------");
		return "server------>" + content;
	}

}



import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Server {

	public static void main(String[] args) {
		try {

			// 实例化实现了IService接口的远程服务ServiceImpl对象
			IService service01 = new ServiceImpl("service01");

			// 初始化命名空间
			Context ct = new InitialContext();

			LocateRegistry.createRegistry(8888);

			// 将名称绑定到对象,即向命名空间注册已经实例化的远程服务对象
			ct.rebind("rmi://127.0.0.1:8888/service01", service01);

			System.out.println(">>>>>INFO:远程service对象绑定成功!>>>>>");

		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
}



import javax.naming.Context;
import javax.naming.InitialContext;

public class Client {

	public static void main(String[] args) {

		String url = "rmi://localhost:8888/";

		try {
			Context ct = new InitialContext();
			// 检索指定的对象 即找到服务器端相对应的服务对象存根
			IService service = (IService) ct.lookup(url + "service01");

			System.out.println(service + " is :" + service.getClass().getName()
					+ " instance");

			Class<?>[] sInterfaces = service.getClass().getInterfaces();

			for (Class<?> clazz : sInterfaces) {
				System.out.println(" interface is " + clazz.getName());
			}

			String str = service.service("你好");

			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


 
其实整个简单的RMI 应用中各个类的交互时序如下图:
 
 推荐一篇更完善的文章:http://ryxxlong.iteye.com/blog/1560535
分享到:
评论

相关推荐

    基于JAVA RMI的聊天室

    JAVA RMI原理 RMI允许Java对象在不同的Java虚拟机之间进行方法调用,就像是在同一台机器上操作本地对象一样。它包括三个主要组件:远程接口、远程对象和RMI注册表。远程接口定义了可以在远程对象上调用的方法,...

    java RMI技术实现的网络聊天室

    Java RMI(Remote Method Invocation)技术是Java平台中用于分布式计算的一种机制,它允许一个Java对象调用远程计算机上的另一个Java对象的方法。在本案例中,“java RMI技术实现的网络聊天室”是一个使用RMI构建的...

    java rmi java rmi

    根据提供的文件信息,我们可以深入探讨Java RMI(Java Remote Method Invocation)的相关知识点,包括其概念、原理、体系结构以及一个具体的示例。 ### RMI的概念 RMI是一种Java技术,它允许开发者创建分布式应用...

    javaRMI反序列化漏洞验证工具

    Java RMI(Remote Method Invocation,远程方法调用)是一种Java技术,允许在分布式环境中执行远程对象的方法。这个技术的核心是序列化和反序列化过程,它使得对象可以在网络上进行传输。然而,这个特性也可能引入...

    java RMI实现代码

    本项目提供的“java RMI实现代码”包括客户端和服务器端的示例,通过清晰的代码注释帮助理解RMI的工作原理。 一、RMI的基本概念 1. 远程接口:远程接口定义了客户端和服务器之间通信的API,它是Java接口,标注了`@...

    JavaRMI快速入门

    Java Remote Method Invocation(Java RMI)是Java编程语言中用于在网络间进行远程对象调用的技术。它是Java平台的标准...理解并掌握Java RMI的基本原理和实践,对于Java开发者来说,是迈进高级应用开发的重要一步。

    java RMI简单Demo

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...

    Java RMI 简单示例

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同 JVM...通过实践这个简单的示例,你可以更好地掌握Java RMI的工作原理和使用方法。

    java rmi 参考文档

    ### Java RMI (Remote Method Invocation) 概念与实践 #### 一、Java RMI简介 Java RMI(Remote Method Invocation)是一种允许调用不同Java虚拟机(JVM)上方法的机制。这些JVM可能位于不同的机器上,也可能在同一...

    JavaRMI超棒书

    ### Java远程方法调用(Java RMI)核心概念与应用详解 #### 一、Java RMI简介 Java远程方法调用(Java Remote Method Invocation,简称Java RMI)是一种用于实现远程对象之间通信的技术,它是Java平台的一个核心...

    java rmi HelloWorld版(源码)

    这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个简单的RMI应用示例,帮助开发者了解和学习RMI的基本原理和使用。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口...

    java rmi远程调用

    最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程

    JavaRMI.pdf

    Java RMI(Remote Method Invocation)是Java编程语言中用于实现远程过程调用的一种技术。它允许运行在客户机上的程序调用位于远程服务器上的对象的方法,从而实现分布式计算。RMI的核心思想是通过接口隐藏底层网络...

    Java RMI中文规范

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式对象系统的关键技术。它允许Java应用程序在不同Java...通过深入理解RMI的原理和特性,开发者可以构建出高效、可靠的分布式解决方案。

    JAVA RMI简单例子

    这个"JAVA RMI简单例子"旨在帮助我们深入理解RMI的基本原理和实现步骤。 RMI的核心概念包括远程接口、远程对象和RMIC编译器。首先,我们需要定义一个远程接口,该接口声明了可以在远程服务器上执行的方法。这些方法...

    JAVA RMI测试代码

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI是构建分布式应用的重要工具,尤其适用于需要跨...

    Java RMI.pdf

    《Java RMI》一书的英文版本,With Java RMI, you'll learn tips and tricks for making your RMI code excel. This book provides strategies for working with serialization, threading, the RMI registry, ...

    Java RMI 可运行实例

    在本文中,我们将深入探讨Java RMI的工作原理、关键组件以及如何创建和运行一个RMI应用程序。 首先,理解Java RMI的基本概念至关重要。RMI的核心是使Java对象能够在网络上的不同虚拟机(JVM)之间进行通信。这种...

    java_rmi.rar_RMI java_java.rmi

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像它们在同一个进程内一样。RMI是Java在分布式系统领域的核心特性,极大地...

Global site tag (gtag.js) - Google Analytics