J2EE与中间件 学习笔记4 中间件 RMI JNDI EJB
本文主要参考自上课的PPT
中间件
发展历史
操作系统->数据库管理系统->中间件
操作系统
初始状态:硬件 + 程序
程序的共性(稳定)成分:计算资源管理
产生了:操作系统
分离出了:应用程序
数据库管理系统
初始状态:硬件 + 操作系统 + 应用程序
程序的共性(稳定)成分:数据管理
产生了:数据库管理系统
分离出了:应用软件
中间件
从网上找了一些关于中间件特点的介绍:
①满足大量应用的需要;
②运行于多种硬件和OS平台;
③支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互;
④支持标准的协议;
⑤支持标准的接口。
哑终端
哑终端的“哑”,是因为它只能用来发送、接收和显示字符,不能在它上面运行任何程序、进行任何计算或复杂的交互操作。
我的理解就是,哑终端只有输入输出和与主机通信的能力。
客户机/服务器
与哑终端比,此时会在客户机上执行一部分操作,减少服务器的负担。
基于RPC的分布式计算
此时应是把服务器拆分了,如拆成业务处理服务器和数据服务器。
中间件技术集合
远程过程调用(RPC)
基于RPC的开发过程:
1、定义并编译接口
2、编写实现具体服务功能的代码
3、编译、连接,产生可执行的服务器程序
4、编写客户端代码
5、编译、连接,产生客户程序
6、运行服务器端程序
7、运行客户端程序
远程数据库调用
程序与数据库之间通信
从客户端读取或者写入一个数据库的能力,该数据库在物理上位于一台不同的机器上
远程数据库访问技术:ODBC/OLEDB/ADO
分布式事务处理
- 在一个事务中更新不止一个数据库,而且数据库位于不同的机器上
- 如:某个人从机器X上从账户A转移资金到机器Y上的账户B
- 它需要一个协议:如两阶段提交协议
消息队列
定义
对象中间件
小结
分布式系统提供的服务:远程方法调用、事务、负载平衡、故障恢复、安全……
操作系统的多样性,繁杂的网络程序设计、管理,复杂多变的网络环境,数据分散处理带来的不一致性问题、性能和效率、安全
将应用软件所要面临的共性问题进行提炼、抽象,在操作系统之上再形成一个可复用的部分,供成千上万的应用软件重复使用。这一技术思想最终构成了中间件(middleware)这类的软件。
- 在操作系统与应用系统之间的一层软件,为分布式应用的开发、部署、运行与管理提供支持
- 中间件的建立,有四个原因:性能、控制、数据完整性和易用性。
- 中间件应提供如下特性:
- 易用性——相对于网络底层编程而言;
- 位置透明性——应用不必知道对方网络和应用的地址。不经重新编译,就可把一个应用从一台机器转移到另一台具有不同网络地址的机器上;
- 消息传输的完整性——消息不应丢失或重复;
- 消息格式的完整性——消息格式不应被破坏;
- 语言透明性——使用中间件的程序应能够与另一个用不同语言编写的程序通信。如果用一种不同的语言重写一个程序,其他程序应不受影响。
- 中间件处于操作系统软件与用户的应用软件的中间。
- 中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
主要作用
- 用来屏蔽网络硬件平台的差异性和操作系统与网络协议的异构性,使应用软件能够比较平滑地运行于不同平台上。
- 同时在负载平衡、连接管理和调度方面起了很大的作用,使企业级应用的性能得到大幅提升,满足了关键业务的需求。
中间件的优越性
缩短应用的开发周期
节约应用的开发成本
减少系统初期的建设成本
降低应用开发的失败率
保护已有的投资
简化应用集成
减少维护费用
提高应用的开发质量
保证技术进步的连续性
增强应用的生命力
主要是要了解中间件这个概念,这样以后在写项目的时候才能比较好理解为什么要把诸多东西分离开。
RMI
这部分是Java SE部分的内容,但是还是要用到的,所以就加到笔记里面了。
RMI主要就是一个,用接口来进行通信。
小结
- 使用Java RMI传递对象时有以下几个准则:
- 1.当远程调用方法时,所有的java简单的基本类型都用值传递。这就意味着对参数进行拷贝,远程主机上对数据的任何修改都不会影响原始数据。
- 2.如果要在网络上用数值来传递一个对象,它必须实现java.lang.Serializable,该对象中引用的所有内容必须遵从Java序列化的规则。另外远程主机上对数据进行的任何修改都不影响原始数据。
- 3.如果要在网络上使用引用来传递一个对象,它必须是一个远程对象,并且必须实现java.rmi.Remote。该远程对象的根程序(Stub)将被序列化并传递给远程主机,然后远程主机就可以就可以使用这个根程序来请求回调远程对象,任何时候只有一份数据被拷贝,也就是所有的主机都在更新相同的数据。
JNDI
客户使用JNDI来注册和查询远程对象,与JDBC、JTA、JMS类似
命名和目录服务器
- 命名服务器:
- 把名称和对象关联起来;
- 提供一个根据命名查找对象的工具
- 如:域名解析(Domain Naming Sysem),文件系统(File System Naming Service)
- 命名服务器可以寻找任何类型的普通对象
- 目录对象(directoryobject)/目录入口(directory entry):与普通对象不同,可以存储其属性
- 如:用户目录对象,属性为注册名、密码等
- 目录服务器:扩展和提高了的命名服务器
- 是所有目录对象结合起来的一个系统;
- 类似树的分层结构;
- 如:Active Directory
- 目录供应商提供不同的标准,采用不同的协议:
- LDAP:普遍采用
- NIS(Network Information System)
- Novell目录
Initial Context
- 命名空间的起点:初始上下文
- 从初始上下文库(InitialContext Factory)获得
- InitialContext Factory即JNDIDriver,理解其provider特殊的目录结构;
- 如LDAP Initial Context Factory;File System Initial Context Factory……
- 访问在J2EE服务器上运行的JNDI实现
- J2EE服务器的IP地址
- J2EE服务器接收的端口号
- 必要的用户名和密码
- JDNI树内的开始点
RMI和JNDI看似很复杂,但是用起来的时候还好。RMI的配置相对简单一些,JNDI有诸多的坑要填,配置的时候有点复杂。可以参考我的这篇文章 。
EJB
EJB就是Enterprise Bean。这部分其实没有什么好讲的,直接去看一下PPT就行了。有什么坑我会记录下来到另外一篇博客里面