2009-04-19 16 views
8

हाय मैंने हाइबरनेट द्वितीय स्तर के कैश के साथ कुछ समस्याओं में भाग लिया है। कैश प्रदाता के रूप में मैं ehcache का उपयोग करता हूं।हाइबरनेट द्वितीय स्तर कैश

से

<property name="hibernate.cache.use_second_level_cache" value="true"/> 
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> 
<property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml" /> 

persistence.xml मैं एनोटेशन तो उपयोग करते हुए मेरे संस्थाओं कॉन्फ़िगर config का हिस्सा: उन एनोटेशन के लिए

@Cache(region = "Kierunek", usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Kierunek implements Serializable {

आयात कर रहे हैं: import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy;

मेरी ehcache.xml

<diskStore path="java.io.tmpdir" /> 

<defaultCache maxElementsInMemory="10000" eternal="false" 
    timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" 
    diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" 
    diskPersistent="false" diskExpiryThreadIntervalSeconds="120" 
    memoryStoreEvictionPolicy="LRU" /> 

<cache name="Kierunek" maxElementsInMemory="1000" 
    eternal="true" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" /> 

और किसी को भी विचार क्यों मैं त्रुटि निम्न हो सकते हैं?

WARNING: Could not find a specific ehcache configuration for cache named [persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB.Kierunek]; using defaults. 
19:52:57,313 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB state=Create 
java.lang.IllegalArgumentException: Cache name cannot contain '/' characters. 

समाधान

<property name="hibernate.cache.region_prefix" value=""/> 

persistence.xml के लिए एक और संपत्ति को जोड़ने के लिए है और वह है कि दोषपूर्ण उपसर्ग बड़ा THX रुस्लान को हटा!

+1

आपको "lvl" के बजाय शब्द "स्तर" को पूरी तरह से स्पेल करना चाहिए। यह अधिक पठनीय और सीचनीय है। –

+1

आप सही हैं। मैं इसे इसलिए निराश कर रहा था इसलिए मैंने इसके बारे में सोचा नहीं था ^^ धन्यवाद – Dogrizz

उत्तर

8

आईएमएचओ, आपको अपनी कक्षा के लिए जेनरेट किया गया क्षेत्र का नाम मिलता है। यह उत्पन्न नाम "persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje.Kierunek"। और यह आपके ehcache.xml कॉन्फ़िगरेशन में परिभाषित नहीं है। इसके अलावा यह पूर्वनिर्धारित नाम की तलाश में है, इसलिए यह डिफ़ॉल्ट क्षेत्र का उपयोग नहीं कर सकता है।

इस समस्या को आप कुछ क्षेत्र का नाम पूर्वपरिभाषित करने @Cache एनोटेशन गुणों का उपयोग कर सकते हैं हल करने के लिए एक विकल्प के रूप में,

@Cache(region = 'Kierunek', usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Kierunek implements Serializable { 
    // .... 
} 

की तरह और ehcache.xml में

<cache name="Kierunek" 
     maxElementsInMemory="1000" 
     eternal="true" 
     overflowToDisk="false" 
     memoryStoreEvictionPolicy="LRU" /> 
+0

हाँ मुझे जेनरेट किया गया क्षेत्र का नाम मिलता है (अब मुझे पता है कि यह क्षेत्र है, लेख में मैंने पढ़ा है कि इसे सिर्फ कैश कहा जाता था इसलिए मुझे उलझन में आया ..) और यह मेरा मूल इरादा था। आश्चर्य है कि क्यों हाइबरनेट दोषपूर्ण क्षेत्र का नाम उत्पन्न करता है। और एक बार फिर यदि आपके पास डिफ़ॉल्ट प्रविष्टि है तो आपको प्रति इकाई क्षेत्र निर्दिष्ट करने की आवश्यकता नहीं है (यदि आप इसके ठीक हैं)। वैसे भी मैं answere के लिए आभारी हूँ। यह मेरी समस्या हल हो गया। धन्यवाद! ^^ – Dogrizz

+1

आपका स्वागत है। मैंने प्रलेखन की जांच की है। उन्होंने कहा कि डिफ़ॉल्ट क्षेत्र का नाम पूरी तरह से योग्य वर्ग का नाम है। दस्तावेज़ीकरण में यह एक बड़ी गलती है, उन्हें इसे ASAP को ठीक करना चाहिए, क्योंकि यह किसी भी मामले में स्पष्ट नहीं है। – ruslan

+0

यह 2 तैनाती के लिए काम करता है और अब मुझे मिलता है: चेतावनी: कैश के लिए एक विशिष्ट ehcache कॉन्फ़िगरेशन नहीं मिला [persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.Kierunek]; डिफ़ॉल्ट का उपयोग कर। 1 9: 52: 57,313 त्रुटि [सार कर्नेल नियंत्रक] प्रारंभ करने के लिए स्थापित करने में त्रुटि: name = persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB स्थिति = java.lang.IllegalArgumentException: कैश नाम में '/' वर्ण नहीं हो सकते । यह एनोटेशन में क्षेत्र का नाम सेट करता है लेकिन अतिरिक्त उपसर्ग जोड़ता है .. – Dogrizz

0

ईएच कैश को एक कॉन्फ़िगरेशन की आवश्यकता होती है जो बताती है कि आपके एप्लिकेशन में ऑब्जेक्ट कैश करना (लाइव टाइम, कैश टाइप, कैश साइज, कैशिंग व्यवहार इत्यादि)। प्रत्येक वर्ग के लिए आप कैश करने का प्रयास करते हैं, यह उपयुक्त कैश कॉन्फ़िगरेशन ढूंढने का प्रयास करेगा और अगर ऐसा करने में विफल रहता है तो उपर्युक्त त्रुटि मुद्रित करें।

EHCache को कॉन्फ़िगर करने के लिए http://ehcache.sourceforge.net/documentation/configuration.html देखें।

+0

मेरे पास ehcache की उचित कॉन्फ़िगरेशन है (और यदि आपके पास "डिफ़ॉल्ट" कैश परिभाषित है तो आपको ehcache.xml में प्रत्येक इकाई को भी कॉन्फ़िगर करने की आवश्यकता नहीं है)। समस्या यह है कि क्यों हाइबरनेट उस अजीब कैश नाम उत्पन्न करता है? यह pl.bdsdev.seps.encje.Kierunek होना चाहिए और persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje होना चाहिए।Kierunek – Dogrizz

5

हाइबरनेट जोड़ने कैश नाम के लिए उपसर्ग एपनाम या संपत्ति के मूल्य के आधार पर hibernate.cache.region_prefix

यदि आप इस प्रॉपर्टी को "" (खाली स्ट्रिंग) के लिए सेट करते हैं तो आपके पास नामक क्षेत्र हैं हाइबरनेट कॉन्फ़िगरेशन में नाम।

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