Java RMI HelloWorld

 

RMI 远程方法调用. 顾名思义就是可以像调用本地程序方法一样调用远程(其他JVM)的程序方法.

 

分为3个部分:

Stub:中介,代理. 封装了远程对象的调用,客户端需要通过stub与server交流

RemoteServer,:远端服务提供者.也就是RemoteObject

Client:客户端

 

代码示意:

 

RemoteObject, 远程服务提供者, 我写了一个main方法,在本地6600端口启动这个服务,

想要启动服务,只要run即可

package demo2;

 

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.server.UnicastRemoteObject;

 

public
class
RemoteEchoServer
extends UnicastRemoteObject implements RemoteEcho {

 

    protected RemoteEchoServer() throws RemoteException {

        super();

    }

 

    @Override

    public Object echo(Object object) throws RemoteException {

        return
object;

    }

 

    public
static
void main(String[] args) throws Exception {

        RemoteEchoServer server = new RemoteEchoServer();

        LocateRegistry.createRegistry(6600);

        Naming.rebind("rmi://127.0.0.1:6600/RemoteEchoServer", server);

    }

 

}

 

 

Stub,代理,与RemoteObject交流均需要通过它

 

package demo2;

 

import java.rmi.Remote;

import java.rmi.RemoteException;

 

public
interface
RemoteEcho
extends Remote {

    Object echo(Object object) throws RemoteException;

}

 

对Stub的进一步封装,即如何得到Stub对象

package demo2;

 

import java.rmi.Naming;

 

public
class RemoteEchoFactory {

 

    public
static RemoteEcho getEcho() throws Exception {

        return (RemoteEcho) Naming.lookup("rmi://127.0.0.1:6600/RemoteEchoServer");

    }

}

 

 

下面就是Client, server启动后,就能正常跑下面这个程序

package demo2;

 

public
class RemoteEchoClient {

    public
static
void main(String[] args) throws Exception {

        long
start = System.currentTimeMillis();

        RemoteEcho echo = RemoteEchoFactory.getEcho();

        System.out.println(echo.echo("kiss u"));

        System.out.println(System.currentTimeMillis()-start);

    }

}

 

Client 通过本地的Factory得到封装好的Stub, 他指向了RemoteObject, 然后就可以像调用本地方法一样直接用.

 

Java RMI HelloWorld的更多相关文章

  1. JAVA RMI helloworld入门

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  2. Java RMI之HelloWorld篇

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  3. Java RMI简单例子HelloWorld

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  4. Java RMI之HelloWorld程序以及相关的安全管理器的知识

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,可以让在某个 Java 虚拟机上的对象调用还有一个 Java 虚拟机中的对象上的方法.可以用此 ...

  5. Java RMI之HelloWorld经典入门案例

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  6. Java RMI 远程方法调用

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  7. Java RMI 最简单实例

    IHello.java import java.rmi.Remote; import java.rmi.RemoteException; public interface IHello extends ...

  8. java RMI 远程调用

    1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...

  9. Exception thrown by the agent : java.rmi.server.ExportException: Port already in use

    今天有个应用一直起不来,感觉配置都对啊,奇了怪了.看日志发现如下: STATUS | wrapper | 2017/01/04 08:09:31 | Launching a JVM...INFO | ...

随机推荐

  1. MongoDB入门(一)

    文档 文档是MongoDB中的基本数据结构,型如:{"name":"Jack","lastname":"xi"} 键值对 ...

  2. tp3.2 phpexcel 简单导出多个sheet(execl表格)

    参考链接:https://blog.csdn.net/u011341352/article/details/70211962 以下是公共类PHPExcel.php文件: // 开始 <?php/ ...

  3. 回溯算法_ BackTracking

     目前还存在的疑问: 1. 所谓的该分支满足条件之后就回退到上一层节点,可是加谁呢? x[i+1]  ?? 加到 N, 不满足target sum条件就返回上一级(同时改变上一级数为 i+1...纵向 ...

  4. (转载)Ubuntu 安装GNU Scientific library(GSL)

    背景: Blei的hlda的C语言实现需要使用C语言的科学计算包GSL,因此决定安装.由于在windows下安装极其繁琐,先在Linux上安装之. 系统环境: Linux version 2.6.35 ...

  5. 查看windows上次开机时间

    首先在电脑上找的[计算机]图标,点击鼠标右键弹出下拉菜单,在下拉菜单里找到[管理]选项 点击下拉菜单里的[管理]选项,弹出计算机管理界面,在左侧菜单栏里的系统工具里可以看到[事件查看器]菜单 点击[时 ...

  6. java中date日期格式的各种转换

    示例 Date dt =new Date(); System.out.println(dt); //格式: Wed Jul 06 09:28:19 CST 2016 //格式:2016-7-6 Str ...

  7. linux虚拟机配置上网(静态IP)和配置tomcat服务环境

    常用命令:vi或者vim编辑 ,按i编辑模式,按ecs进入基本模式,按 :w  保存:按 :wq  退出并保存:mv移动::q退出 :ln -sv apache-tomcat-8.0.24 tomca ...

  8. .NET Core 中使用GB2312编码报错的问题

    错误描述 环境 dotnet 2.1.4 现象 当代码中使用 System.Text.Encoding.GetEncoding("GB2312") //或者 System.Text ...

  9. 2019.02.21 bzoj1249: SGU277 HERO 动态凸包(set+凸包)

    传送门 题意:动态插入点,维护凸包面积. 思路:用setsetset维护极角序来支持面积查询即可. 然后注意选原点的时候要从初始三个点随机平均系数来避免精度误差. 代码: #include<bi ...

  10. Codeforces Round #486 (Div. 3) A. Diverse Team

    Codeforces Round #486 (Div. 3) A. Diverse Team 题目连接: http://codeforces.com/contest/988/problem/A Des ...