`
cary
  • 浏览: 85610 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

关于RMI的一些知识

    博客分类:
  • J2EE
阅读更多
  RMI(Remote Method Invocation 远程方法调用),它增强了JAVA开发分布式应用的能力。
  运行机制;
  RMI应用程序通常包括两个独立的程序:服务器程序和客户端程序。典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户端调用这些远程对象的方法,而典型的客户端程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。RMI为服务器和客户端进行通信和信息传递提供了一种机制。
  在RMI分布式应用系统中,服务器与客户机之间传递的JAVA对象必须是可序列化的对象。不可序列化的对象不能在对象流中进行传递。对象序列化扩展了核心JAVA输入/输出类,同时也支持对象。对象序列化支持把对象编码以及将通过它们可访问到的对象编码变成字节流;同时,它也支持流中对象图形的互补重构造。
  开发步骤:
在这里推荐一款PLUG-IN FOR ECLIPSE,http://www.genady.net/rmi/v20/,可以提供自动生成STUB和发布RMI,生成security.policy的作用。其站定也提供了一个DEMO,比较简单。
  服务端:首先定义REMOTE接口
  
public interface RemotePrinter extends Remote {

	public int sumbitJob(String text) throws RemoteException;
	
	/**
	 * 
	 * @param jobID the job id returned from {@link #sumbitJob(String)}
	 * @return
	 * @throws RemoteException
	 */
	public boolean isComplete(int jobID) throws RemoteException;
	
	public String getPrinterStatus() throws RemoteException;
}

所有的远程方法都需要启动REMOTEEXCEPTION方法,执行异常检查。远程对象必须实现此接口
public class RemotePrinterImpl extends UnicastRemoteObject implements
		RemotePrinter {

	
	protected RemotePrinterImpl() throws RemoteException {
	}

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

	public String getPrinterStatus() throws RemoteException {
		
		return "ddddd";
	}

	public boolean isComplete(int jobID) throws RemoteException {
		System.out.println("requested printer status");
		return true;
	}

	public int sumbitJob(String text) throws RemoteException {
		System.out.println("submitted job"+text);
		return 0;
	}
}
该具体实现集成了UnicastRemoteObject和实现创建的远程对象的类;

如果你使用的IDE实现,将自动编译,并利用上文中提到了RMI的PLUGIN来完成STUB的生成。如果是利用JDK的相关命令,比较繁琐,在此不介绍。
运行服务端程序
public static void main(String[] args)
	{
		try {
			System.setProperty("java.rmi.server.hostname","192.168.2.176");  //设置服务器IP
			Registry r = LocateRegistry.createRegistry(2000);//创建RMI的启动端口,默认并非此端口。
			r.rebind("printer", new RemotePrinterImpl());//绑定对象
			System.out.println("printer starting!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


利用此CREATE方法就不需要在CMD中启动RMI的端口设置了。

关于客户端程序:
public class PrintClient {

	public static void main(String[] args)
	{
		
		try {
			System.setSecurityManager(new RMISecurityManager());//加入此方法必须存在security.policy文件
			RemotePrinter printer = (RemotePrinter) Naming.lookup("rmi://192.168.2.176:2000/printer");
			int jobID = printer.sumbitJob("hello world");
			System.out.println("submitted job "+jobID);
			System.out.println("Is job complete?"+printer.isComplete(jobID));
			System.out.println("printer status?"+printer.getPrinterStatus());
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

注意,在真实场景发布时需要将远程接口打包成JAR发布到客户端;否则将造成客户端无法找到需要的远程接口。
分享到:
评论

相关推荐

    Rmi示例 Rmi代码示例

    以下是对这两个文件及其涉及的知识点的详细解释: 1. **RMI服务端**(RmiServer): - **接口定义**:RMI服务通常基于接口实现,服务器端会提供一个实现了特定接口的远程对象。这个接口定义了客户端可以调用的远程...

    rmi基础知识学习

    RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个重要特性,它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,从而实现分布式应用程序。在Java RMI中,一个对象可以调用另一个位于不同网络...

    RMI相关知识及其实例

    Java Remote Method Invocation (RMI) 是Java平台中用于分布式计算的一种技术。它允许Java对象在不同的JVM(Java虚拟机)之间进行交互,仿佛它们在同一个进程中运行一样。RMI是构建分布式应用的重要工具,特别是在...

    java rmi java rmi

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

    基于rmi的远程控制

    以下是关于RMI的关键知识点: 1. **注册表(Registry)**:在RMI系统中,注册表是一个全局的服务,它负责管理远程对象的引用。远程对象首先需要在注册表中注册,这样其他客户端才能找到并与其交互。 2. **接口...

    rmi学习资料

    在提供的学习资料中,"rmi入门教程,简单明了(转).htm"和"RMI基础教程 - 深海有约 - BlogJava.htm"很可能是两篇关于RMI基础知识的教程,它们可能涵盖了RMI的基本概念、设置步骤、示例代码以及常见问题。"RMI基础...

    Spring RMI

    **Spring RMI 深度解析** ...以上就是关于Spring集成RMI的相关知识点,包括基本概念、配置、优势、优化策略以及与Spring Boot的结合。通过理解和掌握这些内容,开发者可以更加高效地在分布式环境中构建和管理远程服务。

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

    Java RMI(Remote Method Invocation)技术是Java平台中...以上是关于“java RMI技术实现的网络聊天室”的主要知识点。通过这个项目,开发者可以学习到如何使用RMI创建分布式应用,以及如何处理并发和网络通信等问题。

    RMI-IIOP 基于SUN

    4. 相关资料:可能包含了关于RMI、IIOP和CORBA的基础知识,以及相关的技术文章和研究,帮助深入理解RMI-IIOP的工作原理和最佳实践。 学习和掌握RMI-IIOP技术,不仅可以提升开发者的分布式编程技能,也有助于设计和...

    RMI简单实例RMI简单实例

    下面,我们将从RMI的概念、实现原理、以及一个具体的RMI实例来详细阐述这一知识点。 ### RMI概念 RMI是Java平台的一个核心特性,它支持跨网络的远程方法调用。在RMI模型中,客户端通过调用远程接口的本地代理对象...

    java_in_rmi.rar_Java RMI_RMI java_rmi _精通rmi

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

    rmi程序框架示例

    这个“rmi程序框架示例”提供了有关如何构建和运行RMI应用程序的基本知识。 RMI的核心概念包括以下几个部分: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它继承自java.rmi.Remote接口。例如...

    精通RMI程序代码

    在IT行业中,远程方法调用(Remote Method Invocation, RMI)是Java编程语言中的一个核心特性,它允许Java对象在不同的...通过实践和理解上述知识点,你将能够熟练地运用RMI技术,创建高效、可靠的分布式Java应用程序。

    RMI+EHCACHE Demo

    【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用...同时,这也会涉及到序列化、网络通信、多线程等基础知识,对于提升Java程序员的技能树具有重要意义。

    Synaptics RMI4 Specification

    根据给定的文件信息,我们可以总结出关于Synaptics RMI4 Specification的重要知识点: ### 一、概述 《Synaptics RMI4 Specification》是一份详细介绍Synaptics RMI4技术标准的文档,该文档提供了关于如何使用...

    rmi-lite 1.0

    学习和使用rmi-lite,开发者可以掌握以下关键知识点: 1. Java RMI基础:理解RMI的基本概念,如远程接口、远程对象、注册表以及传输协议。 2. RMI Lite简化点:分析源代码,找出与标准RMI相比,rmi-lite做了哪些...

    RMI教程-入门经典

    RMI教程通常涵盖以下几个核心知识点: 1. **基本概念**:RMI的核心是远程接口(Remote Interface),它是本地接口的子类,声明了可被远程调用的方法。这些方法将在远程对象上执行。远程对象(Remote Object)是实现...

    一个RMI实例

    通过实践这个RMI实例,你可以深入理解RMI的运行机制,包括对象序列化、网络通信、异常处理等方面的知识。同时,它也展示了Java如何实现分布式系统的可能性,这对于开发大型企业级应用至关重要。

    Java RMI demo多对象

    下面我们将深入探讨Java RMI及其相关知识点。 1. **RMI概念**: - **远程方法调用**:RMI的核心是远程方法调用,它允许Java对象在不同的JVM之间通信。这涉及将本地对象的引用转换为远程对象的引用,然后通过网络...

Global site tag (gtag.js) - Google Analytics