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

RMI入门学习

 
阅读更多

RMI是什么?

 

RMI为分布式系统交互提供了一种解决方案。

 

RMI底层通过网络实现运行在不同环境中的java系统间相互调用方法,就如同调用本地方法一样。

 

基于RMI的开发步骤:

 

1.编写RMI服务接口,须继承java.rmi.Remote类,而且所有方法都需要声明抛出java.rmi.RemoteException异常,所有参数均须实现序列化。

 

2.编写接口实现类,须继承UnicastRemoteObject类,实现上步骤中定义的接口,由于是序列化的类因此需要定义serialVersionUID字段。

 

3.注册RMI服务,即将服务对象绑定到指定端口上。

 

4.编写客户端远程调用的代码。

 

 

一个简单示例:

 

在服务端,即提供远程方法的一端

 

1 定义RMI服务接口

 

package test.rmi;

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

/**
 * RMI服务
 * 2012-7-19 下午05:58:06
 *
 */
public interface RmiTestService extends Remote {

	public String getMessage(String p) throws RemoteException;
}

 

这些接口一般达成jar包发给客户端,供客户端编译时使用。

 

 

2 实现接口

package test.rmi;

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

/**
 * 服务实现
 * 2012-7-19 下午06:01:04
 */
public class RmiTestServiceImpl extends UnicastRemoteObject implements
		RmiTestService {

	private static final long serialVersionUID = 1L;

	/**
	 * @throws RemoteException
	 */
	protected RmiTestServiceImpl() throws RemoteException {
		super();
	}

	/* (non-Javadoc)
	 * @see test.rmi.RmiTestService#getMessage(java.lang.String)
	 */
	@Override
	public String getMessage(String p) throws RemoteException {
		// TODO Auto-generated method stub
		System.out.println("收到请求参数:" + p);
		return "Rmi:" + p;
	}
}
 

 

3 编写RMI服务注册代码

 

package test.rmi;

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

/**
 * RMI服务器
 * 2012-7-19 下午06:04:39
 */
public class RmiServer {
	private int port = 9123;
	private String ip = "127.0.0.1";
	
	/**
	 * 开启RMI服务
	 */
	public void start(){
		try {  
            LocateRegistry.createRegistry(port);  
            // 创建一个远程对象  
            RmiTestService comm = new RmiTestServiceImpl();  
            Naming.bind("//" + ip + ":" + port + "/comm", comm);  
        } catch (RemoteException e) {  
            System.out.println("创建远程对象发生异常!" + e.toString());  
            e.printStackTrace();  
        } catch (AlreadyBoundException e) {  
            System.out.println("发生重复绑定对象异常!" + e.toString());  
            e.printStackTrace();  
        } catch (MalformedURLException e) {  
            System.out.println("发生URL畸形异常!" + e.toString());  
            e.printStackTrace();  
        }  
	}
	
	public static void main(String []argus){
		RmiServer server = new RmiServer();
		System.out.println("启动RMI服务...");
		server.start();
		System.out.println("RMI服务已经启动");
	}
}

 

在客户端,即调用远程方法的一端 

 

 

首先应添加服务端提供的接口jar包,以便于本地编译。

 

4 客户端远程方法调用

 

package test.rmi.client;

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

import test.rmi.RmiTestService;

/**
 * 客户端调用RMI服务
 * 2012-7-19 下午06:14:11
 */
public class RmiTestClient {
	private int port = 9123;
	private String ip = "192.168.1.19";
	
	private RmiTestService service;
	
	
	/**
	 * 获取远程服务实例
	 * @return
	 */
	public RmiTestService getService(){
		if (this.service == null) {
			try {
				// 在RMI服务注册表中查找名称为RmiMonitorService的对象,并调用其上的方法
				service = (RmiTestService) Naming.lookup("rmi://" + ip + ":"
						+ port + "/comm");

			} catch (NotBoundException e) {
				e.printStackTrace();
			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		}
        return service;
	}
	
	/**
	 * 本地通过调用远程对象的方法实现远程方法调用
	 * @param p
	 * @return
	 */
	public String getMessage(String p){
		String rt = null;
		try {
			rt = this.getService().getMessage(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return rt;
	}

	/**
	 * TODO(简要描述方法的作用)
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RmiTestClient client = new RmiTestClient();
		System.out.println("调用远程方法...");
		String rt = client.getMessage("hello");
		System.out.println("rmi返回:" + rt);
	}
}
 

 

测试运行:

首先运行RmiServer.main方法,启动RMI服务,然后运行RmiTestClient.main方法调用rmi服务。

 

上面是一个简单的RMI应用实例,其中没有添加安全措施,如果服务对外网开放则需要添加安全措施,这部分内容,慢慢研究,后面再补充。

 

 

 

 

0
3
分享到:
评论

相关推荐

    rmi入门学习,实用的小例子

    ### RMI基础知识与实践 #### 一、Java RMI简介 Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,允许开发者在不同Java虚拟机(JVM)之间调用远程对象的方法,从而实现分布式应用程序的...

    RMI 入门学习资料

    RMI(Remote Method Invocation...虽然RMI的学习曲线相对陡峭,但它为构建复杂、可扩展的分布式Java应用程序提供了强大工具。通过熟练掌握RMI,开发者能够构建出跨越多个计算节点的高性能应用,实现系统间的高效协作。

    RMI 零基础入门与实例

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

    rmi基础知识学习

    总之,RMI是Java分布式计算的基础之一,虽然在现代开发中可能不如其他技术流行,但对于理解分布式系统原理和Java远程通信仍然具有重要的学习价值。通过深入学习和实践RMI,开发者可以更好地掌握分布式应用的设计和...

    rmi学习资料

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

    java Spring+RMI入门程序源代码

    通过这个 "java Spring+RMI 入门程序源代码",开发者可以学习如何在 Spring 框架中集成 RMI 技术,创建可扩展、高可用的分布式应用。项目中的 `rmiservice` 文件很可能包含了 RMI 服务端的实现,可以从中深入理解 ...

    JAVA RMI入门教程

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

    RMI基础代码小程序

    Java RMI(Remote Method Invocation,...学习这个RMI基础代码小程序,可以帮助理解RMI的基本工作原理,为进一步探索Java的分布式计算打下基础。此外,理解并掌握RMI有助于开发跨JVM的应用,例如分布式系统、云服务等。

    RMI示例程序,RMI学习

    在服务器端,`main`方法中设置了`RMISecurityManager`,这是RMI安全性的基础,确保只有被授权的代码才能执行远程方法。然后创建`HelloService`的实例,并将其绑定到"HelloServer"这个名字上,通过`Naming.rebind()`...

    RMI入门小结

    这篇博客“RMI入门小结”主要探讨了RMI的基础概念、实现步骤以及常见问题。 1. RMI的基本原理: RMI的核心是通过接口定义服务,服务端实现接口,并将实现类注册到RMI注册表中。客户端通过引用远程接口,即可调用...

    java RMI入门例子

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

    《EJB-RMI入门》

    《EJB-RMI入门》是一本专注于讲解Java企业级应用开发技术的书籍,特别是针对RMI(Remote Method Invocation,远程方法调用)的使用。RMI是Java平台中用于构建分布式应用程序的关键技术,它允许Java对象在不同的Java...

    RMI教程-入门经典

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的Java虚拟机之间进行通信,仿佛这些对象都...通过不断学习和实践,开发者可以充分利用RMI的强大功能。

    rmi入门

    综上所述,学习RMI入门需要理解其核心概念,掌握创建远程接口和实现类的方法,了解RMI的工作流程,熟悉序列化过程,以及能够编写简单的RMI服务端和客户端程序。同时,通过阅读相关的源码和使用相关的工具,可以...

    JavaBean和RMI 学习

    JavaBean保留了其他软件组件的技术精华,并增加了被其他软件组件技术忽略的技术特性,使得它成为完整的软件组件解决方案的基础,并在可移植的Java平台上方便地用于网络世界中 Java RMI(Remote Method Invocation)-...

    rmi入门(带源码)

    在IT行业中,Remote Method ...总之,“rmi入门(带源码)”的学习资源将引导你逐步了解并掌握RMI的基本原理和实践操作,通过实际的源代码示例加深理解,这对于想要提升Java分布式编程能力的开发者来说是一份宝贵的资料。

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

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

    一个简单的RMI例子Java源代码,用于学习理解RMI

    学习这个简单的RMI示例,可以帮助你了解如何在Java中设置和使用RMI,包括创建远程接口,实现远程对象,注册到RMI注册表,以及在客户端进行远程方法调用。这将为你构建更复杂的分布式系统打下基础。

    网络编程入门rmi初级教程

    网络编程是计算机科学中的一个重要领域,它涉及到通过网络在不同计算机之间交换信息。RMI(Remote Method Invocation,远程方法调用)...通过实践和学习,你可以逐渐掌握这一技术,为后续的高级网络编程打下坚实基础。

Global site tag (gtag.js) - Google Analytics