选择显示字体大小

aspectwerkz 2.0开发企业aop快速入门


  今天,面向方面的程序设计(aspect-oriented programming,aop) 框架试图在企业环境中获得立足之地。这些框架为了得到普遍采用,必须与企业系统中已经在使用的其他框架良好地集成。 本文向开发人员展示了,如何将aspectwerkz aop框架与一些现在常用的框架(如log4j、atlassian 性能剖析器、hibernate和tapestry)相集成。

  本文从一个现有的tapestry web应用程序开始。这个应用程序实现两个单独的关注点:日志记录和性能剖析。每个项目都有这些需求,许多项目用log4j做日志记录而用atlassian剖析器框架做性能分析。然后最初的非aop实现被重构,以便使用aspectwerkz框架来分离每个关注点的实现。产生的应用程序代码将会更简单,更容易维护,而最重要的是,更自然,表达能力更强。

  本文中描述的所有应用程序和源代码都可以下载得到。

  简介

  为了证明aop的强大,我们从一个非aop web应用程序开始,并重构它以使用aop。应用程序的前后映像将说明aop是多么易于使用,及方面作为java语言的扩展是多么有用。

  示例程序实现了一个示例blog,以允许用户在已有文章上张贴新的文章和评论。它是由多种框架实现的,包括用于web层的tapestry,作为o/r mapping解决方案的hibernate,以及把各部分结合起来的sping框架。日志记录是用log4j框架实现的,而性能是用atlassian剖析器来监控的。

  出于演示目的,blog应用程序保持尽可能地简单。尽管很简单,blog应用程序包含了使它像一个“真正的”应用程序的足够功能,因此文中的代码可以应用于现有的企业项目。

  本文假定读者对aop概念有基本的理解。aop的初学者应该阅读下面引用的文章和教程。所有的例子都将用运行在bea weblogic jrockit 1.4.2 sdk上的aspectwerk 2.0实现。另外一些可选的环境请参见aspectwerk主站点。

  运行示例程序

  要运行示例应用程序,需要一个数据库和一个servlet容器。本文假定使用mysql

  安装完必需的软件后,下载并解压示例代码到一个临时目录中。该发行版中有三个文件:

  首先,设置mysql来得到所需的数据库。把数据库命名为“blog”,并设置一个口令为“password”的用户id“blog”。然后通过执行blog-ddl.sql脚本来定义模式(在mysql提示符下键入sourceblog-ddl.sql)。

  现在我们可以部署应用程序了。blog应用程序的两个版本都被打包成war文件,所以可以直接了当地部署到servlet容器中。

  现在可以通过访问网址http://localhost:7001/blog-preaop/blog和http://localhost:7001/blog-postaop/blog来运行应用程序了。试着运行应用程序的一些功能并检查web-inf/classes目录中的源代码。本文的其余部分将详细分析两种实现并着重说明aop方法的优点。

  分析最初的blog应用程序

  blog应用程序实现了两个横切关注点:日志记录和性能剖析。这些关注点要在贯穿整个应用程序的所有类中实现。让我们看看,利用aop出现以前可用的标准java工具是如何实现这两个关注点的。

  日志记录

  日志记录的目的是能够在不打开调试器的情况下调试生产应用程序。在我的项目中已经证明很有价值的有,通过记录每个方法的入口和出口来跟踪代码。例如,在hibernateentrydao类中,下面的代码是用来查找所有blog入口的:
private static final log log = log.getlog(entryhibernatedao.class); public entry[] findall() {    log.enter("findall");    list entries = gethibernatetemplate().find("from entry");    log.exit("findall");    return (entry[])entries.toarray(new entry[] {}); } 

  当用于整个代码时,将对完全的用户请求产生下面的日志输出:

com.tss.blog.web.applicationservlet info : >service: ’/blog’ com.tss.blog.service.blogsvcimpl info : >findallentries com.tss.blog.persistence.entryhibernatedao info : >findall com.tss.blog.persistence.entryhibernatedao info : <findall com.tss.blog.service.blogsvcimpl info :   <findallentries com.tss.blog.web.applicationservlet info : <service:’/blog’

  尽管非常冗长,但它对调试生产系统非常有帮助。log4j在优化日志书写方面做得很好,所以性能很少成为问题。因为所有的enter/exit调用都被赋予info优先级,如果web层的性能真的成为问题,那么需要做的只不过是把log4j.preperties中的日志记录优先级阈值更改为warn或更高,而且log4j会丢弃跟踪信息。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons