`

25、RMI_demo1

    博客分类:
  • mvc
 
阅读更多
Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。

在Web Service、SOA的时代,是不是每个应用都应该选用笨拙的Web Service组件来实现,通过对比测试后,RMI是最简单的,在一些小的应用中是最合适的。

package org.nick.rmi;

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

/** 
* 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常 
*/ 
public interface IHello extends Remote { 

    /** 
     * 简单的返回“Hello World!"字样 
     * @return 返回“Hello World!"字样 
     * @throws java.rmi.RemoteException 
     */ 
    public String helloWorld() throws RemoteException; 

    /** 
     * 一个简单的业务方法,根据传入的人名返回相应的问候语 
     * @param someBodyName  人名 
     * @return 返回相应的问候语 
     * @throws java.rmi.RemoteException 
     */ 
    public String sayHelloToSomeBody(String someBodyName) throws RemoteException; 
}

package org.nick.rmi;

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

/** 
* 远程的接口的实现 
*/ 
public class HelloImpl extends UnicastRemoteObject implements IHello { 
    /** 
     * 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常 
     * 
     * @throws RemoteException 
     */ 
    public HelloImpl() throws RemoteException { 
    } 

    /** 
     * 简单的返回“Hello World!"字样 
     * 
     * @return 返回“Hello World!"字样 
     * @throws java.rmi.RemoteException 
     */ 
    public String helloWorld() throws RemoteException { 
        return "Hello World!"; 
    } 

    /** 
     * 一个简单的业务方法,根据传入的人名返回相应的问候语 
     * 
     * @param someBodyName 人名 
     * @return 返回相应的问候语 
     * @throws java.rmi.RemoteException 
     */ 
    public String sayHelloToSomeBody(String someBodyName) throws RemoteException { 
        return "你好," + someBodyName + "!"; 
    } 
}

package org.nick.rmi;

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

/** 
* 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。 
*/ 
public class HelloServer { 
    public static void main(String args[]) { 

        try { 
            //创建一个远程对象 
            IHello rhello = new HelloImpl(); 
            //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上 
            LocateRegistry.createRegistry(8888); 

            //把远程对象注册到RMI注册服务器上,并命名为RHello 
            //绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的) 
            Naming.bind("rmi://localhost:8888/RHello",rhello); 
//            Naming.bind("//localhost:8888/RHello",rhello); 

            System.out.println(">>>>>INFO:远程IHello对象绑定成功!"); 
        } 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(); 
        } 
    } 
}

package org.nick.rmi;

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

/** 
* 客户端测试,在客户端调用远程对象上的远程方法,并返回结果。 
*/ 
public class HelloClient { 
    public static void main(String args[]){ 
        try { 
            //在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法 
            IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello"); 
            System.out.println(rhello.helloWorld()); 
            System.out.println(rhello.sayHelloToSomeBody("anybody")); 
        } catch (NotBoundException e) { 
            e.printStackTrace(); 
        } catch (MalformedURLException e) { 
            e.printStackTrace(); 
        } catch (RemoteException e) {
            e.printStackTrace();   
        } 
    } 
}

分享到:
评论

相关推荐

    rmi-demo.zip_DEMO_Java RMI_rmi

    1. **定义远程接口**:首先,你需要创建一个接口,并将其标记为`java.rmi.Remote`的子接口。这个接口定义了远程对象将要暴露的方法。 2. **实现远程接口**:然后,创建一个实现了该远程接口的类。这个类的实例将在...

    RMI-demo.zip_DEMO_rmi

    "RMI-demo.zip_DEMO_rmi"是一个示例项目,用于教学目的,展示了RMI的基本用法。 该压缩包包含以下四个主要文件: 1. **FirstProblem.jar**:这是一个包含服务器端和客户端所需类的Java可执行jar文件。RMI应用通常...

    RMI.rar_DEMO_rmi

    在这个“RMI.rar_DEMO_rmi”压缩包中,包含了一个RMI的示例项目,对于初学者或者想要深入理解中间件技术的人来说是一个很好的学习资源。 首先,我们来了解RMI的基本概念。RMI的核心思想是,一个Java对象可以在本地...

    dubbo_ demo、角色_ RPC_原理 _RMI .zip

    Dubbo_ demo通常包含一系列示例代码,用于演示如何在项目中集成和使用Dubbo,帮助开发者快速理解和实践。 在分布式系统中,RPC机制扮演着至关重要的角色。RPC允许一个进程(客户端)调用另一个进程(服务端)的方法...

    java RMI简单Demo

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...

    ehcache rmi集群demo

    在这个“ehcache rmi集群demo”中,我们将探讨如何将Ehcache与RMI结合,实现一个跨节点的缓存集群。 首先,Ehcache的核心概念包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Entry)等。缓存管理...

    RMI+EHCACHE Demo

    【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...

    一个简单的RMI程序demo

    该demo分为MainService.java服务端和MainClient.java客户端,既可以都在本地运行, 也可以上传到Linux环境使用 java -cp RMITest-0.0.1-SNAPSHOT.jar com.xxz.mainclient.MainClient 命令运行

    rmi-demo.zip

    1. **定义远程接口**:创建一个继承自`java.rmi.Remote`的接口,定义要在远程对象上执行的方法。这些方法通常抛出`java.rmi.RemoteException`,这是RMI框架处理网络异常的方式。 2. **实现远程对象**:创建一个类...

    RMI demo

    1. **远程对象**:这是RMI的核心,它是一个实现了特定接口的Java对象,该接口定义了可供远程调用的方法。这些远程对象可以在网络中的不同JVM上运行。 2. **接口**:远程对象必须实现的接口,这个接口中的方法是远程...

    Dubbo_Demo_HelloWorld

    1. **Dubbo简介** Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了服务注册、服务发现、负载均衡、流量控制等核心功能,广泛应用于微服务架构中。Dubbo的目标是让分布式服务开发变得简单、透明,...

    DWRDemo.rar_DEMO_dwr Demo

    **1. DWR的基本概念** DWR的核心是远程方法调用(Remote Method Invocation, RMI),但它是在Web环境中的实现。DWR允许JavaScript代码在用户浏览器中直接调用服务器端的Java方法,使得前端与后端的交互变得更加实时...

    RemObjects_Server_demo.rar

    RemObjects 是由 RemObjects Software 公司开发的一套软件开发框架,它提供了一种简单而高效的方式来进行远程方法调用(RMI),支持多种编程语言,如 Delphi, C#, Swift, Java 等。通过 RemObjects,开发者可以在...

    java RMI demo

    1. **RMI服务器(rmiserver)**: - **注册表(Registry)**:RMI系统的核心组件,用于存储远程对象的引用。服务器启动时,会将实现远程接口的实例注册到Registry中,赋予一个唯一的名称。 - **远程接口(Remote ...

    java rmi demo

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

    Java RMI(远程方法调用)Demo

    1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它继承了java.rmi.Remote接口。远程接口中的每个方法都可能抛出RemoteException,表示网络通信中可能出现的问题。 2. **远程实现(Remote ...

    DUBBO_SPRING_DEMO

    1. **服务提供者(Provider)**:提供服务的模块,它需要定义服务接口并实现该接口,然后通过Dubbo配置暴露服务。在Spring配置文件中,会声明服务接口、实现类,并使用`dubbo:service`标签来暴露服务。 2. **服务...

    .net TCP 下的RMI测试Demo

    本测试Demo旨在展示如何在.NET环境中利用TCP实现RMI。 RMI的核心概念包括服务器端(Server)、客户端(Client)以及代理对象(Stub)。在服务器端,我们需要定义服务接口和服务实现,这两个部分定义了可以被远程...

    dubbo_demo

    1. **README.md**:这是一个 Markdown 文件,通常包含项目简介、安装指南、使用步骤等重要信息,是理解和运行 "dubbo_demo" 的入口。 2. **zookeeper-3.4.6.rar**:ZooKeeper 是 Apache 的一个分布式协调服务,它在...

    dubbo入门 dubbo_demo.zip

    1. **服务提供者(Provider)**:是暴露服务的服务端,它实现了服务,通过Dubbo暴露服务供消费者调用。 2. **服务消费者(Consumer)**:是调用远程服务的客户端,它通过Dubbo消费服务提供者提供的服务。 3. **服务...

Global site tag (gtag.js) - Google Analytics