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

RMI使用

    博客分类:
  • java
 
阅读更多

搭建一个RMI服务的过程分为以下7步;

1,创建远程方法接口,该接口必须继承自Remote接口

Remote 接口是一个标识接口,用于标识所包含的方法可以从非本地虚拟机上调用的接口,Remote接口本身不包含任何方法

 

package server;

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

public interface Hello extends Remote {
	public String sayHello(String name) throws RemoteException;
}

 由于远程方法调用的本质依然是网络通信,只不过隐藏了底层实现,网络通信是经常会出现异常的,所以接口的所有方法都必须抛出RemoteException以说明该方法是有风险的

 

2,创建远程方法接口实现类:

UnicastRemoteObject类的构造函数抛出了RemoteException,故其继承类不能使用默认构造函数,继承类的构造函数必须也抛出RemoteException

由于方法参数返回值最终都将在网络上传输,故必须是可序列化的

 

package server;

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

public class HelloImpl extends UnicastRemoteObject implements Hello {
	private static final long serialVersionUID = -271947229644133464L;

	public HelloImpl() throws RemoteException{
		super();
	}

	public String sayHello(String name) throws RemoteException {
		return "Hello,"+name;
	}
}

 

 

4,启动RMI注册服务

LocateRegistry.createRegistry(12312); 

 5,编写服务端代码

package server;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class HelloServer {
	public static void main(String[] args) {
		try{
			Hello h = new HelloImpl();
			
			//创建并导出接受指定port请求的本地主机上的Registry实例。
			//LocateRegistry.createRegistry(12312);
			
			/**	Naming 类提供在对象注册表中存储和获得远程对远程对象引用的方法
			 *  Naming 类的每个方法都可将某个名称作为其一个参数,
			 *  该名称是使用以下形式的 URL 格式(没有 scheme 组件)的 java.lang.String:
			 *  //host:port/name
			 *  host:注册表所在的主机(远程或本地),省略则默认为本地主机
			 *  port:是注册表接受调用的端口号,省略则默认为1099,RMI注册表registry使用的著名端口
			 *  name:是未经注册表解释的简单字符串
			 */
			//Naming.bind("//host:port/name", h);
			Naming.bind("rmi://192.168.58.164:12312/Hello", h);
			System.out.println("HelloServer启动成功");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

 先创建注册表,然后才能在注册表中存储远程对象信息

7,编写客户端代码

    package client;  
      
    import java.net.MalformedURLException;  
    import java.rmi.Naming;  
    import java.rmi.NotBoundException;  
    import java.rmi.RemoteException;  
      
    import server.Hello;  
      
    public class HelloClient {  
        public static void main(String[] args) {  
            try {  
                Hello h = (Hello)Naming.lookup("rmi://192.168.58.164:12312/Hello");  
                System.out.println(h.sayHello("zx"));  
            } catch (MalformedURLException e) {  
                System.out.println("url格式异常");  
            } catch (RemoteException e) {  
                System.out.println("创建对象异常");  
                e.printStackTrace();  
            } catch (NotBoundException e) {  
                System.out.println("对象未绑定");  
            }  
        }  
    }  

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring Rmi使用文档

    ### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...

    JAVA-RMI使用快速入门.doc

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

    rmi使用实例

    ### RMI 使用实例详解 #### 一、RMI 概述 远程方法调用(Remote Method Invocation,简称 RMI)是 Java 平台提供的一种分布式计算技术,它允许开发者创建可跨网络调用的方法,就像在本地调用一样简单。RMI 的设计...

    spring rmi使用心得

    为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...

    rmi使用

    本篇文章将深入探讨RMI的使用,包括其基本概念、工作原理、配置步骤以及常见问题。 一、RMI基本概念 RMI是一种协议,用于在Java环境中执行跨网络的远程方法调用。它使得一个Java对象可以调用另一个位于不同JVM上的...

    java_rmi.rar_RMI java_java.rmi

    6. **反序列化和序列化**:RMI使用Java的序列化机制来处理参数和返回值的网络传输。所有远程方法的参数和返回值都必须是可序列化的。 Java RMI还有许多高级特性,例如: - **多线程RMI**:RMI支持并发调用,多个...

    RMI使用范例

    1. **导出远程对象**:在服务器端,开发者创建远程对象实例,并使用`java.rmi.Naming.bind()`方法将其绑定到一个命名空间,如“/MyRemoteService”。 2. **生成存根和骨架**:使用`rmic`命令生成客户端存根和服务器...

    RMI简单实例RMI简单实例

    RMI使用了动态代理、序列化、远程对象引用等技术,使得远程对象可以像本地对象一样被访问。 ### 实现原理 RMI的实现主要依赖于以下三个组件: 1. **远程接口(Remote Interface)**:定义了客户端可以远程调用的...

    Java中RMI的实现机制

    RMI使用JRMP(Java Remote Messaging Protocol)协议进行通信,JRMP是专为Java对象制定的协议,因此RMI具有Java"Write Once, Run Anywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。 在RMI分布式应用...

    JAVA RMI.rar_Java RMI_ME_RMI java_rmi

    4. **序列化**:由于Java对象不能直接在网络上传输,RMI使用Java的序列化机制将对象转换为字节流,然后在网络上传输,到达目的地后再反序列化恢复。 5. **异常处理**:RMI支持跨网络的异常处理,如果远程方法抛出...

    java 简单RMI 会议功能实现

    5. **传输机制**:RMI使用Java序列化技术将方法调用和参数转化为字节流在网络上传输,服务器端接收到请求后执行相应操作,再将结果序列化回字节流返回给客户端。 现在,我们详细讲解如何实现这个会议服务: **1. ...

    JAVA RMI简单例子

    默认情况下,RMI使用匿名连接,但在生产环境中,通常需要配置安全策略以限制远程调用的权限。 此外,RMI还可以与EJB(Enterprise JavaBeans)、JMS(Java Message Service)等企业级技术结合,构建更复杂的分布式...

    对 RMI 的简单理解

    - **通信协议**:RMI使用TCP/IP进行网络通信,通过序列化对象和方法调用信息在客户端与服务器之间传递。 3. **RMI注册表**: - RMI注册表是RMI系统的核心组件,它由`rmiregistry`程序启动。默认情况下,RMI注册表...

    RMI使用学习 小结

    ### RMI使用学习小结 #### 一、RMI简介及应用场景 远程方法调用(Remote Method Invocation,简称RMI)是一种Java技术,允许开发者在不同的JVM(Java虚拟机)之间通过网络进行对象间的通信。它使得在一台机器上的...

    Synaptics RMI4 Specification

    《Synaptics RMI4 Specification》是一份详细介绍Synaptics RMI4技术标准的文档,该文档提供了关于如何使用Synaptics RMI4硬件接口的所有必要信息。Synaptics RMI4(Relay Module Interface)是一种用于触控板和触摸...

    javaRMI完整版.pdf

    Java Remote Method Invocation(RMI)是一种分布式对象技术,允许使用 Java 编写分布式对象,不同的 Java 虚拟机(JVM)之间进行对象间的通讯。这使得应用程序(Application)可以远程调用方法,共享各个系统的资源...

    java中的RMI程序

    5. **通信与序列化**:RMI使用Java的序列化机制将方法调用和参数转换为字节流,通过网络发送到远程对象,再将结果反序列化回对象。 现在,我们引入了“简单的加密技术”。在RMI中使用加密可以提高数据传输的安全性...

    java_rmi.zip

    默认情况下,RMI使用匿名连接,这可能导致安全隐患。因此,通常需要配置安全策略和信任库,限制未经授权的访问。 7. **RMI与EJB(Enterprise JavaBeans)**:虽然EJB是更高级的分布式计算模型,但其底层也依赖于RMI...

    rmi.rar_RMI java_basic rmi

    默认情况下,RMI使用Java安全模型进行保护。可以通过调整策略文件来控制对远程对象的访问权限。 7. **RMI的局限性** - 性能:由于涉及网络通信,相比本地调用,RMI会带来一定的性能开销。 - 错误处理:RMI调用...

    (转)通用JAVA RMI服务器框架

    默认情况下,RMI使用Java的SSL支持进行加密,可以通过配置JVM参数进行安全设置。此外,所有远程方法都应抛出`RemoteException`,以处理可能出现的网络通信问题。 【标签】:“源码”表明这个框架提供了具体的实现...

Global site tag (gtag.js) - Google Analytics