2015-06-19 2 views
8

मैं एक वेबपैप में ehcache का उपयोग करता हूं जिसका संस्करण deployed in parallel टॉमकैट उदाहरण पर है। एप्लिकेशन को रोक दिए बिना नए संस्करणों को तैनात करने का यह एक आसान तरीका है।समानांतर में तैनात वेबपैप के सभी संस्करणों के कैश बंद कर दिए गए हैं

मैं हालांकि इस तरह से आगे बढ़ने के लिए के साथ एक समस्या है: भले ही मैं webapp के संस्करण पर निर्भर करता है, कैश और डिस्क की दुकान अलग-अलग नाम देते हैं, सभी कैश जब एक उदाहरण रोक बंद कर दिया जाता है।

मेरे config है:

<?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} और ${buildNumber}

निर्माण प्रक्रिया के दौरान Maven द्वारा प्रतिस्थापित किया जा।

क्या कोई जानता है कि इस अवांछित व्यवहार से कैसे बचें?

मैं ehcache-core-2.4.3 और हाइबरनेट-एहैचे-4.3.8 का उपयोग कर रहा हूं।

+0

शायद मैं अनुमान लगाने में गलत हूं लेकिन 'डिस्कपर्सिस्टेंस' सत्य पर सेट नहीं होना चाहिए। मुझे एह कैश के आंतरिक पता नहीं है, लेकिन यदि कैश केवल स्मृति में हैं और आपने एक उदाहरण बंद कर दिया है (उसी जेवीएम में क्योंकि यह अभी भी एक टोमकैट उदाहरण है) यह सही लगता है कि कैश साफ़ हो गया है। – meistermeier

+0

मुझे सही अगर मैं गलत हूँ, लेकिन इस दस्तावेज़ कहता है: diskPersistent: «। कैश के लिए डिस्क के लिए कि अतिप्रवाह, डिस्क कैश CacheManager उदाहरणों के बीच बनी हुई है या» झूठा व्यवहार मैं इच्छा है। –

+0

मुझे नहीं पता कि पारिस्थितिक 2.4 के लिए पूर्ण दस्तावेज़ कहां ढूंढें। लेकिन मुझे अपनी जानकारी http://ehcache.org/documentation/2.8/configuration/fast-restart/section "पिछले संस्करणों के साथ संगतता" – meistermeier

उत्तर

2

net.sf.ehcache.constructs.web.ShutdownListener काम सभी कैश प्रबंधकों को बंद करके है।

तो यह आपके लिए काम करने का एकमात्र तरीका यह सुनिश्चित कर रहा है कि आपके कैश प्रबंधक अलग-अलग वर्ग लोडर में समाप्त हो जाएं, जो कि ई-कैश वेब एप्लिकेशन क्लास लोडर द्वारा लोड किया गया है और कंटेनर नहीं है।

क्या आप अपने ऐप के WEB-INF/lib में ehcache जार प्रदान करते हैं? यदि हां, तो क्या आप निश्चित हैं कि टोमकैट के क्लासपाथ में एशैच नहीं है?

यदि यह समाधान अभी भी काम नहीं करता है, तो आप अपने ServletContextListener को बनाने से बेहतर हो सकते हैं जो केवल एप्लिकेशन के कैश प्रबंधक को बंद कर देगा।

+0

मैं tomcat/lib में ehcache प्रदान करता हूं। आपकी व्याख्या दिलचस्प है। मैं सोमवार को परीक्षण करूंगा। जैसे ही हाइबरनेट अपने ehcache इंस्टेंस को रोकता है, मैं केवल सुरक्षित रूप से हाइबरनेट को बंद कर सकता हूं, और कुछ भी नहीं। –

+0

आप सही थे, मैं खुशी से आपको 50 प्रतिष्ठा अंक देता हूं। :-) –

0

कुछ जानकारी आपकी क्वेरी से गायब हैं।

1) आप कैश को कैसे रोक रहे हैं?

2) आप टोमकैट में एप्लिकेशन कैसे तैनात कर रहे हैं?

3) क्या आपने उस स्थान की जांच की है जहां कैश ऑब्जेक्ट बनाया गया है?

लेकिन एक व्यवहार के रूप में आप टोमकैट को पुनरारंभ करने के बाद सभी कैश साफ़ कर देंगे।

+0

1) कैश से मिली net.sf.ehcache.constructs.web.ShutdownListener श्रोता द्वारा रोक दिया गया है। 2) आवेदन वेबपैस/डीआईआर में युद्ध छोड़कर तैनात किया गया है।फिर, Tomcat कॉन्फ़िगरेशन के कारण autodeployed है। 3) शायद मैं आपके प्रश्न को पूरी तरह से समझ नहीं पा रहा हूं, लेकिन प्रत्येक संस्करण अपनी अलग डिस्कस्टोर का उपयोग करता है, और चीजें वहां लिखी जाती हैं। क्या मुझे कुछ और दिखना चाहिए? –

संबंधित मुद्दे