用于向现有应用添加审核的良好模式或框架?

时间:2008-09-16 02:02:35

标签: java java-ee aop crud audit

我有一个现有的J2EE企业应用程序,我需要添加审计,即能够在几种重要的域类型(Employee,AdministratorRights等)上记录CRUD操作。

该应用程序具有标准的n层架构:

  • 网络界面
  • 封装在无状态会话bean和事务性POJO(使用Spring)的混合中的业务操作
  • 持久性是直接JDBC(来自业务层)和EJB 2.x BMP实体bean(我知道,我知道)的混合。

我的问题是:是否有任何标准模式或(更好的)框架/库专门用于添加审计作为交叉问题?我知道AOP可以用来实现一般的跨领域问题;我想知道是否有专门针对审计的内容。

6 个答案:

答案 0 :(得分:5)

也许您应该查看提供业务功能审核的Audit4j,并提供多种配置选项。 另一个框架是JaVers,它更多地用于审计持久层上的低级修改,这可能会更好地匹配您的情况。

两个框架都提供超出普通AOP /拦截器的审计特定功能。

答案 1 :(得分:2)

现在我倾向于使用Spring AOP(使用“@AspectJ”样式)来建议暴露于Web层的业务操作。

答案 2 :(得分:2)

我将在这里略微反对,并建议你看一下较低层的解决方案。我们的应用程序中有一个类似的体系结构,对于我们的审计,我们已经使用了跟踪RDBMS内操作的数据库级审计触发器。这可以按照您想要的细粒度或粗粒度来完成,您只需要识别您想要跟踪的实体。

现在,这不是一种思想上纯粹的解决方案;它涉及将逻辑放在数据库中,可以说它应该保留在业务层中,我不能否认这个视图有价值,但在我们的例子中,我们有许多独立的应用程序与数据模型交互,一些用C语言编写,一些脚本和其他J2EE应用程序,所有这些都必须一致地进行审计。

在J2EE方面,可能仍有一些AOP工作需要完成,请注意;任何更新数据库的方法都可能需要做一些额外的工作来告诉数据库哪个用户正在做这项工作。我们使用数据库会话变量来执行此操作,但当然还有其他解决方案。

答案 3 :(得分:0)

尝试Aspect Oriented编程框架。

来自维基百科“面向方面编程(AOP)是一种编程范式,通过允许分离交叉问题来增加模块性。”

答案 4 :(得分:0)

对于所有EJB,您可以使用EJB 3.0 Interceptor(这类似于Servlet过滤器)和另一个类似Spring的拦截器(不熟悉spring) 正如您使用EJB以及可能无法覆盖整个事务的Spring一样。另一种方法可能是使用前端控制器,但需要在客户端进行一些修改。另一种方法可能是使用Servlet过滤器,但这意味着在表示层中实现域逻辑。

在这种情况下我会推荐Front Controller。

答案 5 :(得分:0)

我刚刚了解了一个名为Spring Data JPA的新Spring项目,它提供了AOP-based auditing feature。它还不是GA,但它值得关注。

相关问题