2011-01-18 16 views
5

सरल प्रश्न के लिए खेद है, लेकिन ऐसा कोई स्पष्ट तरीका प्रतीत नहीं होता है। प्रलेखन के अनुसार, स्मृति में IndexWriter का एक उदाहरण रखने की अनुशंसा की जाती है जिसे अद्यतनों के लिए बार-बार उपयोग किया जा सकता है, क्योंकि प्रत्येक परिवर्तन के लिए खोलने और बंद करने के विपरीत (जो अधिक महंगा है)।मैं कैसे जांच सकता हूं कि ल्यूसीन इंडेक्सवाइटर उदाहरण वैध/खुला है या नहीं?

हालांकि, दस्तावेज यह भी बताता है कि IndexWriter को अपवाद होने पर बंद किया जाना चाहिए (उदा। OutOfMemoryException)।

इसलिए, मुझे यह जांचने के लिए कुछ तरीका चाहिए कि IndexWriter का मेरा उदाहरण वैध है या नहीं, मान लीजिए कि इसे किसी अन्य ऑपरेशन द्वारा बंद किया जा सकता है।

मुझे एहसास है कि अगर मैं इसे बंद होने पर इसका उपयोग करने का प्रयास करता हूं तो मुझे अपवाद मिलेगा, लेकिन असफल होने की बजाय, मैं यह देखने के लिए जांचना चाहता हूं कि मुझे इसकी आवश्यकता होने से पहले नया IndexWriter बनाने की आवश्यकता है, इसलिए कोई विफलता नहीं होती है।

मुझे लगता है कि यह एक साधारण IsOpen संपत्ति/विधि इतना स्पष्ट जोड़ होगा।

विचार:

मुझे लगता है कि अगर मैं यह सुनिश्चित कर सकता है कि कि मेरी कक्षा केवल IndexWriter बंद करने में सक्षम बात है, मैं बस null के लिए सेट कर सकता है जब यह बंद हो गया और बस यकीन है कि यह है करने के लिए जाँच है जब भी मैं इसका उपयोग करने के लिए जाता हूं null नहीं, हालांकि यह उन मामलों को संभाल नहीं पाएगा जहां IndexWriter स्वयं बंद हो जाता है (यदि ऐसा मामला अब या भविष्य में संभव है)।

एक और विचार यह है कि मैं कोशिश/पकड़ ब्लॉक में इसका उपयोग करने का प्रयास लपेट सकता हूं और यह संकेत देने के लिए अपवाद का उपयोग कर सकता हूं कि इसे फिर से खोलने की जरूरत है, लेकिन यह बहुत ही कुशल/सुरुचिपूर्ण प्रतीत नहीं होता है। IndexWriter की वैधता का परीक्षण करने के लिए मैं किस विधि का उपयोग करूंगा?

उत्तर

3

आप स्मृति अपवाद का एक बाहर निकलना है (या अपवाद के किसी भी प्रकार, वास्तव में), जो संभावित रूप से एक बड़ी समस्या है। जिन बदलावों को आप लिखने की कोशिश कर रहे थे, वे संभवतः लिखे नहीं जाएंगे, और अपवाद कैसे हुआ/इस पर निर्भर करता है कि आपकी अनुक्रमणिका भी दूषित हो सकती है।

तो एक IndexWriter एक दोषपूर्ण स्थिति में होने के नाते एक असाधारण परिस्थिति है, और मैं कहूंगा कि यह निश्चित रूप से अपवादों का उपयोग करके वारंट करता है, यानी कोशिश करें/पकड़ें।

(मुझे नहीं लगता कि आपका पकड़ "लेखक को दोबारा खोल देगा।" अपवाद के आधार पर, आपको संभवतः स्क्रैच से सामानों को फिर से वितरित करने की आवश्यकता हो सकती है। निश्चित रूप से आपको अपने लेखक में अपवाद प्राप्त करने की उम्मीद नहीं करनी चाहिए नियमित घटना।)

1

मुझे लगता है कि IndexWriterAlreadyClosedException (ensureOpen देखें), यदि यह पहुंच पर बंद है तो फेंक देगा। इसलिए यदि आप IndexWriternull नहीं हैं तो आप इसे संभाल सकते हैं।

HTH

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

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