2011-08-26 17 views
15

Nó sẽ xuất hiện từ việc tìm kiếm xung quanh ở đây và trên web mà không thể thực hiện EHCache như một bộ đệm ẩn cho Hibernate, vì nó đòi hỏi những thay đổi đáng kể đối với mã Hibernate.Write-Behind Cache cho JPA

Có bất kỳ giải pháp nào khác (tốt nhất là nguồn mở) cho nhà cung cấp JPA có thể 'minh bạch' móc vào việc thực hiện bộ đệm phía sau hay không, và tốt nhất là có thể phân phối với thứ gì đó như Terracotta?

Tôi đã đọc rằng EclipseLink và Oracle Coherence có thể đạt được điều này, nhưng Coherence thật đáng buồn không phải là một giải pháp rẻ tiền!

+0

Vấn đề với EHCache và Hibernate có lẽ là việc sử dụng Hibernate từ mã máy khách của bạn và sau đó làm cho chuyển giao hibernate sang ehcache một cách minh bạch trước tiên, và sự tồn tại thực sự không đồng bộ như viết sau. Tôi không thấy bất kỳ vấn đề với mã khách hàng bằng văn bản cho bộ nhớ cache trực tiếp và sử dụng hibernate độc ​​lập cho viết-đằng sau. – greyfairer

Trả lời

4

Chúng tôi đã viết một trình xử lý bộ nhớ cache ghi phía sau cho Coherence, dựa trên Hibernate.

Điều gì ngăn bạn viết EHCache CacheWriter bằng cách sử dụng bất kỳ triển khai JPA nào, như được mô tả trong http://ehcache.org/documentation/apis/write-through-caching. Bạn có thể mở rộng AbstractCacheWriter và tất cả những gì bạn cần thực hiện là viết (net.sf.ehcache.Element), writeAll (java.util.Collection), xóa (net.sf.ehcache.CacheEntry) và deleteAll (java.util) .Bộ sưu tập).

Chỉ cần đảm bảo rằng nó hoàn toàn độc lập với giao dịch xung quanh. Ứng dụng của bạn sau đó ghi vào bộ nhớ cache một mình, và không sử dụng JPA nữa.

Các sự cố bạn gặp phải là gì?

+0

Cảm ơn bạn đã chia sẻ trải nghiệm của mình, điều đó nghe có vẻ dễ hơn tôi mong đợi! Tôi đã không cố gắng viết một bộ nhớ đệm, như trong câu hỏi ban đầu của chúng tôi, chúng tôi đang tìm kiếm các giải pháp 'trong suốt' - những giải pháp yêu cầu mã hóa tối thiểu, nhưng có thể đạt được thông qua cấu hình và sử dụng thư viện một mình. –

+0

Tôi đã thực hiện một cái gì đó rất giống nhau: Các phần của ứng dụng sử dụng EHCache, được hỗ trợ bởi JPA (đằng sau một EJB3 SLSB). Rất đơn giản, miễn là bạn ổn với đồ thị đối tượng bị ngắt kết nối hoàn toàn. –

+0

@JoshuaDavis bạn cần phải tìm sự cân bằng giữa việc ngắt kết nối đối tượng miền của bạn và không chuẩn hóa. Tôi đã thấy một bài thuyết trình thú vị tại JAX London của Ben Stopford cách họ làm tại Ngân hàng Hoàng gia Scotland: http://www.benstopford.com/2011/01/27/beyond-the-data-grid-building-a- normalized-data-store-using-coherence/ – greyfairer

Các vấn đề liên quan