1 / 26

Presented by 刘林 l ingen.liu @gmail 红帽 中国

Presented by 刘林 l ingen.liu @gmail.com 红帽 中国. 日志组件目标. 1 日志组件关注的是与业务相关的日志 2 日志组件的记录存入数据库中,是可查询的 3 日志组件提供了一套允许用户自由定义日志的标签定义 4 日志组件不侵入系统代码,不同业务或其它代码结合. 搭建日志组件. 1 加入日志组件的依赖. 配置 web.xml. 配置如何获取登录用户. 1 如果你使用了框架的权限组件,你只需要将上述代码放入你的 spring 配置中 2 如果你有自己的登录实现方式,定义一个类实现 LogUser 接口,实现以下方法

ilori
Télécharger la présentation

Presented by 刘林 l ingen.liu @gmail 红帽 中国

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Presented by 刘林 lingen.liu@gmail.com 红帽中国

  2. 日志组件目标 • 1 日志组件关注的是与业务相关的日志 • 2 日志组件的记录存入数据库中,是可查询的 • 3 日志组件提供了一套允许用户自由定义日志的标签定义 • 4 日志组件不侵入系统代码,不同业务或其它代码结合

  3. 搭建日志组件 • 1 加入日志组件的依赖

  4. 配置web.xml

  5. 配置如何获取登录用户 1 如果你使用了框架的权限组件,你只需要将上述代码放入你的spring配置中 2 如果你有自己的登录实现方式,定义一个类实现 LogUser接口,实现以下方法 public String getLoginUserName(HttpServletRequest request);

  6. 配置Query • 日志组件中有两个Query • 1) 和你系统有关的Query • --这个Query是用来查询业务相关的数据的Query • 2) 日志组件本身的Query • --这个Query是用于查询日志本身存储的数据

  7. 业务Query的配置

  8. 日志Query的配置

  9. 业务Query及日志Query • 1 你可以把它们放入同一个数据库,也可以分开存储,这依据你的项目需要 • 2 它们都是基于JTA实体进行查询及其它操作(后期考虑使用jdbc重写)

  10. 加入aspectJ • 日志组件同代码分离的原因所在是因为使用了aspectJ • 把logAspectJ.aj放入你的项目中,位置依据你的maven aspectj插件的配置而定 • 你不需要修改这个文件,它在任何项目中都是通用的

  11. 日志实体及表的建立 • 1 实体已经在依赖包中建立,不过你得在你的mapping中加入映射 • <mapping class="com.redhat.auth.log.core.domain.BizLogInfo"/> 2 表结构请参照源代码下的SQL语句

  12. 加入日志查询组件 • 日志查询组件是一个提供了默认查询日志的页面查询功能 • 把源代码src/main/resources/log整个文件复制到你的web项目中(它依赖struts2的请求访问) • 通过http://localhost:8080/redamLog/log-index.action • 你便可以访问日志组件的查询页面了

  13. OK,恭喜 • 如果你能顺利看到日志的查询页面,表明你的日志组件配置成功了 • 下一步的工作是定义业务描述了

  14. 业务定义及业务描述 • 1 业务定义是指使用annotation方式定义一个业务,它以method为基准,阐述一个method进行了什么样的业务操作 • 2 一个业务描述对应一个业务定义,它用自然语言描述一个业务是做什么 • 业务定义及业务描述具体参考说明文档

  15. 业务定义标签 • @LogBizCall • @LogBizExecution • 它们定义在某一个方法上,表明这个方法完成了某个业务,这两个标签的定义是一模一样的 • 区别: • LogBizCall使用call方法,跳出方法外环绕,这有利于避免事务 • LogBizExecution使用executeion方法,没有跳出方法,这有利于那些没有被其它方法调用而是被页面请求的业务定义

  16. 业务标签定义 • @LogBizCall(bizDescription="", • bizOperationType="", • failureException="", • dataValue={}, • recordValue={} • )

  17. 示例:

  18. 业务标签详解 • bizDescription • 这个字段描述一个业务所属的模块,比如新增航班业务,这里应该定义为航班计划模块 • 这个字段是必填的 • bizOperationType • 这个字段描述业务本身的行为 • 这个字段必须的

  19. 业务标签详解 • failureException • 这个标签定义业务失败的class • 如果抛出的异常是其中的一个,表示这是一个业务上的失败,如权限被否定,不能操作等 • 否则表明这是一个程序级的错误

  20. 业务标签定义 • dataValue • 业务数据查询,可定义一个或多个DataValue对象 • 定义一个dataValue对象就会从数据库中查询出一条或多条相对应的记录 • 有关dataValue对象的使用,详细参考 标签说明文档

  21. 标签定义 • RecordValue • 记录到日志数据库的值,以名-值形式存储,这些值可以被业务描述文件引用 • 值来源于四种: • 参数,返回值,类属性值,以及DataValue • 你可以定义任意多个或不定义recordValue,recordValue是可以被业务描述引用的

  22. 业务描述 • 一个业务描述同一个业务定义相对应,它用自然语言描述一个业务的行为 • 业务描述使用fremarker语法,你可以使用业务定义中的recordValue值,以freemarker变量形式引用它们便可以了

  23. 业务描述 • 业务描述文件的路径是 • Src/main/resources/bizLog/{语言}/{业务大类}/{业务小类描述}.ftl • 业务描述支持国际化 • 有关业务描述具体使用,参照业务定义及描述说明文档

  24. 实例操作 • 1 新建一个项目,配置日志组件以使能够使用 • 2 使用logBizCall和LogBizExecution定义业务

  25. 日志组件预想的改进点 • 加入xml定义方式,使得能够更加与程序脱离 • 现有的datavalue只能以并集的方式查询,考虑能自由定义SQL语句与,或,非等情况 • 业务查询使用hibernate,对于没有实体的系统则不适应,考虑底层改为JDBC

  26. 结束 • 谢谢

More Related