《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于内容管理中间件的Java应用系统

基于内容管理中间件的Java应用系统

2009-01-06
作者:王肖锋,曹作良

    随着Internet技术的成熟和普及,企业的商业信息来源远超出了传统数据库的形式,如财务报表、办公文档、扫描的图片、电子邮件、音频和视频等。如何对这些“非结构化”信息即“内容”进行有效的数字化管理,将成为继“数据管理”之后用户的一个新需求[1]。同时企业应用系统模式逐步向网络化、分布式、移动性及各种业务系统集成的方向转变。为了满足用户新的需求和适应企业应用系统的这种转变,采用中间件技术、Java技术及J2EE多层次应用体系结构,建立在有效内容管理基础上的企业应用基础平台,已成为目前企业信息系统建设的主流。中间件位于操作系统、网络和数据库之上,应用软件的下层,是为了给上层应用软件提供开发和运行环境,帮助用户快速、灵活、有效地开发和集成复杂的应用软件。根据中间件在系统所起的作用及采用的技术不同,中间件可以分为5类。其中数据库中间件是在所有中间件中的应用最广泛、技术最成熟的一种[2]。把Web服务和高效的数据库管理系统的数据服务结合在一起,可以组成大型的多媒体数据库管理系统。它能够使数据库管理系统达到最优化,并且为Web应用提供开发环境和网络服务功能。

1.内容管理中间件 

    内容管理中间件是用来实现客户端与数据库之间的通信。它同时存在于客户端和服务端,负责客户/服务器间透明的请求和应答交换。其内容生命周期包括:内容生成负责内容生成/更新,协作以及检查/批准;内容管理负责内容权限设置,版本控制和存取控制;内容发布/传送负责针对特定输出设备或目标用途进行定制。总之,基于网络的内容管理中间件不单具有一般数据库中间件功能,完成对数据库操作的封装,而且还能提供Web服务,完成对非操作型互联网页面内容的生成、组织、传送和维护。

1.1.内容管理中间件的功能 

    内容管理中间件是一种把网络的内容管理和数据库管理系统的数据服务相结合的中间件。该中间件包括dao、util、dm、bs 4个包,分别为数据访问对象包、方便客户端访问工具包、数据管理包和业务逻辑包。dao包负责业务逻辑与数据库的链接,对数据库表存取数据,并进行数据格式的转换。dao包中的方法可以由bs包中的业务逻辑调用,它是直接与数据库进行转换的唯一接口。DBSessionManager类负责与数据库的连接及数据访问,并负责数据格式的转换,如GB2312码与ISO8859的转换;DBHandler类负责数据库的配置,如数据库所在服务器的名称,访问数据库的用户名和密码,数据库的端口号等。

    内容管理中间件具有以下基本功能:

1)  分布式事务处理:CMM应用程序框架提供Web应用所应有的最底层结构,它分为三个独立的层次:表示层、商务层、数据层。利用它只需向框架中加入一个应用程序对象和一系列表示层、商务层、数据层对象即可搭建一个应用程序系统。

2)  直接访问数据库:就像访问本地数据库一样,它支持SQL语言的关系数据库。

3)  集成和开发工具:为用户提供了大型关系数据库与网络应用软件以及企业内部或外部的其他商务应用软件的集成能力。

4)  存取权限控制(AccessControl):为用户提供了“加锁”和“解锁”的功能。每个用户每次只能存取数据库中的一个“记录(record)”。

5)  工作流程(Workflow)管理:工作流程管理方便了内容创建,编辑,审核以及应用人员间的交流。每一个合格的“记录(record)”必须要依次通过所有审批环节。

6)  动态内容管理(DynamicContent):动态内容管理是指页面内容可以持续更新,以实现动态跟踪最新新闻或信息,从而吸引更多新的浏览者和已有的浏览者的关注。

1.2内容管理中间件的实现 

    下面以dao数据访问对象包为例来说明中间件的实现。中间件的目标就是要实现一个与数据库的通用接口,同时该层次的设计要满足独立于数据库具体设计实现。我们使用两个管理层次上的BMP 实体Bean完成对数据库的管理,一个管理数据库中的各个用户表,另外一个管理相应表格中的各个纪录。下面是对管理数据库中的用户表的实现。

    Table远程接口继承了javax.ejb.EJBObject,客户端通过Bean管理数据库中的用户表时操作这个接口。定义了以下4个方法:

      public abstract FieldDescriptor getFieldDescriptor(String s) 

      public abstract Set getFieldNames() 

    public abstract Set getPKFieldNames()   

    public abstract String getTableName() 

TableHome接口继承了javax.ejb.EJBHome,该接口由EJB容器的工具来实现。定义了基本的查询方法如下:

      public abstract Collection findByPattern(String s)

    public abstract Table findByPrimaryKey(String s)

    public abstract Table findByTableName(String s)

TableBean作为BMP的实体Bean,数据持久性都是自己手工管理的。EJB装载时首先得到数据库连接的对象(java.sql.Connection对象),使用该对象得到指定数据库的DatabaseMetaData类对象,然后使用DatabaseMetaData类对象得到EJB主键(表格名称)指定的表格的主键(PrimaryKey字段)。在TableBean中定义了3个查询方法:

public String ejbFindByTableName(String s)

public String ejbFindByPrimaryKey(String s)

public Collection ejbFindByPattern(String s)

    表名称作为TableBean的主键,因此前两个方法是一样的,它可以根据数据库内惟一的主键值找到惟一的实体Bean的实例。第三种方法则得到多个表格的名称,考虑到主键字段不一定唯一,使用Java容器类型变量存放主键字段和字段描述。

2.基于J2EE的远程教学系统 

2.1 系统架构 

    远程教学系统的一个突出特点是将人员信息、教学资源甚至系统软件资源全部纳入数据库管理之中。依靠内容服务器的支持,对所有信息资源进行便捷有效的管理,尤其是作业和考试的数据库的实现。这样可以克服单纯依靠电子邮件来实现的种种弊端。使用CMM可以方便地构建多层体系结构,多层应用模式的使用,给系统带来更好的维护性、可扩展性。在多层应用结构中,CMM可以紧密地融合到系统中,开发人员可以更加容易使用开发平台和开发工具,给系统带来更多性能的提高。

    CMM在整个远程教学系统的位置如图1。它由以下3个核心组件构成:ServiceManager,Modeler,和Wrap。ServiceManager其功能类似于一个数据库管理者(DBA),提供了一个友好的网络界面以实现终端用户与数据库的交流。Modeler内置了所有数据库操作逻辑,主要包括存取控制,工作流程控制等。Wrap它是可以与数据库直接对话的EJB组件,描述了数据库的基本单元——表和记录,它还可以集成企业已有关系型数据库。该系统采用符合J2EE技术规范的多层结构的B/S应用模式。系统逻辑上分为4个层次:客户层、Web服务层、应用逻辑层和数据层。客户层负责人机用户的输入信息、请求服务器服务和显示服务器端返回的结果。Web服务层负责接受客户端的请求、调用EJB进行业务逻辑处理及通过JDBC直接访问后台存储系统。应用逻辑层主要进行业务逻辑处理和系统级服务以及与Servlet/Jsp通信及后台的数据库通信。数据层负责数据的存储和组织、数据库的分布式管理和数据库的备份与同步[3][4]

2.2 系统特点 

1)  客户端零维护。整个系统完全基于Java语言来实现,所有应用程序运行在服务器端,客户端通过浏览器来执行应用程序。

2)  平台无关性。由于Java语言和J2EE标准的平台无关性,因此使用该中间件的远程教学系统可以方便实现平台的迁移,减少系统的运行成本。

3)  开放的标准和开放的结构使其易与其他应用软件,中间件以及不同体系结构进行集成。通过J2EE平台的丰富的系统功能,如:JDBC、JTA、JMS、JNDI、CORBA等,可与几乎所有关系数据库和现有业务应用系统进行无缝连接。

4)  跨操作系统、跨异构数据库、跨应用服务器。

2.3 在分布式系统中Web(其他Java)应用  

    在web应用程序中可以直接使用DBSessionManager类的对象来获取表格,得到数据以及对他们进行修改删除等数据操作。而这时数据库的连接、安全、事务、持久等特性都是透明的,用户不必管理数据库的连接池,不必手工查询和处理。由于CMM和WEB应用配置在同一台计算机上,所以使用RMI-IIOP访问远程对象对用户来说也是透明的。

    获取远程对象的方法如下所示:

Properties env = new Properties();

        env.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

        env.setProperty("java.naming.provider.url", "localhost:1099");

        env.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");

        try {

            Context initial = new InitialContext(env); 得到对配置系统的服务上下文环境

            Object objref = initial.lookup("wrap"); 

            DBSessionHome home = (DBSessionHome) PortableRemoteObject.narrow (objref, DBSessionHome.class);  使用wrap的jndi名获取远程对象的home接口的引用

            dbs = home.create();  获取对Ejb的远程对象接口(EjbObject接口)的引用

        } catch (Exception ex) {

            System.err.println("Caught an unexpected exception!");

            ex.printStackTrace();

        }

其中localhost需要换成目标主机的地址/机器名/域名。

    DBSession是配置与服务器中负责和服务器中实体Bean通讯的会话Bean,它使用实体 Bean的local接口管理实体bean所代表的数据,接受客户端请求,并使用对应实体Bean的业务方法给客户端适当的反馈。因此,DBSession可以看成对实体Bean的封装。

3.结论 

    目前,基于网络的内容管理技术和数据库中间件技术已经成为企业应用系统的核心技术。该中间件产品已用于天津市科技攻关项目“高等职业远程教育信息服务系统软件平台”开发了远程教育平台软件,并将在中欧国际合作项目高等职业远程教育项目中进行完善。该中间件在远程教学系统的运行中能满足应用要求,使得远程教学平台具有较高的安全性、可扩展性和开放性,有利于系统的维护和升级,还能整合远程教学系统现有业务,降低系统更新成本。

参考文献 

[1] 史宝慧,麦中凡. 从数据管理到内容管理--企业门户核心技术研究. 计算机工程与应用, 2001,37(17)-143-146. 

[2] 李维宏,徐如志. 中间件技术及其发展动态. 微计算机应用,2002,23(3)-138-141. 

[3] Subrahmany Allamaraju. J2EE服务器端高级编程[M]. 北京:机械工业出版社,2001. 

[4] Rahim Adatia. EJB编程指南[M]. 北京:电子工业出版社,2000. 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。