`
hongboyongqi
  • 浏览: 3853 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RMI入门实例

    博客分类:
  • J2EE
阅读更多
看到RMI,首先想到了这个问题,什么是RMI

Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。(从网上copy的,呵呵)

它与WEBSERVICE有什么区别。

rmi的客户端和服务端都必须是java,webservice没有这个限制

webservice是在http协议上传递xml文本文件,与语言和平台无关

rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言

RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。

WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用。

一张图解释远程方法调用的过程。RMI将客户辅助对象称为stub,服务辅助对象成为skeleton。


下面是一个RMI的入门实例。

目录结构:


1. 被调用的远程对象必须实现java.rmi.Remote接口,该接口是一个空接口,只是用来标志实现它的对象可以被远程访问。开发中一般根据业务需要自己创建接口来继承该接口,并封装可以被远程调用的方法。
package edu.rob.rmi.remote;

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

public interface MyRemote extends Remote {
	public String getHello() throws RemoteException;
}

远程调用依赖网络与IO,因此接口中的方法必须抛出RemoteException,否则会报错误 - java.rmi.server.ExportException: remote object implements illegal remote interface

2. 然后创建该接口的实现类,一般继承自UnicastRemoteObject:
package edu.rob.rmi.remote;

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


public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {

	private static final long serialVersionUID = 1579125597612791522L;

	public MyRemoteImpl() throws RemoteException {}

	@Override
	public String getHello() {
		System.out.println("Sever: hello");
		return "hello";
	}

}

3. 在server端的rmi registry中注册该服务。在client访问远程方法之前,必须完成server端的绑定。
package edu.rob.rmi.server;

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

import edu.rob.rmi.remote.MyRemoteImpl;
import edu.rob.rmi.remote.MyRemote;

public class HelloRMIServer {

	public static void main(String[] args) {
		
		try {
			MyRemote h = new MyRemoteImpl();
			LocateRegistry.createRegistry(1099);
			Naming.rebind("rmi://192.168.1.101:1099/hello", h);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} 
	}
}

4. 编写client访问远程方法。需要注意的是,client同样需要一份远程方法的接口。直接将server端的接口拷贝至客户端就可以(注意包名、类名必须相同)。
package edu.rob.rmi.client;

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

import edu.rob.rmi.remote.MyRemote;

public class HelloRMIClient {

	public static void main(String[] args) {
		try {
			MyRemote h = (MyRemote) Naming.lookup("rmi://192.168.1.101:1099/hello");
			System.out.println("Client: " + h.getHello());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}
}

先运行HelloRMIServer,再运行HelloRMIClient,我们能再控制台看到如下输出
Sever: hello
Client: hello
  • 大小: 42.2 KB
  • 大小: 1.6 MB
分享到:
评论

相关推荐

    RMI 零基础入门与实例

    **零基础入门RMI:** 1. **理解基本概念:** - **远程对象(Remote Object)**:这是在远程主机上运行的Java对象,可以通过网络被其他客户端访问。 - **接口(Interface)**:定义远程对象的方法,这个接口需要...

    RMI入门(二)实例 --- 亲自将代码调试成功

    在本文中,我们将深入探讨Java Remote Method Invocation (RMI)技术,通过一个具体的实例来学习如何设置、构建和调试RMI应用。RMI是Java提供的一种远程对象调用机制,它允许Java对象在不同的JVM之间进行通信。在这个...

    java RMI入门例子

    这个"java RMI入门例子"将带你深入理解RMI的工作原理和主要组件。 RMI的核心概念包括: 1. **远程接口**:这是定义远程方法的接口,通常继承自java.rmi.Remote。这些方法声明抛出java.rmi.RemoteException,表示...

    rmi入门(带源码)

    这个“rmi入门(带源码)”的资源可能是一个教学资料或实践项目,帮助初学者理解和应用RMI技术。 首先,我们来详细了解一下RMI的基本概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口。它继承了...

    RMI入门小结

    **RMI(Remote Method Invocation)入门小结** 远程方法调用(RMI)是Java平台上的一个关键特性,它允许Java对象在不同的JVM(Java虚拟机)之间进行交互,从而实现分布式计算。RMI是Java开发分布式应用程序的基础,...

    RMI 入门学习资料

    3. **服务器端**:在服务器端启动服务,实例化远程对象并将其注册到RMI注册表。 4. **客户端**:客户端通过RMI注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 RMI的优势在于: - **...

    rmi入门

    【标题】:“RMI入门” 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于在分布式环境中实现对象间通信的技术。RMI允许一个Java对象调用网络另一端的Java对象的方法,就像调用本地对象...

    JavaRMI快速入门

    2. **远程对象**:远程对象是实现了远程接口的实例,它可以驻留在网络中的任何地方。Java RMI允许这些对象的引用在不同进程中传递,使得客户端可以调用远程对象的方法。 3. **注册表(Registry)**:RMI注册表是一...

    RMI教程-入门经典

    远程对象(Remote Object)是实现了远程接口的实例,驻留在服务器端,客户端通过引用远程接口来与服务器交互。 2. **注册表(Registry)**:RMI系统中的注册表是一个服务,用于存储远程对象的引用。客户端可以通过...

    CORBA与RMI的比较 及 实例

    标题 "CORBA与RMI的比较及实例" 涉及到的是两种分布式计算技术——Common Object Request Broker Architecture (CORBA) 和 Remote Method Invocation (RMI) 的对比以及实际应用的示例。这两种技术都是为了让运行在...

    网络编程入门rmi初级教程

    远程对象的实例化和生命周期管理是RMI系统的一部分。 3. **注册表**:在RMI中,一个叫做RMIServer的注册表服务负责管理和查找远程对象。客户端通过注册表获取远程对象的引用,从而进行通信。 4. **stubs/skeletons...

    java rmi demo

    java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    dubbo+zookeeper入门实例

    【标题】"dubbo+zookeeper入门实例"是一个关于使用Dubbo框架与Zookeeper结合实现服务发现和服务调用的基础教程。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,而Zookeeper则是一个分布式服务协调...

    JAVA-RMI使用快速入门.doc

    【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...

    Ice 经典入门和实例

    总的来说,"Ice经典入门和实例"是一套完整的学习资料,涵盖了Ice的基本概念、核心功能、高级特性和实战应用,对于想要掌握这个分布式对象中间件的开发者来说,是非常宝贵的资源。通过深入学习和实践,你将能熟练地...

    dubbo入门实例

    【Dubbo入门实例详解】 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务框架,它致力于提供一个简单、高效、可扩展的分布式服务解决方案。在本入门实例中,我们将通过两个核心组件——`dubboserver`(服务提供...

Global site tag (gtag.js) - Google Analytics