中间件技术

中间件技术
中间件技术

中间件技术论文

学生姓名:余哲圣

学号:201120181120

班级:1121811

指导教师:吴光明

2014年5 月2 1 日

一、简介

中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必需要有一个通信中间件,即中间件=平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软和实用软件区分开来。它隐藏了计算机体系结构、操作系统、编程语言和网络技术等方面的异构性,将复杂的协议处理、分割的内存空间、数据复本、网络故障、并行操作等问题与应用程序隔离开来,为上层应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。中间件已成为构建现代分布式应用、集成系统的一种不可或缺的成分,数据访问、企业资源规划、多媒体、无线/移动计算、电子商务、网格等都是它的典型应用领域。中间件技术屏蔽了底层分布式环境的复杂性和异构性,简化了分布式应用程序的开发,使分布式应用程序的健壮性、可扩展性、可用性更好。本文介绍了中间件的定义、分类、主流中间件技术平台,分析了中间件技术面临的挑战,提出了中间件技术研究的几个发展趋势,即网格技术、面向移动计算、面向服务质量等。

二、关键词:中间件分类技术平台发展趋势

计算机系统最初阶段多是单机系统,多个用户是通过联机终端来访问。随着网络的出现,产生了客户/服务器的计算服务模式,多个客户端可以共享数据库服务器和打印服务器等。随着计算机和网络技术的飞速发展,许多软件需要在不同厂家的硬件平台、网络协议异构环境下运行,应用的规模从局域网发展到广域网,应用范围面向三层和多层体系结构的分布式环境,在分布式环境中,无论是硬件平台还是软件平台都不可能做到统一,而大规模的应用软件通常要求在软硬件各不相同的分布式网络上运行。中间件产生以前,应用软件直接使用操作系统、网络协议和数据库等开发,开发者不得不直接面对许多复杂棘手的问题,如操作系统的多样性、繁杂的网络程序设计和管理、复杂多变的网络环境、数据分散处理带来的不一致性问题等等,这些与用户的业务没有直接关系,但又必须解决,耗费了大量的时间和精力,因此开发者迫切需要一种基于标准的、独立于计算机硬件以及操作系统的开发和运行环境,于是,中间件技术应运而生。

2.1 中间件的概念

在众多关于中间件的定义中,比较普遍接受的是IDC表述:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源;中间件位于客户机/服务器的操作系统之上,管理计算资源和网络通信。IDC对中间件的定义表明,中间件是一类软件,而非一种软件;中间件是介于操作系统(包括底层通信协议)和各种分布式应用程序之间的一个软件层。总的作用是建立分布式软件模块之间互操作的机制,屏蔽底层分布式环境的复杂性和异构性,为处于自己上层的应用软件提供运行与开发环境,帮助用户灵活、高效地开发和集成复杂的应用软件。在具体实现上,中间件是一个用应用程序接口定义的分布式软件管理框架,具有强大的通信能力和良好的可扩展性。中间件在分布式系统中的位置如图1所示。

图1

2.1 中间件的分类

随着计算机软件技术的发展,中间件技术也已日渐成熟,并且出现了不同层次、不同类型的中间件产品。按照IDC分类方法,中间件可分为以下6类:

2.2 终端仿真/屏幕转换

用以实现客户机图形用户接口与已有的字符接口方式的服务器应用程序之间的互操作。

2.3 数据访问中间件

适用于应用程序与数据源之间的互操作模型,客户端使用面向数据库的API,以提请直接访问和更新基于服务器的数据源,数据源可以是关系型、非关系型和对象型。这类中间件大都基于SQL语句,采用同步通讯方式。此类中间件使应用开发简单化,但如果透过广域网使用,则会带来严重的效率问题,因为在低速网上来回交互SQL语句会使通讯流量过大,同时对数据压缩、加密带来不便。

2.4 远程过程调用中间件

RPC机制是早期开发分布式应用时经常采用的一种同步式的请求应答协议。通过这种协议,程序员编写客户方的应用,需要时可以调用位于远端服务器上的过程。RPC扩展了过程语言中的“功能调用/结果返回”的机制,使得它可以适用于一个远程环境。由于RPC机制是同步方式,因而在工作的时候,要求客户方和服务方均能正确工作才能很好地运行,有一方不能工作将导致RPC失败。在网络故障、机器故障存在的情况下,这一要求是很难保证的。另外,由于大多数RPC机制很难建立点到点的关系,因而也很难用在面向对象的编程当中。

2.5 消息中间件

越来越多的分布式应用采用消息中间件来构建,通过消息中间件把应用扩展到不同的操作系统和不同的网络环境。基于消息的机制更多地适用于事件驱动的应用,当一个事件发生时,消息中间件通知服务方应该进行何种操作。其核心安装在需要进行消息传递的系统上,在它们之间建立逻辑通道,由消息

中间件实现消息发送。消息中间件可以支持同步方式和异步方式,实际上是一种点到点的机制,因而可以很好的适用于面向对象的编程方式。中间件领域目前最热门的技术是异步的消息中间件,异步中间件技术比同步中间件技术具有更强的容错性,在系统故障时可以保证消息的正常传输。

2.6交易中间件

是专门针对联机交易处理系统而设计的,如银行业务系统、定票系统等。联机交易处理系统需要处理大量并发进程,处理并发涉及到操作系统、文件系统、编程语言、数据通讯、数据库系统、系统管理、应用软件,交易中间件就是一组程序模块,用以减少开发一个联机交易处理系统所需的编程量。

2.7 对象中间件

传统的面向对象技术通过封装、继承及多态提供了良好的代码重用功能,但是这些对象只存在一个程序中,外面的世界并不知道它们的存在,也无法访问它们。面向对象的中间件就是要解决这些问题,面向对象的中间件提供一个标准的构件框架,能使不同厂家的软件通过不同的地址空间、网络和操作系统交互访问。该构件的具体实现、位置及所依附的操作系统对客户来说都是透明的。

实例程序设计

一、实现基本功能

基于需要设计一个有前台界面,能实现用户的添加、修改,角色的添加修改及角色的分配。

二、分析

基于JPA和EJB功能进行全局设置和主要功能的实现。JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。EJB是sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (E nterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在J2EE里,Enterprise Java Beans(EJB)称为J ava企业Bean,是Java的核心代码,分别是会话Bean (Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。利用web实现前台界面。

三、设计过程及分析

1、数据库参考模型

2、前台界面

基于实验要求,同时为了方便简洁,前台利用JSP编写生成:

①、人员信息管理界面,包括部门信息、员工信息、角色信息和角色分配信息

模块连接。此界面即为主页。

②、部门信息界面,通过人员信息管理界面点击可进入此模块。此模块主要进

行部门的添加及其修改和删除,在这模块还可以桥清楚的对部门进行编号便于管理。同时还有返回主页和各个信息点的连接。

③、人员信息界面,通过人员信息管理界面点击相应的链接可进入此模块。该

模块的主要内容及实现的功能是,进行员工的修改和添加、删除,对员工进行具体的信息录入,方便管理。同时也包含了返回主页等界面的链接。

④、角色信息界面,同样的通过人员信息管理界面链接相应的链接可进入此模

块。这个模块的主要功能是进行角色的添加、修改和删除,并对其编号,方便管理与查询,还包含了对角色的描述(职场定位)。跟以上模块一样,同样也有返回主页等信息页面的链接。

⑤、角色分配信息界面,通过主页上的链接即可进入此模块。该模块的功能顾

名思义,就是对角色进行分配。包含了角色的ID和职称等信息,同时也可以对角色进行添加和修改及删除。同样的,也包含了返回主页等界面的链接。

3、具体模块代码分析

①、主页代码主要如下:

人员信息管理

部门信息

员工信息

  • 角色信息
  • 角色分配信息
  • ②、部门信息功能模块主要代码分析如下:

    首先是部门的修改,定义一个changeServlet类。主要代码如下:

    public class changeServlet extends HttpServlet {

    @EJB

    private DeparmentFacadeLocal deparmentFacade;

    第二是部门的修改响应。第三是添加、删除部门信息的主要设计。最后是相应成功添加部门信息的弹窗提示。此模块的设计方便简洁,但却实现了要求

    要实现的功能。

    ③、角色信息模块设计分析:

    public class NewServlet extends HttpServlet {

    @EJB

    private RoleinfoFacadeLocal roleinfoFacade;

    首先是此模块的界面设计代码,和请求服务链接。

    第二是角色信息添加,代码如下:Roleinfo roleinfo=new Roleinfo(); String roleid=request.getParameter("roleid");

    String rolename=request.getParameter("rolename");

    rolename = new String(rolename.getBytes("8859_1"), "utf-8");

    String description=request.getParameter("description");

    description = new String(description.getBytes("8859_1"), "utf-8");

    roleinfo.setRoleid(roleid);

    roleinfo.setRolename(rolename);

    roleinfo.setDescription(description);

    roleinfoFacade.create(roleinfo);

    第三是角色信息的修改:同样要定义一个类。在下来是修改角色信息的主要代码。

    四是删除角色代码,和成功删除响应,主要代码如下:

    Roleinfo roleinfo=new Roleinfo();

    String roleid=request.getParameter("roleid");

    roleinfo=null;

    roleinfo=roleinfoFacade.find(roleid);

    roleinfoFacade.remove(roleinfo);

    out.print("");

    ④、角色分配信息模块分析:

    首先角色信息的添加,代码如下:

    String id=request.getParameter("id");

    String roleid=request.getParameter("roleid");

    String staffid=request.getParameter("staffid");

    StaffRole staffrole=new StaffRole();

    staffrole.setId(id);

    staffrole.setRoleid(roleid);

    staffrole.setStaffid(staffid);

    staffRoleFacade.create(staffrole);

    二是角色分配功能代码及修改响应,部分代码如下:

    StaffRole staffrole=staffRoleFacade.find(id);

    staffrole.setRoleid(roleid);

    staffrole.setStaffid(staffid);

    三是角色信息的删除:

    StaffRole staffrole=staffRoleFacade.find(id);

    staffrole.setRoleid(roleid);

    staffrole.setStaffid(staffid);

    staffRoleFacade.edit(staffrole);

    out.print("