2008-09-16 19 views
7

我有一個現有的J2EE企業應用程序,我需要添加審覈功能,即能夠在多個重要的域類型(Employee,AdministratorRights等)上記錄CRUD操作。將審計添加到現有應用的良好模式或框架?

應用程序有一個標準的n層體系結構:(使用Spring)無狀態會話bean和事務的POJO的混合物中封裝

  • Web界面
  • 業務運營
  • 持久性的混合物直接JDBC(來自業務層)和EJB 2.x BMP實體bean(我知道,我知道)

我的問題是:有沒有任何標準模式或者(更好的)框架/庫專門用於將審計添加爲交叉性關注?我知道AOP可以用來實現一般的交叉問題;我想知道是否有專門針對審計的內容。

+0

最低選民是否可以解釋原因? – 2015-07-29 01:19:00

回答

2

現在我傾向於使用Spring AOP(使用「@AspectJ」風格)來建議暴露於Web層的業務操作。

+0

我也會從這裏開始,特別是如果我的應用程序已經使用Spring pojos - 應該比添加不同的AOP庫更容易添加。 – 2008-09-16 03:22:08

0

嘗試一個Aspect Oriented編程框架。

維基百科「面向方面編程(AOP)是一種編程範例,通過允許分離橫切關注點來增加模塊性」。

0

對於所有的EJB,您可以使用EJB 3.0攔截器(這類似於Servlet過濾器)和Spring的其他類似攔截器(不熟悉彈簧) 由於您使用的EJB和Spring並不能涵蓋整個交易。另一種方法可能是使用前端控制器,但需要在客戶端進行一些修改。另一種方法可能是使用Servlet過濾器,但這意味着在表示層中實現域邏輯。

我會在這種情況下推薦Front Controller。

2

我打算在這裏反對穀物,並建議您看一下較低層的解決方案。我們在應用程序中有一個類似的體系結構,對於我們的審計,我們已經使用了跟蹤RDBMS內操作的數據庫級審計觸發器。這可以按照您喜歡的細粒度或粗粒度來完成,您只需確定要跟蹤的實體即可。

現在,這不是一個思想上純粹的解決方案;它涉及將數據庫中的邏輯放在可以被認爲應該保留在業務層的數據庫中,並且我不能否認這個視圖有價值,但在我們的例子中,我們有許多獨立的應用程序與數據模型進行交互,一些用C語言編寫,一些腳本以及其他J2EE應用程序,並且所有這些應用程序都必須一致地進行審計。

在J2EE端可能還有一些AOP工作需要完成,請注意,任何更新數據庫的方法都可能需要做一些額外的工作來告訴數據庫哪個用戶正在做這項工作。我們使用數據庫會話變量來做到這一點,當然還有其他解決方案。

0

我剛剛瞭解到一個名爲Spring Data JPA的新Spring項目,它提供了一個AOP-based auditing feature。這還不是遺傳算法,但需要密切關注。

5

也許你應該看看Audit4j,它提供了對業務功能的審計,並有多個配置選項。 另一個框架是JaVers,它更多地關注審計持久層上的低級修改,這可能會更好地匹配您的情況。

這兩個框架都提供了超出普通AOP /攔截器的審計特有功能。

相關問題