论文部分内容阅读
摘要:该文在对EOS开发中存在的一些问题进行分析和对Barracuda架构深入研究的基础上,提出了一个基于Barracuda架构的SOA开发模型,以解决传统EOS开发中的效率问题,并对如何实现基于Barracuda架构的SOA开发模型进行了较详细的分析。
关键词:Barracuda;EOS;XMLC;SOA开发模型
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)33-1413-02
Analysis of SOA Developing-model Based on Barracuda
ZHOU Jiang
(Information of Judicature Department, SJPOPC, Deyang 618000, China)
Abstract: After the analysis of the problems appearing in the development of projects based on EOS and introduction of Barracuda framework, this paper proposes a SOA Developing-model based on Barracuda to solve these problems. And how to realize this EOS is recommended. The effects of this SOA Developing-model is analyzed, too.
Key words: Barracuda; EOS; XMLC; SOA Developing-model
1 引言
EOS(Enterprise Operating System)是面向构件的SOA中间件,它基于J2EE平台之实现完整的系统架构,是面向构件的完整的互联网应用体系[1]。构件是EOS中最基本和最核心的元素,所有的工作都是围绕构件进行的。构件之间采用XML总线技术来进行通信,使得构件之间具备松散的耦合性,从而使系统具有良好的扩展性以及随需应变的灵活性。
Barracuda是一个HTML DOM Component Event/Listener结构的WEB应用程序框架,是一种Model 2体系结构,但是它进一步采用了创建用户界面的XMLC方法,而且提供了模型的事件-通知机制[2]。
2 EOS开发过程中存在的不足之处
通过采用构件化的模式和利用系统提供的各种基础构件包,EOS确实能够加快项目开发的进度,提高系统稳定性和组件复用度,尤其是展现逻辑和业务逻辑的开发采用图形化可视和托拽的方式,减少了开发人员的工作量,使开发人员可专注于对用户需求和逻辑的理解,而不必花费大量时间进行逻辑代码的编写,这种图形化的方式也极大地提高了程序的可读性。
但是,页面构件开发对于大多数人来说就不那么轻松了,尤其是对于一些比较复杂的页面。EOS主要采用JSP页面作为页面构件[3],由于JSP固有的一些缺点[4],使得EOS页面构件的开发存在下面一些的问题:
1) 开发人员不仅要设计HTML代码,还要编写Java代码,不仅要实现业务逻辑,同时还要考虑表示层的风格、样式方面的问题,把表示层和逻辑层的工作集中到同一个开发人员身上,这必然增加开发人员的工作量。而且EOS系统还定义了大量自己的标签,对于不是经常使用EOS开发系统的人来说,要想熟练使用好这些标签,也不是件容易的事。
2) 在EOS的开发调试环境中,只能对输入输出JSP页面的数据进行查看,而对JSP页面执行过程中的内部变化情况,则不能进行跟踪调试。如果页面本身不大,逻辑也不复杂,查找页面上的BUG比较容易。但是在页面变大了、逻辑也复杂的情况下,要在页面中去找寻一个小的BUG,将是很令人头疼的一件事。
3) html代码与java代码强耦合,一旦逻辑有所变化,可能牵涉大量页面需要修改。
4) 如果需要对系统进行本地化的操作,就要为每个地区的每种语言建立一个页面文件,然后由系统自动判断采用哪个文件。
5) html代码与Java代码在程序中交错出现,再加上可能还有JavaScript代码,使得代码的可读性降低。例如,在一个页面中,需要根据用户角色来决定是否显现某些元素,这就要进行判断,如果判断地方较多,用户角色也较多时,将在页面中出现大量判断语句(也可以采用EOS提供的逻辑判断TAG),对于一个不熟悉业务逻辑的人来说,是不易看懂的。当然也可以为每个角色创建一个页面,由展现逻辑决定显示哪个页面,但如果有很大一部分代码都重复的话,必将造成资源的浪费。
6) 从美学的角度来说,页面构件由用户界面HTML代码和业务逻辑相关的java代码组合在一起,页面看起来杂乱无章。
图1 Barracuda架构
3 Barracuda框架架构简介
Barracuda架构[3]将WEB应用程序划分为若干层,每层实现不同功能,层与层之间相互独立,具体见图1。
1) 接收客户端信息
接收客户端发送的请求,并对请求信息进行初步处理,从中提取关于客户端的信息(如客户端浏览器类型、客户端的本地化信息、对客户机的响应输出格式等),这些信息在整个请求-响应周期里面都可用。
2) 事件模型
事件模型主要用于处理客户机和服务器通信。它负责将HTTP请求转换为Java事件类,然后将产生的事件发布给监听器,并将监听器的处理结果返回给客户机。
3) 表单映射和数据检验
将表单传来的参数映射为Java类;为一些数据提供缺省值;对数据进行有效性检验等。
4) XMLC
XMLC是一个将HTML和XML 模板转换为DOM对象的工具,传统的表示层技术(如JSP)都是在标记语言内部进行编程,XMLC则是对整个模板进行编程。
5) 本地化
Barracuda利用XMLC提供了一种独有的方法来实现程序本地化。一般说来,在一个模板驱动的程序中,有两种方法实现本地化,一种就是为不同的语言提供不同的模板,这种方法运行效率更高,但是维护比较麻烦;另一种方法就是在一个页面中动态地确定怎样本地化,这种方法运行效率更低,但是便于维护。而Barracuda提供的一种机制可以同时达到这两个目标:效率高且便于维护。
6) 组件模型
开发人员在利用页面模板生成DOM对象以后,需要向Dom结构中填入数据,但是对Dom的操作是比较底层而难于控制的,为解决这个难题,Barracuda提供了组件模型。组件模型具有两个基本的特性:一个组件可以包含其他的组件,从而可以由简单组件合成复杂组件, 这不仅提高了模块的复用性,而且提高了整个系统的可扩展性;另一特性就是组件(包括其子组件)的渲染工作是由自己完成的。
4 基于Barracuda的EOS运行原理
经研究,现设计基于Barracuda的SOA开发模型,其运行原理如图2。
1) 从浏览器发起HTTP请求,提交到展现引擎。
2) 展现引擎将请求转换为XML,并根据HTTP请求(构件包.构件.构件逻辑.do)确定应该调用哪个展现逻辑,然后转到处理展现构件描述的展现逻辑。
3) 根据展现逻辑流程中定义的业务逻辑,传入业务逻辑,并且送入相关的XML数据(从XML总线中)。
4) 业务引擎根据调用的业务逻辑中的流程调用相关的运算逻辑。
5) 对于需要访问数据库的操作通过数据引擎根据数据映射调用相关的数据库,在调用过程中根据流程定义的事务进行相关的事务处理。
6) 业务引擎处理完逻辑流程后返回相关数据给展现层
7) 展现逻辑根据展现逻辑定义的页面构件,将HTTP请求转发到指定的页面构件,并且传入处理完的XML数据。这里的页面构件和EOS中的页面构件是不同的, EOS采用的页面构件一般是JSP,而基于Barracuda的EOS中的页面构件是一个根据由原始HTML文件生成的DOM对象、文档模板和传入的数据动态生成返回给用户页面的逻辑。
8) 页面构件根据相关信息生成HTML返回给客户浏览器。
5 如何实现基于Barracuda的EOS
通过对EOS作一些改进,即可将实现基于Barracuda的SOA开发模型:
1) 将XMLC的转换工具作为插件安装在EOS开发环境中,通过它可以方便的实现从html文件到DOM对象的转换工作,这个工作是很容易实现的。
2) 对页面构件进行改变,不采用JSP,改为采用Servlet[5]来实现,利用Servlet来完成对文档模板的操作,动态生成用户需要的页面。
3) 将Barracuda的组件库引入EOS中,以充分利用组件的可组合性和自渲染性。
6 基于Barracuda的SOA开发模型解决了EOS的中存在的问题
下面分析一下采用基于Barracuda的EOS是如何解决2中所提到各种问题的。
1) 采用XMLC技术将表示层和逻辑层的工作完全分离开来,可分别交与html设计人员和程序员来完成,html设计人员只进行表示层的设计,程序员则专注于业务逻辑的实现。html设计人员定义表示层的模板,通过XMLC工具将其转换为DOM对象,程序员只需通过代码来填写模板内容,而不用关注表示层的样式风格是如何的。利用组件模型,程序员可以向表示层中添加新元素,只需填入数据,剩下的渲染工作可由组件自己完成。
2) 由于对数据的操作全部放在了页面构件中,而页面构件通常是一个Java的Serlet类,很容易通过现有平台的调试器来监视程序的运行过程,对程序进行调试,从而很容易确定程序中的BUG所在。
3) 由于html代码与java代码已经完全分离开来,因而如果逻辑有所变化,只需要对逻辑层进行修改即可,而不用变动表示层的代码。
4) 采用XMLC技术很容易实现系统本地化。此时,只需要一个页面模板文件,然后为每种语言配置一个.properties文件,由页面构件根据获取的浏览器端本地信息自动从对应的.prperties文件中读取数据来填写相关的元素内容(通过采用多例模式很容易实现)。如果增加了一个地区语言,只需简单增加一个.porperties文件,同时在页面构件中进行一点小改动就行了,这比增加一个新页面文件省事多了。
5) 由于HTML代码与Java代码完全分开,使页面文件和逻辑层代码的可读性增强了[6],而且由于两者分开以后,不存在代码交叉出现的情况,文件内容的美观性也得到了保证。
7 下一步的工作
这次讨论的基于Barracuda的EOS并未实现Barracuda中的事件模型,下一步的工作将研究如何将Barracuda的事件模型应用于EOS中。
8 结论
基于Barracuda的EOS可以解决EOS中页面构件难以编写和可读性较低的问题,而且可以在对EOS改动不大的情况下得到实现,利用XMLC实现以servlet操纵页面元素[7],克服由于JSP固有缺点带来的页面编程效率低下的问题,在EOS己有的面向构件的开发模型基础上,大大提高web编程生产率,是一种优秀的SOA开发模型。
参考文献:
[1] 上海普元信息技术有限责任公司.EOS白皮书[S].2007.
[2] http://www.barracudamvc.org/Barracuda/[EB/OL].
[3] 上海普元信息技术有限责任公司.EOS 5.3程序员教程[S].2006.
[4] 高敬.WEB应用程序-CGI到Web三层系统[M].北京:科学出版社,2004.
[5] Deitel H M.Javaweb服务高级教程[M].北京:机械工业出版社,2003.
[6] 吴其庆.JSP编程思想与实现[M].北京:冶金工业出版社,2003.
[7] 孙鑫.Java Servlet编程[M].2版.北京:中国电力出版社,2002.
关键词:Barracuda;EOS;XMLC;SOA开发模型
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)33-1413-02
Analysis of SOA Developing-model Based on Barracuda
ZHOU Jiang
(Information of Judicature Department, SJPOPC, Deyang 618000, China)
Abstract: After the analysis of the problems appearing in the development of projects based on EOS and introduction of Barracuda framework, this paper proposes a SOA Developing-model based on Barracuda to solve these problems. And how to realize this EOS is recommended. The effects of this SOA Developing-model is analyzed, too.
Key words: Barracuda; EOS; XMLC; SOA Developing-model
1 引言
EOS(Enterprise Operating System)是面向构件的SOA中间件,它基于J2EE平台之实现完整的系统架构,是面向构件的完整的互联网应用体系[1]。构件是EOS中最基本和最核心的元素,所有的工作都是围绕构件进行的。构件之间采用XML总线技术来进行通信,使得构件之间具备松散的耦合性,从而使系统具有良好的扩展性以及随需应变的灵活性。
Barracuda是一个HTML DOM Component Event/Listener结构的WEB应用程序框架,是一种Model 2体系结构,但是它进一步采用了创建用户界面的XMLC方法,而且提供了模型的事件-通知机制[2]。
2 EOS开发过程中存在的不足之处
通过采用构件化的模式和利用系统提供的各种基础构件包,EOS确实能够加快项目开发的进度,提高系统稳定性和组件复用度,尤其是展现逻辑和业务逻辑的开发采用图形化可视和托拽的方式,减少了开发人员的工作量,使开发人员可专注于对用户需求和逻辑的理解,而不必花费大量时间进行逻辑代码的编写,这种图形化的方式也极大地提高了程序的可读性。
但是,页面构件开发对于大多数人来说就不那么轻松了,尤其是对于一些比较复杂的页面。EOS主要采用JSP页面作为页面构件[3],由于JSP固有的一些缺点[4],使得EOS页面构件的开发存在下面一些的问题:
1) 开发人员不仅要设计HTML代码,还要编写Java代码,不仅要实现业务逻辑,同时还要考虑表示层的风格、样式方面的问题,把表示层和逻辑层的工作集中到同一个开发人员身上,这必然增加开发人员的工作量。而且EOS系统还定义了大量自己的标签,对于不是经常使用EOS开发系统的人来说,要想熟练使用好这些标签,也不是件容易的事。
2) 在EOS的开发调试环境中,只能对输入输出JSP页面的数据进行查看,而对JSP页面执行过程中的内部变化情况,则不能进行跟踪调试。如果页面本身不大,逻辑也不复杂,查找页面上的BUG比较容易。但是在页面变大了、逻辑也复杂的情况下,要在页面中去找寻一个小的BUG,将是很令人头疼的一件事。
3) html代码与java代码强耦合,一旦逻辑有所变化,可能牵涉大量页面需要修改。
4) 如果需要对系统进行本地化的操作,就要为每个地区的每种语言建立一个页面文件,然后由系统自动判断采用哪个文件。
5) html代码与Java代码在程序中交错出现,再加上可能还有JavaScript代码,使得代码的可读性降低。例如,在一个页面中,需要根据用户角色来决定是否显现某些元素,这就要进行判断,如果判断地方较多,用户角色也较多时,将在页面中出现大量判断语句(也可以采用EOS提供的逻辑判断TAG),对于一个不熟悉业务逻辑的人来说,是不易看懂的。当然也可以为每个角色创建一个页面,由展现逻辑决定显示哪个页面,但如果有很大一部分代码都重复的话,必将造成资源的浪费。
6) 从美学的角度来说,页面构件由用户界面HTML代码和业务逻辑相关的java代码组合在一起,页面看起来杂乱无章。
图1 Barracuda架构
3 Barracuda框架架构简介
Barracuda架构[3]将WEB应用程序划分为若干层,每层实现不同功能,层与层之间相互独立,具体见图1。
1) 接收客户端信息
接收客户端发送的请求,并对请求信息进行初步处理,从中提取关于客户端的信息(如客户端浏览器类型、客户端的本地化信息、对客户机的响应输出格式等),这些信息在整个请求-响应周期里面都可用。
2) 事件模型
事件模型主要用于处理客户机和服务器通信。它负责将HTTP请求转换为Java事件类,然后将产生的事件发布给监听器,并将监听器的处理结果返回给客户机。
3) 表单映射和数据检验
将表单传来的参数映射为Java类;为一些数据提供缺省值;对数据进行有效性检验等。
4) XMLC
XMLC是一个将HTML和XML 模板转换为DOM对象的工具,传统的表示层技术(如JSP)都是在标记语言内部进行编程,XMLC则是对整个模板进行编程。
5) 本地化
Barracuda利用XMLC提供了一种独有的方法来实现程序本地化。一般说来,在一个模板驱动的程序中,有两种方法实现本地化,一种就是为不同的语言提供不同的模板,这种方法运行效率更高,但是维护比较麻烦;另一种方法就是在一个页面中动态地确定怎样本地化,这种方法运行效率更低,但是便于维护。而Barracuda提供的一种机制可以同时达到这两个目标:效率高且便于维护。
6) 组件模型
开发人员在利用页面模板生成DOM对象以后,需要向Dom结构中填入数据,但是对Dom的操作是比较底层而难于控制的,为解决这个难题,Barracuda提供了组件模型。组件模型具有两个基本的特性:一个组件可以包含其他的组件,从而可以由简单组件合成复杂组件, 这不仅提高了模块的复用性,而且提高了整个系统的可扩展性;另一特性就是组件(包括其子组件)的渲染工作是由自己完成的。
4 基于Barracuda的EOS运行原理
经研究,现设计基于Barracuda的SOA开发模型,其运行原理如图2。
1) 从浏览器发起HTTP请求,提交到展现引擎。
2) 展现引擎将请求转换为XML,并根据HTTP请求(构件包.构件.构件逻辑.do)确定应该调用哪个展现逻辑,然后转到处理展现构件描述的展现逻辑。
3) 根据展现逻辑流程中定义的业务逻辑,传入业务逻辑,并且送入相关的XML数据(从XML总线中)。
4) 业务引擎根据调用的业务逻辑中的流程调用相关的运算逻辑。
5) 对于需要访问数据库的操作通过数据引擎根据数据映射调用相关的数据库,在调用过程中根据流程定义的事务进行相关的事务处理。
6) 业务引擎处理完逻辑流程后返回相关数据给展现层
7) 展现逻辑根据展现逻辑定义的页面构件,将HTTP请求转发到指定的页面构件,并且传入处理完的XML数据。这里的页面构件和EOS中的页面构件是不同的, EOS采用的页面构件一般是JSP,而基于Barracuda的EOS中的页面构件是一个根据由原始HTML文件生成的DOM对象、文档模板和传入的数据动态生成返回给用户页面的逻辑。
8) 页面构件根据相关信息生成HTML返回给客户浏览器。
5 如何实现基于Barracuda的EOS
通过对EOS作一些改进,即可将实现基于Barracuda的SOA开发模型:
1) 将XMLC的转换工具作为插件安装在EOS开发环境中,通过它可以方便的实现从html文件到DOM对象的转换工作,这个工作是很容易实现的。
2) 对页面构件进行改变,不采用JSP,改为采用Servlet[5]来实现,利用Servlet来完成对文档模板的操作,动态生成用户需要的页面。
3) 将Barracuda的组件库引入EOS中,以充分利用组件的可组合性和自渲染性。
6 基于Barracuda的SOA开发模型解决了EOS的中存在的问题
下面分析一下采用基于Barracuda的EOS是如何解决2中所提到各种问题的。
1) 采用XMLC技术将表示层和逻辑层的工作完全分离开来,可分别交与html设计人员和程序员来完成,html设计人员只进行表示层的设计,程序员则专注于业务逻辑的实现。html设计人员定义表示层的模板,通过XMLC工具将其转换为DOM对象,程序员只需通过代码来填写模板内容,而不用关注表示层的样式风格是如何的。利用组件模型,程序员可以向表示层中添加新元素,只需填入数据,剩下的渲染工作可由组件自己完成。
2) 由于对数据的操作全部放在了页面构件中,而页面构件通常是一个Java的Serlet类,很容易通过现有平台的调试器来监视程序的运行过程,对程序进行调试,从而很容易确定程序中的BUG所在。
3) 由于html代码与java代码已经完全分离开来,因而如果逻辑有所变化,只需要对逻辑层进行修改即可,而不用变动表示层的代码。
4) 采用XMLC技术很容易实现系统本地化。此时,只需要一个页面模板文件,然后为每种语言配置一个.properties文件,由页面构件根据获取的浏览器端本地信息自动从对应的.prperties文件中读取数据来填写相关的元素内容(通过采用多例模式很容易实现)。如果增加了一个地区语言,只需简单增加一个.porperties文件,同时在页面构件中进行一点小改动就行了,这比增加一个新页面文件省事多了。
5) 由于HTML代码与Java代码完全分开,使页面文件和逻辑层代码的可读性增强了[6],而且由于两者分开以后,不存在代码交叉出现的情况,文件内容的美观性也得到了保证。
7 下一步的工作
这次讨论的基于Barracuda的EOS并未实现Barracuda中的事件模型,下一步的工作将研究如何将Barracuda的事件模型应用于EOS中。
8 结论
基于Barracuda的EOS可以解决EOS中页面构件难以编写和可读性较低的问题,而且可以在对EOS改动不大的情况下得到实现,利用XMLC实现以servlet操纵页面元素[7],克服由于JSP固有缺点带来的页面编程效率低下的问题,在EOS己有的面向构件的开发模型基础上,大大提高web编程生产率,是一种优秀的SOA开发模型。
参考文献:
[1] 上海普元信息技术有限责任公司.EOS白皮书[S].2007.
[2] http://www.barracudamvc.org/Barracuda/[EB/OL].
[3] 上海普元信息技术有限责任公司.EOS 5.3程序员教程[S].2006.
[4] 高敬.WEB应用程序-CGI到Web三层系统[M].北京:科学出版社,2004.
[5] Deitel H M.Javaweb服务高级教程[M].北京:机械工业出版社,2003.
[6] 吴其庆.JSP编程思想与实现[M].北京:冶金工业出版社,2003.
[7] 孙鑫.Java Servlet编程[M].2版.北京:中国电力出版社,2002.