2011-08-26 29 views
15

從這裏搜索以及整個網絡,似乎無法將EHCache實現爲Hibernate的後置緩存,因爲這需要對Hibernate代碼進行大量更改。用於JPA的寫後緩存

是否有任何其他解決方案(最好是開放源代碼)的JPA提供者,可以'透明'掛鉤到一個寫後緩存實現,並且最好是一個可以用像Terracotta這樣的東西分發?

我讀過EclipseLink和Oracle Coherence可以實現這一目標,但Coherence可悲的並不是一個便宜的解決方案!

+0

EHCache和Hibernate的問題可能是指您的客戶端代碼使用Hibernate,然後首先透明地將hibernate傳輸到ehcache,而實際的持久化會以寫入後的方式異步執行。我沒有看到客戶端代碼直接寫入緩存並獨立使用hibernate進行寫入後出現任何問題。 – greyfairer

回答

4

我們根據Hibernate爲Coherence編寫了一個後置緩存處理程序。

什麼阻止您使用任何JPA實現編寫EHCache CacheWriter,如http://ehcache.org/documentation/apis/write-through-caching中所述。你可以擴展AbstractCacheWriter,並且你需要實現的所有東西是write(net.sf.ehcache.Element),writeAll(java.util.Collection),delete(net.sf.ehcache.CacheEntry)和deleteAll(java.util 。採集)。

只要確保它完全獨立於周圍的交易。 您的應用程序然後單獨寫入緩存,並且不再使用JPA。

您遇到過什麼問題?

+0

感謝您分享您的經驗,這聽起來比我期待的要容易得多!我沒有嘗試寫一個寫後緩存,就像我在尋找「透明」解決方案時的原始問題 - 那些需要最少編碼的解決方案,但可以通過配置和單獨使用庫來實現。 –

+0

我做了一些非常類似的事情:部分應用程序使用EHCache,由JPA(在EJB3 SLSB之後)支持。很簡單,只要你完全斷開連接的對象圖就可以了。 –

+0

@JoshuaDavis你需要在斷開你的域對象和反規範化之間找到平衡點。我在Ben Stopford的JAX London看到了一個有趣的演講,他們如何在蘇格蘭皇家銀行做了一個ID:http://www.benstopford.com/2011/01/27/beyond-the-data-grid-building-a- normalized-data-store-using-coherence/ – greyfairer