2015-06-19 29 views
8

Bir Tomcat örneğindeki sürümleri deployed in parallel olan bir web uygulamasında ehcache kullanıyorum. Bu, yeni sürümleri bir uygulamayı durdurmadan dağıtmanın kullanışlı bir yoludur.Paralel olarak dağıtılan bir web sunucusunun tüm sürümlerinin önbellekleri kapatıldı

Ben ancak devam etmek bu şekilde bir sorun var: bir örneğini durdurma zaman webapp sürümlerine bağlı olarak, önbellek ve disk mağaza farklı adlar vermeyi bile tüm önbelleğe durdurulur.

Benim yapılandırma geçerli:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="ehcache.xsd" name="mywebapp-${project.version}_build_${buildNumber}"> 
<defaultCache 
    maxElementsInMemory="1000" 
    maxElementsOnDisk="10000" 
    eternal="false" 
    timeToLiveSeconds="300" 
    timeToIdleSeconds="300" 
    overflowToDisk="true" 
    diskPersistent="false" 
    memoryStoreEvictionPolicy="LRU" 
    statistics="true" 
/> 

<cache 
    maxElementsInMemory="1000" 
    maxElementsOnDisk="10000" 
    name="org.hibernate.cache.internal.StandardQueryCache" 
    eternal="false" 
    timeToLiveSeconds="300" 
    timeToIdleSeconds="300" 
    overflowToDisk="true" 
    diskPersistent="false" 
    statistics="true"/> 

<cache 
    name="org.hibernate.cache.spi.UpdateTimestampsCache" 
    maxElementsInMemory="10000" 
    maxElementsOnDisk="100000" 
    timeToLiveSeconds="300" 
    timeToIdleSeconds="300" 
    eternal="false" 
    overflowToDisk="true" 
    diskPersistent="false" 
    statistics="true"/> 

<cache 
    name="query.Presences" 
    maxElementsInMemory="100" 
    maxElementsOnDisk="1000" 
    eternal="false" 
    timeToLiveSeconds="300" 
    timeToIdleSeconds="300" 
    overflowToDisk="true" 
    diskPersistent="false" 
    statistics="true"/> 

<diskStore path="java.io.tmpdir/mywebapp-${project.version}_build_${buildNumber}"/> 

</ehcache> 

${project.version} ve

${buildNumber} oluşturma işlemi sırasında maven yerini.

Birisi bu istenmeyen davranıştan nasıl kaçınıldığını biliyor mu?

Ehcache-core-2.4.3 ve hibernate-ehcache-4.3.8 kullanıyorum.

+0

Belki de tahmin etme konusunda yanıldım, ancak "diskPersistence" öğesi true olarak ayarlanmamalı. EhCache'in iç yapısını bilmiyorum, ancak önbelleklerin yalnızca bellekte tutulması ve bir örneği kapatması (aynı JVM'de hala bir tomcat örneğidir) önbelleğin temizlendiği doğrudur. Yanılıyorsam düzelt, ama doc devletler – meistermeier

+0

: diskPersistent: «önbelleklerini için diske o taşma, disk önbelleği CacheManager örnekleri arasında devam edip» yanlış ben arzu davranıştır. –

+0

ecache 2.4 için tam dokümanlar nerede bulacağımı bilmiyorum ama bilgileri http://ehcache.org/documentation/2.8/configuration/fast-restart/section adresinden aldım "Önceki Sürümlerle Uyumluluk" – meistermeier

cevap

2

yolu, TÜM önbellek yöneticilerini kapatarak çalışır.

Bunun için sizin için çalışmanın tek yolu, önbellek yöneticilerinizin farklı sınıf yükleyicileriyle sonuçlandığından emin olmaktır, yani ehcache, web uygulama sınıfı yükleyicisi tarafından değil, kapsayıcıdan yüklenir.

Uygulamanızın WEB-INF/lib içinde ehcache jar sağlıyor musunuz? Eğer evetse, tomcat'ın sınıfında bir Ehcache olmadığından emin misiniz?

Bu çözüm hala çalışmıyorsa, kendi önbelleği yöneticisini içeren uygulamadan kapatacak kendi ServletContextListener'unuzu yaratmanız daha iyi olabilir.

+0

tomcat/lib'de ehcache veriyorum. Açıklaman ilginç. Pazartesi günü test edeceğim. Hazırda bekletme ehcache örneğini durdurduğunda, yalnızca hazırda bekletme modunu kapatıp başka bir şey yapamayabilirim. –

+0

Haklıydınız, memnuniyetle size 50 itibar puanı veriyor. :-) –

0

Sorgunuzdan bazı ayrıntılar eksik.

1) Önbelleği nasıl durduruyorsunuz?

2) Uygulamayı tomcat'te nasıl dağıtıyorsunuz?

3) Önbellek nesnesinin nerede oluşturulduğunu kontrol ettiniz mi?

Ancak davranış olarak, tomcat'i yeniden başlattığınızda tüm önbellek temizlenir.

+0

1) Önbellek net.sf.ehcache.constructs.web.ShutdownListener dinleyicisi tarafından durduruldu. 2) Uygulama, savaşı webapps/dir'de bırakarak konuşlandırıldı.Daha sonra, Tomcat yapılandırması nedeniyle otomatik olarak dağıtılmıştır. 3) Belki de sorunuzu tam olarak anlayamıyorum, ancak her bir sürüm ayrı bir disket deposunu kullanır ve orada şeyler yazılır. Başka bir şeye bakmalı mıyım? –

İlgili konular