当前位置:文档之家› 基于Java的中间件的设计与实现

基于Java的中间件的设计与实现

基于Java的中间件的设计与实现作者:于虎单位:三星通信研究院班号:G08061学号:GS0806126摘要:简要介绍了中间件的定义和原理,在此基础上讨论了基于异构网络环境下的一个具体中间件项目的实现,并对其采用的关键技术和设计思想进行了分析。

关键词:Java;中间件;网络技术Abstract:Middleware, is a layer of software between the network and the applications. This software provides services such as identification, authentication, authorization, directories, and security. In today's Internet, applications usually have to provide these services themselves, which leads to competing and incompatible standards. By promoting standardization and interoperability, middleware will make advanced network applications much easier to use.The definition and principles of middleware are introduced.The implementation of a middleware project basedon heterogeneous network environment is discussed.Its key techniques and designing methods are analyzed.Key words:JAVA;middleware;network environment1 引言随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间进行移植,或者一个平台需要支持多种应用软件和管理多种应用系统,软、硬件平台和应用系统之间需要可靠和高效的数据传递或转换,使系统的协同性得以保证。

这些,都需要一种构筑于软、硬件平台之上,同时对更上层的应用软件提供支持的软件系统,而中间件正是在这个环境下应孕而生。

由于中间件技术正处于发展过程之中,因此目前尚不能对它进行精确的定义。

比较流行的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。

中间件位于客户机/服务器的操作系统之上,管理计算资源和网络通讯。

从中间件的定义可以看出,中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,定义中特别强调了其网络通讯功能。

2 中间件的定义和分类中间件比较普遍接受的是IDC表述:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

该定义表明,中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。

如下图中间件的表示:中间件的分类方法较多,按照IDC 的分类方法,中间件可分为六类。

分别是数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等。

数据访问中间件:是为了建立数据应用资源互操作的模式,对异构环境下的数据库实现联接或文件系统实现联接的中间件;远程过程调用中间件:通过这种远程过程调用机制,程序员编写客户方的应用,需要时可以调用位于远端服务器上的过程;消息中间件:用来屏蔽掉各种平台及协议之间的特性,进行相互通信,实现应用程序之间的协同;交易中间件:是在分布、异构环境下提供保证交易完整性和数据完整性的一种环境平台;对象中间件:在分布、异构的网络计算环境中,可以将各种分布对象有机地结合在一起,完成系统的快速集成,实现对象重用。

目前国内外有不少厂商都开发出自己的中间件产品,其中有全球最大的独立中间件厂商BEA公司,还有像IBM、Oracl e和Microsoft、HP、Sun等大厂商也早已涉足电子商务中间件。

主流方向,它提供一种通讯机制,透明地在异构的分布计算环境中传递对象请求,而这些对象可以位于本地或者远程机器。

面向对象标准原本只有一个,即CORBA(公共对象请求代理体系结构),该标准由包括BEA、IBM、Oracle、Sun和Sybas e等公司在内的众多厂商一起制定,从而形成了一个庞大的CORBA联盟势力。

后来,Sun推出了企业级JavaBeans(EJB),用自己易使用的程序模型来对CORBA做出了改进。

微软COM(Component Object Model,组件对象模型)的出现,使面向对象中间件市场里又多了一个标准,这样,面向对象中间件产品实际上形成了两大标准,一是微软的COM,一是JavaBeans。

从宏观上看,中间件可以分为3大类:数据类:用于数据的存取、利用和增值,此类中间件用于构建以数据为中心的应用。

处理类:把分布在网络结点上的各个应用或处理连接在一起,形成一个统一的分布式应用。

分布式构件类:支持构件式应用,未来应用的发展方向,目前竞争激烈。

3 中间件的原理由中间件的定义可看出,中间件的核心在于网络通信,将不同时期、不同操作系统上开发的系统集成起来,彼此协调工作,这是单一的操作系统、数据库系统无法解决的问题。

目前国际互联网络中事实上的网络通信协议是TCP/IP协议,许多应用层协议均以该协议为基础。

Java语言可用于网络编程,提供了功能强大的网络支持,URL访问网络资源的类和Socket通信的类来满足不同的需求。

客户基于服务器之间的使用的大部分通信都是基于TCP/IP协议中传输层接口Socket来实现的,它解决了两进程间通信的问题。

Socket其实就是进程间点对点的通信,是网络编程的一个接口。

Socket通信模式如图1所示。

Socket因为是基于传输层的,所以是比较原始的通信协议。

通过Socket的数据表现形式为字节流,因此,通信双方要想完成某项具体应用必须按照双方约定的方式进行数据的格式化和解释。

虽然使用Socket编程相对比较麻烦,但是它具有更强的灵活性和更广泛的使用空间。

Socket由主机地址、端口号、协议种类构成。

一般一个主机会提供多种服务,一个服务会由一个或多个进程来实现,而每个进程会由端口号来标识,它是网络协议软件和与应用程序打交道的结合点。

这样网络环境下的进程间通信,必须指定主机地址、端口号、协议种类。

4 中间件的设计实现4.1 示例现以某自来水公司收费系统的一个子系统为例来阐述中间件的设计实现。

该子系统的架构与部署如图2所示。

水费由各银行网点代收,银行网点1到银行网点由于历史原因,各银行网点的终端机软硬件环境不尽相同,采用了不同的编程语言和技术来实现,子系统在原来系统的基础上进行二次开发,新增的中间件部署在各个服务器上,利用Socket与各网点的终端机进行信息的交互,中间件将从各终端发来的字节流转换为字符串再传给后台的数据库处理,数据库处理完后将结果以字符串形式返回给中间件,中间件再将该字符串信息转换为字节流返回给各银行网点的终端处理。

在Java中,用数据流表示字节级的通信,数据流是发送和接收信息(数据字节)的管道。

以流来表示网络上文件之间,甚至应用程序之间的通。

Java流分为字符流和字节流。

二者的区别是字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。

Java内用Unicode编码存储字符,字符流处理类负责将外部的其他编码的字符流和Java内Unicode字符流之间的转换[3]。

设计系统时,必须选择正确的流,对应不同的流,需要不同的流构建器或流过滤实现。

4.2 配置文件由于中间件会部署在不同的服务器上,因此要允许一些环境参数由用户修改设置。

中间件也可能部署在不同的语言环境中,一些提示信息是中文还是英文以及提示内容均可由用户修改定制。

这些都由配置文件来存储。

例如以下一些参数存放在SysConfig.properties文件中。

# DataBase parametersDBServer=192.168.17.12DBPassword=test# Message Informa tionMsgl=正在连接服务器M sg2=connecting to server类SysConfig用于读取该配置文件中存储的参数。

public class SysConfig extends Properties{private static SysConfig instance =null;public static synchronized void initialize(Properties props){//单例模式if(instance!=nul1){return;}instance=new SysConfig(props);}protected static synchronized void initialize(){if(instance!=nul1){return;}Properties props =new Properties();File sysConfigName=null;FileInputStream is = null;try { sysConfigName = new File (“sysconfig.file ”);is =new FileInputStream (sysConfigName);}catch(FileNotFoundException e){ }if(is==nul1) {System.Err.println(“Error:SysConfig file not found!”);}try {props.1oad(is);}catch (IOException e){ }try {is.close();}catch (IOException e){}initialize(props);}public static SysConfig instance(){if(instance==nul1){initialize();}return instance;}//其余略}比如要取出数据库服务器的值,只需调用该语句即可取得: SysConfig.instance ().getProperty(”DBServer”)。

相关主题