EOS应用的架构

1. EOS应用的架构

    EOS解决的就是为J2EE应用提供一套体系完整的应用架构,并基于这套架构提供了开发、运行、管理维护的支持环境。EOS的核心就是面向构件的思想,其目标主要是降低J2EE应用的技术复杂性、提升应用的开发速度、提高构件的可管理性和复用度、增强应用的可维护性和适应需求变化的能力。

    那么,基于EOS开发的应用所谓的面向构件的架构是怎样的呢?从应用功能维度上,是通过构件包来承载业务功能的,一个应用可以由多个构件包构成,每个构件包实现了一组具有相关性的业务功能,实际上可以将构件包理解为业务功能分解后的功能模块。构件包属于EOS平台上开发、部署的基本单元。从软件层次维度上,每个构件包又按照MVC的思想抽象形成了不同层次的构件元素,由上而下包括页面构件层、展现构件层、业务构件层、运算构件层、数据构件层,每个层次具有鲜明的特征,完成相应的使命(参见下面对各个层次构件的详细说明),同时引入了具有很强扩展能力的XML总线技术,实现各个层次之间的数据传递,并提升各个层次数据的扩展能力。

093153_0qMq_3784129.png

 1.1数据构件层

采用X-R Mapping技术,主要实现与企业系统数据库的数据实体映射,达到数据持久层管理的目的,降低应用与数据库结构和数据库类型的耦合度,提升企业应用在数据层次的扩展能力。其实现原理为:EOS对数据库操作进行了封装,完成数据库数据与XML总线数据的转换和存取,同时对应用开发提供统一的规范的基于XML接口的API,作为原子性服务,业务处理层只能通过它来访问数据。另外,数据层还提供了数据字典的管理能力,它使得应用层的业务配置具有强大的灵活性,基本数据属性的变化都可以通过参数配置完成。

 1.2运算构件层

实际上是对计算机处理操作的构件化封装,因为应用的业务功能最终都是通过计算机的计算能力完成的,而计算机具体的计算处理本身是与业务无关的(只有某个计算处理结合到业务操作过程以及业务数据后才变得与业务相关),EOS提供的应用架构将计算处理层次进行抽象形成一个独立层次,计算处理一定是与代码相关的,而且依赖于具体的计算机语言,正因为这个层次具有与业务无关性,是可以预先实现的,EOS产品中就通过基础构件库提供了丰富的这个层次的构件,使得在开发一个企业应用时,基本上业务处理所需要的计算功能都已经提供了。当然,EOS提供的开发工具允许对这个层次进行扩展,在即使应用中不够的情况下,也可以使用JAVA开发出新的运算构件。总体而言,在开发一个企业应用过程中,在这个层次上花费的工作量将变得少而且简单。

1.3业务构件层

主要实现应用逻辑的处理过程,其实现方式是通过构件组装环境将许多运算构件通过可视化方式组合成复杂的业务处理过程(应用逻辑),提高开发、测试、维护效率。传统方式下采用代码实现业务逻辑的过程变成了在EOS应用架构下画业务流程图的过程。也使得了应用的逻辑与具体的代码实现进行了有效的分离。

1.4展现构件层

是连接用户界面与业务处理的中间层次,例如页面的某个处理请求(按钮或者连接)将会激活相应的展现构件,展现构件将用户提交的数据传递给相应的业务构件进行调用,根据调用的返回,再定位到另一个用户界面,并把业务处理的返回数据传递到相应页面上(有点类似BEA Workshop页面流的概念,但是在EOS中,一个展现逻辑(展现构件中的一个具体实现)只处理一次WEB请求(Request)与响应(Respone)之间的业务调用和页面流转关系)。EOS同样提供可视化开发工具对展现构件进行开发、修改和维护。

 1.5页面构件层

主要提供对应用系统用户界面的支持,在EOS提供的页面构件技术实际上是完全标准的JSP技术,主要通过提供页面标签(Tag)、页面控件以及RichClient等页面构件,实现用户界面的可视化快速开发。

 1.6XML数据总线

是EOS平台一个很重要的技术特性,在EOS中,通过XML的DOM方式,封装了应用的三大数据区:Session数据区(SessionContext)、Request数据区(RequestContext)、业务处理数据区(BizContext),构成整个应用的数据总线区。这样,在EOS的应用中,各种数据都被规范成了XML的格式,而数据的传递则采用Xpath的寻址方式。而这种数据传递方式使得应用开发中对接口的处理与原来基于对象接口的方式有了较大差异。EOS中构件的接口相当于确定了接口数据在总线中的固定位置,运行时根据不同的实例,对应位置上的内容可能不一样,而传统的接口只确定接口的对象类型和对象的变量名,在调用具体接口时完成对象的实例化。有关数据总线的详细内容,参见EOS应用的数据流章节。

       通过上面的描述,我们可以看到这个架构的2个重要特点:

    1) 应用逻辑与代码是相对分离的。应用系统中的应用逻辑是体现企业业务特点和经营管理理念的,是企业业务知识和管理流程的载体,而企业的业务内容和管理模式是动态成长的,这就需要对应用系统进行维护以适应这种变化。当应用逻辑独立于具体的代码实现后,通过图形化的方式表达的应用逻辑就变得易于进行调整以适应新的变化。

2) 应用逻辑与数据是相对分离的。传统的方式下,代码、业务逻辑、数据是三位一体的,当数据通过XML总线方式独立于应用逻辑后,将使得应用系统在数据的扩展能力上有了较大的提升。

2 .  EOS应用的运行机制

在了解了EOS应用的架构后,通过EOS产品开发的J2EE的应用的表现形式是怎样的?实现的应用又是如何运行和管理的呢?我们将在本节进行深入的探讨。

   首先了解一下用EOS开发应用要实现的内容包括JSP页面、展现逻辑(展现构件的一个接口实现)、业务逻辑(业务构件的一个接口实现)、运算逻辑(并不是所有构件包都需要开发运算逻辑)、数据实体文件,以下针对每个内容在开发和运行时的形态进行详细的说明:


   2.1 JSP页面文件

开发遵循标准的JSP机制和规范,EOS为JSP开发提供了一套页面TAG,用于实现页面数据与XML数据总线数据的绑定,另外,页面的表单(Form)的提交动作(Action)将直接映射为展现逻辑名称,以下是一个典型的JSP页面文件内容:

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="/WEB-INF/hci-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/hci-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/hci-dict.tld" prefix="dict" %>
 
<%@include file="/internet/common.jsp"%>
<SCRIPT language="JavaScript" src="/pageComponent/resources/scripts/dataformcheck.js"></SCRIPT>
<SCRIPT language="JavaScript" src="/pageComponent/resources/scripts/calendar.js"></SCRIPT>
<link rel="stylesheet" href="/pageComponent/resources/theme/style.css" type="text/css">

<br>
<FORM name="inputForm" action="CUSTMgr.pr.prCUSTInsert.do" method="post" target="_top">
  <TABLE width="80%" cellPadding="0" align="center" class="pg_add" border="0" cellSpacing="0">
    <TBODY>
      <TR>
        <TD class="pg_add_title" colSpan="6">增加客户信息</TD>
      </TR>
      <TR>
        <TD class="pg_add_head">客户名称:</TD>
        <TD class="pg_add_content">
          <html:text onblur="checkInput(this)" attributesText='eos_isnull="true" eos_maxsize="10" eos_displayname="客户名称"' property="CUST/CUSTNAME" />
        </TD>
        <TD class="pg_add_head">身份证号:</TD>
        <TD class="pg_add_content">
          <html:text onblur="checkInput(this)" attributesText='eos_isnull="true" eos_maxsize="20" eos_datatype="IDno" eos_displayname="身份证号"' property="CUST/CARDID" />
        </TD>
        <TD class="pg_add_head">性别:</TD>
        <TD class="pg_add_content">
          <dict:select property="CUST/SEX" nullLabel="" nullOption="true" businTypeId="BNDICT_gender" />
        </TD>
      </TR>
      <TR class="pg_add_bottom">
        <TD colSpan="6">
          <DIV align="center">【<A href="javascript:check(document.inputForm);">提交</A>】 【<A
              href="javascript:resetData(document.inputForm);">重置</A>】 【<A href="javascript:history.go(-1);">返回</A>】</DIV>
        </TD>
      </TR>
    </TBODY>
  </TABLE>
</FORM>

可以看到,action="CUSTMgr.pr.prCUSTInsert.do"中的CUSTMgr.pr.prCUSTInsert.do实际上对应的是一个展现逻辑(后缀为.do),<html:text />、<dict:select />是EOS提供的标签(Tag),标签中的属性property="CUST/CUSTNAME"解析成HTML后成为标记对应的NAME,而这个NAME提交到WEB容器后,被WEB Driver映射成数据总线上的路径。而输入信息则映射为数据总线对应路径上的值,详细情况参见“EOS应用的数据流”章节。JSP文件开发时和部署时属于同一文件,后缀为.jsp,JSP文件部署在应用服务器的WEB模块中。

【说明】action对应的内容如果以“.do”作为后缀则被视为是展现逻辑,是由WEB服务器的web.xml配置文件确定的。在web.xml文件中,有如下的配置信息:

<servlet>
		<display-name>EOS Server</display-name>
		<servlet-name>webDriver</servlet-name>		
		<servlet-class>com.primeton.tp.web.driver.webdriver.WebDriverUpload</servlet-class>
……
</servlet>
<servlet-mapping>
		<servlet-name>webDriver</servlet-name>
		<url-pattern>*.do</url-pattern>
</servlet-mapping>
……

以上配置表明:如果基于HTTP机制提交到WEB容器的请求,如果是以.do结尾,将交给webDriver进行处理,而webDriver的实现类为com.primeton.tp.web.driver.webdriver.WebDriverUpload,这个类将去调用对应名称的展现逻辑,并将HTML页面提交的表单数据转到数据总线RequestContext中。

2.2展现逻辑文件

分为描述文件和编译文件,分别以.prg和.pra作为文件后缀,展现逻辑描述文件prg是开发时产生的(可以理解为展现逻辑源码),主要描述展现逻辑图的图元关系、图元位置、图元描述、调用的业务逻辑路径、调用的页面路径、以及参数信息等等,prg文件的内容为XML格式,只有通过EOS Studio才能转换为可见的图形。展现逻辑的编译文件pra是prg文件通过EOS Studio编译后产生的,是运行时的文件,需要部署到服务器上。这个编译文件的内容也是XML格式,主要描述展现逻辑的调用关系以及参数信息。

2.3业务逻辑文件

也分为描述文件和编译文件,分别以.bzg和bza作为文件后缀,业务逻辑描述文件bzg是开发时产生的(可以理解为业务逻辑源码),主要描述业务逻辑的图元关系、图元位置、图元描述、调用的运算逻辑路径、以及参数信息等等,bzg文件的内容为XML格式,只有通过EOS Studio才能转换为可见的图形,保留业务逻辑描述文件便于对应用的管理和维护。业务逻辑的编译文件bza是bzg文件通过EOS Studio编译后产生的,是运行时的文件,需要部署到服务器上。这个编译文件的内容也是XML格式,主要描述业务逻辑的调用关系以及参数信息。

2.4运算逻辑文件

是标准的JAVA文件,运算逻辑(俗称BL方法)是运算逻辑类中的一个静态方法,当然,运算逻辑方法有严格的接口规范要求,EOS的基础构件库提供基本充分的运算逻辑,在实际的应用项目中,一般只在下列情况下需要编写基于JAVA代码的运算逻辑:

l  用户已经有一些通用的或者专业性很强的JAVA包(如安全处理等),需要通过运算逻辑封装这些JAVA中的方法,变成可以拖拽的运算构件

l  某些业务处理通过业务逻辑实现过于复杂,存在效率问题,需要通过java代码进行封装

l  在某些应用中,与其他系统存在一些特定的协议通讯,需要将通讯方法基于代码进行封装形成运算构件

l  基础构件库提供的运算构件的确不够或者功能不满足,需要扩充

  运算逻辑类开发时是JAVA文件,编译后是class文件,通过打包形成jar文件,部署到服务器的classpath环境中使用。

2.5数据实体文件

主要实现数据的持久化,实际上是通过XML语言对数据库表(或视图)的结构描述,同时也支持根据一个sql语句建立相应的数据实体。数据实体文件以.ent(对应表或视图)、ens(对应SQL查询)、.dtr(对应自定义的数据树)为后缀,其文件内容也是XML。数据实体文件在开发时和运行时都是同一个文件,所有的数据实体文件都部署在eosserver的datadict目录下。

转载于:https://my.oschina.net/u/3784129/blog/1805942

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值