2015-11-12 39 views
2

我有一組應用程序(運行在不同的JVM上),其中實體Student被保存到數據庫(共享數據庫)中。我想創建一個儀表板系統,它將幾乎實時地更新網頁,有多少學生已被保存(註冊到系統中)。因此,我認爲我會引入攔截器或偵聽器(因爲所有應用程序都使用休眠),而不是找到學生保存在大代碼庫中的地方。我將介紹一個緩存層,它將更新代表學生信息的緩存,而不是點擊數據庫(我的數據庫已經過載),我可以使用緩存層獲取有關學生註冊的信息。hibernate攔截器跟蹤對象並更新第三方緩存

儀表板如下所示。 學生總數:120

最近登記:

用戶A [時間戳]

用戶B [時間戳]

... ..

我就如下保證我的系統工作正常。

  1. 我需要確保用戶致力於數據庫。我不確定如果 onSave()方法保證提交到數據庫。
  2. afterTransactionCompletion確實聽起來像在 事務提交/回滾之後調用它,但不會給我實體 對象,我將用它來更新緩存。
+0

問題是什麼? –

+0

問題是onSave()或afterTrasactionCompletion中的哪一個適合我的工作?還是有更好的方法。 –

回答

0

所以不是發現那裏的學生都保存在一個大 代碼庫的地方,我想我會介紹攔截器或接收器(因爲 所有應用程序使用Hibernate)。

我覺得很奇怪。無論你有什麼大代碼,應該只有一個地方將學生保存到DB中:StudentRepository。此存儲庫可以注入您的UnitOfWork實例,並且該UnitOfWork應該有addAfterTransactionHandler()方法。我相信這解決了你的問題。

+0

那麼,我的大代碼庫(基本上不同的系統,因此jvms)遵循不同的編碼實踐(不一定是域驅動的設計)。奇怪嗎?是的,他們是舊代碼,我不想去碰它們。 還addAfterTransactionCommit()(我認爲你的意思是)交易傳遞給它。不是我可以使用的實體。我如何得到這個?作爲攔截器,這將被許多其他提交者調用。 –

+0

@TheNeoNoirDeveloper我看到。那麼,你現在處於困難的位置;)順便說一句,我不確定Repository模式只屬於DDD。它通常用於[ISP](https://en.wikipedia.org/wiki/Interface_segregation_principle)(從其餘代碼中分離數據庫查詢)。 –