2010-08-29 39 views
2

我有一個GWT應用程序,其RPC服務由GWTHandler bean處理,以便它可以順利地與Spring集成。該應用程序工作。沒有問題。GWT Spring集成 - 如何做AOP日誌記錄?

我的問題是我不能用Spring做任何AOP日誌記錄。我喜歡使用AOP從GWT界面記錄用戶活動。 (當然,我可以按照以前的方式爲用戶執行的每個操作調用RPC服務並記錄這些操作,但這不是AOP方式)。我必須在AOP中這樣做,因爲這是客戶的要求。

我嘗試使用普通的切入點模式「執行(* (..))」的普通Spring AOP。它能夠捕獲除GWT服務之外的所有方法。換句話說,它是無用的。我當然可以使用AOP登錄後端Spring DAO,但我怎麼知道它來自哪個RPC服務?這些DAO被許多類和方法使用(不是GWT專有的)。

我試過探索GWT-ENT包。看上去不錯。但是,它適用於客戶端,而您的類必須實現Aspectable。這意味着需要對我的GWT應用程序上的所有客戶端類進行更改。此外,您不能使用私有方法,因爲使用GWT-ENT處理AOP,您需要通過GWT.create而不是new()來創建類。私有方法拋出錯誤。我設置了一個簡單的應用程序,真正的私有方法不起作用。

我試着搜索GWT-SL包(我的GWTHandler來自哪裏)。他們提到了關於AOP的一些事情,但信息非常稀缺。谷歌沒有給我任何解決方案或例子。

我試過了所有我能想到的東西,並用我所有的努力搜索了Google,但是我找不到解決我的問題的方法。

我想要做的就是通過AOP從我的GWT服務記錄方法。假設客戶轉到「報告」選項卡。然後他點擊刪除按鈕記錄。我想通過AOP登錄該活動。

我正在使用GWT(與SmartGWT)和Spring/Hibernate堆棧。

+0

經過一番調查,我決定在DAO層而不是GWT(表現層/服務層)中進行AOP日誌記錄,因爲我們不關心用戶的視覺按鈕選擇刪除記錄。如果他刪除了一條記錄,它將只使用特定的DAO。所以AOP記錄DAO層是有意義的。此外,我意識到我遇到困難的另一個原因是因爲處理我正在使用的項目的前一位程序員混合了服務和DAO層。兩者之間應該有清晰的分離。 – chris 2010-08-30 13:21:48

回答

0

Spring AOP只會在Spring上下文中建議bean的公共方法,所以GWT基礎結構不在,除非您通過Spring容器特別實例化它。

你可以使用編譯時編織AspectJ將你的AOP連接到任何東西,但它可能會有點混亂。除非你正在編譯有問題的GWT類,否則它也不能確定。

+0

GWT服務是由第三方類(GWTHandler,類似於Spring的SimpleURLHandler - 忘記了確切的名稱)連接的Spring bean。現在,我正在重新評估應該在哪裏進行AOP日誌記錄。我認爲最好是我只記錄DAO而不是GWT服務(因爲幾乎不可能記錄它們)。一旦一切變得清晰,我會再次回覆。 – chris 2010-08-30 04:23:58

0

我要回答我的問題。

而不是在GWT服務器實現上執行AOP日誌記錄(理論上應該工作,但實際上它不工作),我決定做DAO層上的AOP日誌記錄。只要確保你記錄了DAO而不是Hibernate Session