2012-06-21 4 views
5

में मौजूद है, मैं अपने अपाचे शिरो सक्षम वेब सेवा में प्राधिकरण कैशिंग को संभालने के लिए कॉन्फ़िगर किया गया है IHCache प्राप्त करने का प्रयास कर रहा हूं। वर्तमान में मैं निम्न अपवाद हो रही है:अपाचे शिरो एह कैश प्रारंभिक अपवाद: एक अन्य अनाम कैशमेनगर पहले से ही उसी वीएम

org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: एक अन्य अज्ञात CacheManager पहले से ही एक ही वी एम में मौजूद है। कृपया कॉन्फ़िगरेशन में प्रत्येक कैश मैनेजर के लिए अद्वितीय नाम प्रदान करें या निम्न में से कोई एक कार्य करें:
1. उसी कैशमेनर को उसी नाम से पुन: उपयोग करने के लिए कैशमेनगर.क्रेट() स्थिर फ़ैक्टरी विधियों में से एक का उपयोग करें या यदि आवश्यक हो तो एक बनाएं
2. बंद करें एक ही नाम के साथ नया बनाने से पहले पहले कैश प्रबंधक।

मेरे shiro.ini लगता है:
[मुख्य] ​​
...
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager cacheManager.cacheManagerConfigFile = classpath: ehcache.xml
securityManager.cacheManager = $ cacheManager

इस स्टैक ओवरव्लो पोस्ट से ऐसा लगता है कि स्प्रिंग का उपयोग करने वाले लोगों को कैशमेनगर को सिंगलटन होने के लिए मजबूर कर दिया गया है: Another unnamed CacheManager already exists in the same VM (ehCache 2.5)

क्या कोई स्प्रिंग प्रारंभिकरण का उपयोग नहीं कर रहा है (मैं ड्रॉपविज़ार्ड ढांचे के भीतर काम कर रहा हूं और वसंत में खींचने की कोई आवश्यकता नहीं है)? Shiro.ini से सिंगलटन कॉन्फ़िगरेशन लागू करने का कोई तरीका है?

अग्रिम धन्यवाद!

उत्तर

2

एक कस्टम क्लास बनाएं जो EhCacheManager को बढ़ाती है और कन्स्ट्रक्टर में अपना कैश प्रबंधक सेट करें। यह (net.sf.ehcache.CacheManager.create()) आपको पहले से मौजूद कैशमैनगर का पुन: उपयोग करने की अनुमति देता है।

package lekkie.omotayo 

public class MyShiroCacheManager extends EhCacheManager 
{ 

    public CacheManager() 
    { 
     setCacheManager(net.sf.ehcache.CacheManager.create()); 
    } 
} 

तो फिर तुम यह कर सकते हैं:

cacheManager = lekkie.omotayo.MyShiroCacheManager 
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml 
securityManager.cacheManager = $cacheManager 
संबंधित मुद्दे