[发明专利]一种基于动态栈的EJB3 容器AOP 实现方法有效
申请号: | 201110357781.6 | 申请日: | 2011-11-11 |
公开(公告)号: | CN102508668A | 公开(公告)日: | 2012-06-20 |
发明(设计)人: | 齐勇;王培培;杨涛;郝莹耀 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/45 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 徐文权 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 动态 ejb3 容器 aop 实现 方法 | ||
技术领域
本发明提出了Java EE系统架构下一种基于动态栈的实现EJB3业务方法拦截的方法。该方法结合预编译和动态栈的方式分别处理系统级别和业务方法级别的拦截器方法,提高了EJB容器对业务方法拦截的速度与灵活性。
背景技术
AOP为Aspect Oriented Programming的缩写,即面向切面编程。
AOP技术利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面,也就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。AOP的目的就是将核心关注点和横切关注点分离。
EJB3.0引入了AOP中的拦截器概念,指出程序员可以在业务方法的执行前后加入其他非核心业务方法即拦截器方法。拦截器是可以对bean的业务方法和生命周期事件进行拦截的组件,在这些方法被访问之前, 进行拦截然后在之前或之后加入某些操作。
但是为什么要在EJB3规范中引入拦截器呢?从前面的叙述可知拦截器是面向切面编程的一部分,切面可以看成是关注点,比如在执行主要的商业逻辑代码之前所做的事务、安全等操作,这些操作虽然比较普通,但是也会贯穿整个程序的始终,使得程序代码中充斥着大量相同的代码,不仅削弱了代码的可读性,而且也给应用程序的开发和维护带来不必要的麻烦。有了拦截器之后,就可以拦截主要的业务逻辑,把非业务逻辑的代码“注入”到里面去,实现业务逻辑代码和相对不重要的安全、日志等代码的分离开来,提高应用程序的可维护性和可读性。
目前实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,动态生成原有对象的代理对象以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。当前Java平台下实现了AOP的主流项目主要有AspectJ、JBoss、Spring。
预编译方式的代表是AspectJ。AspectJ采用了在预编译过程中重新生成源代码的方式,有自己专门的编译器和AOP语法,但AspectJ没有利用反射技术或代理技术,而仅仅是程序的静态扩展而已。然而这种源代码生成方式实现的AOP虽然在性能上具备一定的优势,但它过于复杂,修改源代码的侵入式编程破坏了原来代码的结构性,给开发带来一定的问题。
JBoss和Spring的AOP都实现利用了JDK提供的动态代理技术。当拦截到业务方法的请求时,根据业务方法需要执行的拦截器元数据信 息,依次生成代理类Proxy,并且形成一条链式结构,依次执行这些拦截器方法。
发明内容
本发明的目的在于克服预编译和动态代理两种方式AOP实现的缺陷,提供了一种基于动态栈的EJB3容器AOP实现方式,使用预编译和动态栈两种方式相结合的方式来实现EJB容器对业务方法的拦截。针对如日志、事务管理和安全等系统服务对所有的EJB处理方式一致的特点,将相应代码通过预编译方式重新生成源代码,减少了处理拦截器请求的时间,并通过配置文件的方式使得尽量减少对源代码的侵入式修改。对于EJB的业务方法拦截器,考虑到程序员经常修改编辑拦截器类的特点,采用动态栈的方式避免了预编译反复生成源代码的缺陷;同时相比动态代理方式节约了大量生成动态代理类的内存空间。使用静态和动态相结合提高EJB容器对业务方法拦截的速度与灵活性。
为达到上述目的,本发明采用的技术方案是:
根据拦截器方法作用和性质的不同,将拦截器方法分为系统级别和业务逻辑级别两种类型,分别采用预编译和动态栈的方式处理EJB3相应的拦截器方法。
1)预编译方式处理系统级别拦截器方法:
EJB容器分离了一般应用系统的一些通用功能,例如事务机制、安全机制以及对象池或线程池等性能优化机制,这些功能是每个应用系统几乎都需要的,因此可以从具体应用系统中分离出来。系统级别的拦截器方法主要就是指对EJB的日志、安全和事务管理等通用功能,将这类的 拦截器方法交由EJB容器执行,这对简化EJB的开发、维护EJB运行的稳定性和快速性都很非常重要。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110357781.6/2.html,转载请声明来源钻瓜专利网。