【项目】PowerEngine解析

3 篇文章 0 订阅
3 篇文章 0 订阅
本文回顾了一个基于PE框架的早期银行项目,重点介绍了框架的内部结构,包括Chain和Template,以及Servlet起点。PE框架采用抽象模板和责任链模式,通过Context参数管理交易信息。通过分析PowerEngineDispatcher服务流程,揭示了交易处理的步骤,涉及校验、验证、action逻辑和Transport提交。此外,还讨论了框架的扩展性和对现代框架的启示。
摘要由CSDN通过智能技术生成

前言

曾经有幸在科蓝公司做过开发,很多银行项目基于PE框架,由于项目开发较早,想着当时还没有MVC框架,更遑论现今主流的SpringMVC/SpringBoot框架了,老一批的程序员基于JSP/Servlet开发,后期又加入了很多的优化,导致项目看起来特别费劲,又因为软件著作权的原因吧,度娘也看不到什么让人眼前一亮的博文。最近整理电脑,发现还有那么一个MerchantTest项目,心血来潮看了一下,若干年后纯粹想总结一下,希望给仍使用该PE框架的小伙伴一点点火花。

1. PE内部结构

如图所示(看到百度文库有这么个资料,我这里不算是泄露机密吧),PE内部结构重点关注Chain和Template,这是PE框架的精髓:抽象模板+责任链模式;此外值得注意的还有参数Context,封装了交易中用到的各种配置参数、业务参数等(其实,Context是ThreadLocal类型的参数,每个交易过来后new出来的一个Context对象,并把该对象赋值ThreadLocal对象中,伴随其后交易的一生)

2. Servlet起点

自从有了成熟框架后,程序员就很少再写Servlet类了,以前老的项目都是写一个继承HttpServlet的类作为控制器,PE也是如此,PowerEngineDispatcher继承HttpServlet。
如上图所示,web.xml配置了PowerEngineDispatcher作为控制器,serverApplication.xml其实就是相关配置(交易配置,菜单配置,transaction、chain等)

3. DTD文件定义

自从有了XSD文件后,也很少再写DTD文件了,这两种文件都是对XML文件的定义,用于对配置的.xml文件进行解析。
如图所示,截取了一部分transaction的DTD文件定义,其实servlet容器(jetty)启动时,解析.xml文件,最终解析成IOC容器中的对象。

4. PowerEngineDispatcher服务

1. 

2. 

3.

4.

5.

6.

7.

8.

9.

作为HttpServlet的子类,其实接受到GET/POST请求,最终都是有doService()方法执行,所以看该方法即可,方法调用controller.process()执行逻辑。
其中,controller类主要做了以下几件事:(为防被告泄密,简单描述)
1. 生成Context对象LocalServletContext
2. coreController子类执行execute方法
3. context赋值给ThreadLocal对象
4. 拿到交易类中的chain链,执行链中的doValidation逻辑,其中注意DelegateCommand链(defaultChain默认链),执行到该链时,其实意味着chain链中的各种逻辑(校验、验证)已走完,然后执行template中的action逻辑(action为特性化配置)
5. action根据交易进行个性化配置,比如一些准备工作(action实现Preparable接口),真正业务逻辑前后的切面(preAction,aftAction)
6. 执行action的submit方法
7. 执行action的execute方法
8. 调用Transport的submit方法(Transport有很多子类,可以认为发往哪儿,是什么类型的,比如OnlineTcpTransport就是发往pp-online的TCP交易(联机交易)
9. 调用Transport子类的submit方法(IO输入输出流,基于Socket编程,发送交易至下游pp-online应用)

5. pp-online联机交易

pp-online应用是application类型的应用

总结

1. PE框架因出现的时期较早,所以看不到现在成熟框架的影子
2. PE框架的研究,虽然代码难懂,但是很有意义(如DTD、Servlet)
3. PE框架基于模板和责任链模式,业务代码隔离至action中,开发人员只要写这部分代码,加上一些模板的选择和责任链的个性化拼接即可
4. PE框架的模板或责任链如果不适用当前系统,可以进行组合或者扩展(一直没用过)
5. 对于模板和责任链模式的研究,可以让你深刻理解接口规范,抽象类模板的概念

代码比较难懂,看了好久才有如上总结,这里记录总结下,对自己有个交代,也希望对你有用。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值