中间件方案的两种编程抽象:分布式对象和组件
分布式对象中间件
允许使用面向对象的编程模型开发分布式系统,可由远程方法或者分布式事件调用对象通信。该类方案提供了中间件方案的规约,允许开发者只关注规约接口,同时支持扩展。基于分布式对象的中间件解决方案有Java RMI和CORBA。
分布式对象中间件的限制:
- 隐式依赖:
- 中间件不透明,编程复杂
- 无部署支持
基于组件的中间件
由基于对象方法的中间件演化,克服了其限制。
分布式对象
对象 | 分布式对象 | 分布式对象的描述 |
---|---|---|
对象引用 | 远程对象引用 | 分布式对象具有全局唯一的引用,可作为参数传递 |
接口 | 远程接口 | 提供在远程对象上可以调用方法的抽象规约,该规约使用接口定义语言(IDL)指定 |
动作 | 分布式对象 | 由方法调用初始化,可能会形成调用链;使用RMI远程调用 |
异常 | 分布式异常 | 由于系统的分布特性,会产生额外异常,如消息丢失或进程故障 |
垃圾回收 | 分布式垃圾回收 | 分布式垃圾回收算法 |
与对象不同,分布式对象的实例通过工厂(或称为模板)实例化。
CORBA
CORBA的RMI框架包含:
- 对象模型
- 接口定义语言:包括
- 体系结构
- 外部数据表示
- 远程对象引用的标准格式
CORBA RMI
- CORBA的对象模型
- CORBA IDL:ANSI C++的子集
- IDL模块
- IDL接口
- IDL方法
- 调用语义: 至多一次
- CORBA IDL异常
- IDL 数据结构
- 属性
- 继承:IDL不允许从两个不同接口继承具有相同名称的方法或属性
- IDL 类型标识符:IDL前缀、类型名、版本号
- IDL 编译指令指令
- CORBA语言映射
- 异步RMI
回调、轮询
CORBA的体系结构
- ORB内核
- 对象适配器
- 可移植对象适配器
- 骨架
- 客户存根/代理
- 实现仓库
- 接口仓库
- 动态调用接口
- 动态骨架
- 遗留代码
CORBA远程对象引用
互操作对象引用(IOR)
| 接口仓库标识符或类型 | IIOP | 主机域名 | 端口号 | 适配器名称 | 对象名 |
- 暂态IOR
服务器ORB内核接收到请求消息,该消息包括对象适配器名称和目标对象名称,暂态IOR仅持续到拥有这些对象的进程结束。 - 持久IOR
实现仓库接受请求,他从请求的IOR中抽取出对象适配器的名称。如果对象适配器名称在实现仓库的表中,它会根据表项中指定的主机地址去尝试激活CORBA对象。一旦CORBA对象被激活,实现仓库就将CORBA对象的详细地址返回给客户ORB,该地址作为RMI请求消息的目的地,请求消息中包含了对象适配器名称和对象名。
CORBA 服务
CORBA服务 | 作用 |
---|---|
名称服务 | 支持CORBA命名,允许通过名称定位对象 |
交易服务 | 通过属性定位对象,也是目录服务,底层数据库管理服务类型和相关属性到远程对象引用的映射 |
事件服务 | 允许客户端使用普通的CORBA远程方法调用将通知发送给订阅者 |
通知服务 | 允许定义表达感兴趣事件的过滤器,允许定义底层事件通道的可靠性和排序特性 |
安全服务 | 支持各种安全机制,包括认证、访问控制、安全通信、审计和防止抵赖 |
事件服务 | 支持创建平面和嵌套事务 |
并发控制服务 | 使用锁来实施对CORBA对象访问的并发控制 |
持久状态服务 | 为CORBA提供对象的持久存储,保存并恢复CORBA对象 |
生命周期服务 | 定义创建、删除、拷贝、移动CORBA对象的约定 |