文档章节

JAVA基础之分布式对象

克温s
 克温s
发布于 2015/12/03 18:36
字数 587
阅读 16
收藏 0
  1. RMI,远程方法调用。

  2. 传统的Web应用程序,只限于对请求使用HTTP协议,对响应使用HTML

  3. 使用代理的RMI,代理之间通信实现技术:

    CORBA,通用对象请求代理架构,支持任何编程语言编写的对象之间的方法调用。使用二进制的IIOP协议来实现对象间的对信。IDL定义接口

    Web服务架构WS,统称为WS-*,独立于编程语言,基于xml格式的SOAP协议通信。WSDL定义接口

    RMI,Java远程方法调用技术,支持JAVA分布式对象之间的方法调用。

    如果相互通信的程序都是由java实现,那么,CORBA与WS*-的通用性和复杂性就不是需要的。RMI是专门针对java之间的通信。


  4. RMI调用过程

    RMI使用序列化机制编码,SOAP协议中对象被编码为xml

    实现远程对象和获取客户端存根的细节有赖于分布式对象采用的技术

  5. RMI编程模型

    1)接口与实现

    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    public interface Warehouse extends Remote {
        double getPrice(String description) throws RemoteException;
    }
    /**
     * Unicast产生单一对象ip地址和端口
     */
    public class WarehouseImpl extends UnicastRemoteObject implements Warehouse {
        private Map<String, Double> prices;
    
        protected WarehouseImpl() throws RemoteException {
            prices = new HashMap<String, Double>();
            prices.put("Blackwell Toaster", 24.95);
            prices.put("ZapXpress Microwave Oven", 24.95);
    
            //如果不extends UnicastRemoteObject
            //调用静态方法实例化
    //        UnicastRemoteObject.exportObject(this, 0);
        }
    
        @Override
        public double getPrice(String description) throws RemoteException {
            Double price = prices.get(description);
            return price == null ? 0 : price;
        }
    }

    2)RMI注册表

    public class WarehouseServer {
        public static void main(String[] args) throws RemoteException, NamingException {
            System.out.println("Constructing server implementiong");
            WarehouseImpl warehouse = new WarehouseImpl();
    
            System.out.println("Bingding server implementiong to registry");
            Context context = new InitialContext();
            context.bind("rmi:warehouse", warehouse);
    
            System.out.println("Waiting for invocations from clients");
        }
    }
    public class WarehouseClient {
        public static void main(String[] args) throws NamingException, RemoteException {
            Context context = new InitialContext();
            System.out.println("RMI registry bindings:");
            Enumeration<NameClassPair> e = context.list("rmi://localhost/");
            while (e.hasMoreElements()) {
                System.out.println(e.nextElement().getName());
            }
    
            String url = "rmi://localhost/warehouse";
            Warehouse warehouse = (Warehouse) context.lookup(url);
    
            String descr = "Blackwell Toaster";
            double price = warehouse.getPrice(url);
            System.out.println(descr + ":" + price);
        }
    }


  6. JVM之间传递值有两种机制

    1)实现了Remote接口的类的对象作为远程引用传递;

    2)实现了Serializable接口,没有实现Remote接口的类的对象将使用序列化复制传递;

    序列化对于大型对象来说比较慢,而已只是传递副本,不能改变传递参数;可以选择传递引用,远程调用方法比本地调用方法开销大得多。


© 著作权归作者所有

克温s
粉丝 2
博文 52
码字总数 19221
作品 0
东城
项目经理
私信 提问
RMI:Java中的分布式计算框架

RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实...

qq_39521554
2018/05/15
0
0
Java序列化技术即将被废除!!!

我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据...

Java技术栈
2018/05/30
137
0
JavaEE程序员必读图书大推荐

下面是我根据多年的阅读和实践经验,给您推荐的一些图书: 第一部分: Java语言篇 1 《Java编程规范》 星级: 适合对象:初级,中级 介绍:作者James Gosling(Java之父),所以这本书我觉得...

长平狐
2012/11/12
1K
0
本地方法怎么映射Java层的数据类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyangzhizhou/article/details/79576578 前言 Java 语言上定义了不同的数据类型,比如有基础类型、等等,还...

超人汪小建(seaboat)
2018/03/16
0
0
轻量级的关系型数据库中间件 - Sharding-JDBC

Sharding-JDBC是一个开源的适用于微服务的分布式数据访问基础类库,它始终以云原生的基础开发套件为目标。 Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,...

亮_dangdang
2016/01/27
49.4K
41

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
33分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
35分钟前
7
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
38分钟前
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
43分钟前
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部