`

Java 中RMI小应用

    博客分类:
  • Java
 
阅读更多

最近在学习序列化,看到远程调用也和序列化有关,于是顺便学学RMI,权当玩玩

1:所谓远程,并不需要分布在Internet上,或者在局域网中个,或者在同一台计算机的不同虚拟机之间,我们都可以称之为远程。EJB的实现也是以Java RMI为基础核心的。RMI远程方法调用,可以跨机器通过网络调用,不过Java RMI只支持两边都是Java程序,如果要实现完全两边异构,那么就要用到传说中的Web Service了。为了看好效果,都要建立两个或两个以上工程,当然,如果你有两个机器并通过局域网相连更好,如果能同有互联网的条件就更好了,以下是同一机器不同工程之间的小测试。

(1)首先建立一个服务端的工程,就叫RMIServerTest吧

(2)创建接口ServerInterface,继承Remote接口

 

package com.bona.rmi.server;

import java.rmi.Remote;
import java.rmi.RemoteException;  
  
/** 
* 定义远程接口,必须继承Remote接口, 
* 其中所有需要远程调用的方法都必须抛出RemoteException异常  
*/   
public interface HelloInterface extends Remote {   
    public String sayHello(String name) throws RemoteException;   
} 

 (3)创建接口的实现类 HelloInterfaceImpl,继承UnicastRemoteObject ,实现 HelloInterface 接口

 

 

package com.bona.rmi.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloInterfaceImpl extends UnicastRemoteObject implements HelloInterface{  
  
    private static final long serialVersionUID = 1L;  
  
    public HelloImpl() throws RemoteException {  
        super();  
    }  
  
    @Override  
    public String sayHello(String name) throws RemoteException {  
        return "Hello, " + name;  
    }  
  
}  

 说明:接口的实现类同时要实现Serializable接口,这里继承UnicastRemoteObject也是间接实现Serializable接口,同时,因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。

 

(3)创建应用类,注册和启动服务端RMI,以被客户端调用

 

package com.bona.rmi.server;
import java.net.MalformedURLException;  
import java.rmi.AlreadyBoundException;  
import java.rmi.Naming;  
import java.rmi.RemoteException;  
import java.rmi.registry.LocateRegistry; 
public class HelloServer {  
    public static void main(String args[]) {  
        try {  
            //创建一个远程对象  
            HelloInterface rhello = new HelloInterfaceImpl();      
            //生成远程对象注册表Registry的实例,并指定端口为8888(默认端口是1099)  
            LocateRegistry.createRegistry(8888);  
  
            //把远程对象注册到RMI注册服务器上,并命名为RHello  
            //绑定的URL标准格式为:rmi://host:port/name(协议名可以省略,下面两种写法都可以)  
            Naming.bind("rmi://10.225.112.86:8888/HelloInterface", rhello);  
            //Naming.bind("//10.225.112.86:8888/HelloInterface",rhello);  
  
            System.out.println(">>INFO:远程HelloInterface对象绑定成功!");  
        } catch (RemoteException e) {  
            System.out.println("创建远程对象发生异常!");  
            e.printStackTrace();  
        } catch (AlreadyBoundException e) {  
            System.out.println("发生重复绑定对象异常!");  
            e.printStackTrace();  
        } catch (MalformedURLException e) {  
            System.out.println("发生URL畸形异常!");  
            e.printStackTrace();  
        }  
    }  
}  

运行HelloServer,看到

 

       >>INFO:远程HelloInterface对象绑定成功!

(4)新建一个新的工程,为了方便,也是Java Project,就叫RMIClientTest,

(5) 因为客户端需要有服务端那边提供的接口,才可以访问,所以要将服务端的HelloInterface接口完全拷贝(连同包)到客户端,当然为了方便,你在客户端工程中新建一个完全一样的接口也可以。实际运用中通常是要服务端接口打成jar包来提供的。

(6)创建客户端调用类

 

package com.bona.rmi.client;

import java.rmi.Naming;

import com.bona.rmi.server.HelloInterface;
public class HelloClient {  
    public static void main(String args[]) {  
        try {  
            // 在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法  
            HelloInterface rhello = (HelloInterface) Naming.lookup("rmi://10.225.112.86:8888/HelloInterface");  
            System.out.println(rhello.sayHello("白哥"));  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

 运行,显示成功

 

 

分享到:
评论

相关推荐

    Java RMI的应用.rar_Java RMI_Performance RMI_RMI java_rmi _成绩

    Java RMI的应用——学习RMI的简单编程应用。编写一个课程成绩管理程序,要求用Java RMI实现

    JAVA远程调用RMI与应用

    JAVA远程调用RMI与应用

    java rmi上传文件

    在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...

    一个java RMI应用实例 构建简单的RMI应用

    创建客户端RMI调用服务端的应用程序。 启动服务端,再启动客户端,测试是否调用成功。 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。

    使用Java实现RMI技术应用_pie37w_中间件_

    使用Java实现RMI技术应用,初次了解中间技术。

    JAVA_RMI_实例.pdf

    JAVA_RMI_实例.pdf

    JAVA-RMI使用快速入门.doc

    用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写...

    工厂设计模式在Java RMI中的应用研究.pdf

    工厂设计模式在Java RMI中的应用研究

    JAVA RMI 调查报告

    由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的...

    Java分布式处理技术RMI,JNDI,

    RMI 可以实现对象之间的交互,例如,在一个 Java 应用程序中,一个对象可以调用另一个对象的方法,即使这两个对象在不同的 Java 虚拟机中。 RMI 的用途 RMI 的用途包括: 1. 分布式体系结构:RMI 可以实现分布式...

    javaRMI完整版.pdf

    javaRMI完整版.pdf

    基于Java—RMI分布式技术的应用研究.pdf

    基于Java—RMI分布式技术的应用研究.pdf

    基于Java的RMI技术的研究与应用.pdf

    基于Java的RMI技术的研究与应用.pdf

    Java开发基于rmi的数据库中间件设计源码.zip

    分布式对象技术课程实践:基于rmi的数据库中间件设计,并利用中间件建立一个数据库应用(Java web项目)。 需求分析 数据库操作中间件: 提供数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库...

    JAVA_RMI 技术文档

    底层的通信由RMI实现,对于系统开发人员来说,远程调用和标准的Java方法调用没有什么区别。 为需要传递的对象装载类的字节码 RMI允许调用者向远程对象传递一个对象,因此 RMI提供这种装载对象的机制。

    Java中RMI远程调用

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程...

    分布式实验报告RMI.docx

    答:在 Java 程序中,引用类型(不包括基本类型)的参数传递是按引用传递的,对于在同一个 Java 虚拟机中的对象,可以使用 RMI 传递参数。 RMI 是一种分布式对象通讯机制,允许运行在一个 Java 虚拟机的对象调用...

    分布式程序java 实验名称 基于Java RMI的C/S编程实验

    实验名称 基于Socket的C/S编程实验 实验名称 基于Java RMI的C/S编程实验

Global site tag (gtag.js) - Google Analytics