我在Tomcat和JBoss(儘管Tomcat的早期版本比您正在使用的版本)的集羣環境中使用org.hibernate.cache.EhCacheProvider
和org.springframework.orm.hibernate3.HibernateTransactionManager
成功。沒有必要使用JTA。
EHCache通過各種replication mechanisms支持開箱即用的羣集。我使用了RMI Replicated Caching機制,該機制使用多點傳送進行自動對等點發現,並且在每個節點具有多個高速緩存的多節點羣集中工作得非常好。
配置完成後,複製將發生在節點內的緩存之間以及跨節點的緩存之間。就應用程序而言,它非常可靠,透明,我不記得曾經處理過任何與之相關的問題。它只是工作。
您可以用屬性一起在Hibernate配置中指定EhCacheProvider,使二級高速緩存:
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
配置的其餘部分是在ehcache.xml
文件定義了緩存和複製配置。如果您不熟悉ehcache.xml
的格式,可能需要查看EHCache documentation - 但它們提供了一個有用的示例文件here。
一個例子複製緩存從ehcache.xml
可能是這個樣子:
<cache name="example"
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="0"
timeToLiveSeconds="600">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
</cache>
然後你需要添加這可能看起來像這樣的複製設置:
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.2,
multicastGroupPort=4455, timeToLive=1" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost, port=40001, socketTimeoutMillis=2000" />
這的的確確是它。如文檔中所述,還有其他一些方法可以在EHCache中配置複製,但上述RMI方法相對簡單,並且對我來說運行良好。如果您決定使用EHCache,除了文檔之外,StackOverflow上還有various posts與複製有關,您可能需要諮詢。
謝謝你的回答。 EHCache不是羣集安全嗎?看到這個http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache 這可能是舊的,但我不確定。 EHCache是否需要Terracota服務器來實現集羣安全? – braincell
@braincell - 我認爲在EHCache 1.7中需要使用Terracotta來實施Hibernate鎖定 - 因爲該版本沒有實現Hibernate的鎖定和解鎖方法 - 所以它不被認爲是「集羣安全的」。我的理解是,從2.0版開始,EHCache是集羣安全的。請參閱[EHCache Hibernate用戶指南](http://ehcache.org/documentation/2.4/user-guide/hibernate),其中說**我們期望Ehcache 2。0在Hibernate文檔的新版本中被標記爲集羣安全** –
是的,但是在他們說的那句話之前**在使用Terracotta的Ehcache 2.0中,鎖定和解鎖方法綁定到底層集羣高速緩存鎖。我們期望Ehcache 2.0在Hibernate文檔的新版本中被標記爲集羣安全。** 還想知道......( – braincell