2012-01-17 18 views
8

हमारे पास ऐसी स्थिति है जहां हमारा वसंत कुछ बीन्स चलाता है जिसमें जावा 6 के साथ निर्मित ActiveMQ कक्षाएं शामिल हैं। हमारा एप्लिकेशन ग्राहक के सर्वर पर चलता है, इसलिए हम गारंटी नहीं दे सकते कि उनके पास जावा 6 या बाद में स्थापित है। यदि उनके पास जावा 5 होना है, तो एप्लिकेशन BeanCreationException एस के कारण सक्रिय एमक्यू (रूट कारण UnsupportedClassVersionError) पर निर्भर वर्गों के साथ शुरू नहीं हो सकता है।क्या मैं बीनक्रिएशन अपवाद को अनदेखा कर सकता हूं और इसके बजाय शून्य को इंजेक्ट कर सकता हूं?

तो मेरा सवाल यह है कि BeanCreationException को अनदेखा करने का कोई तरीका है और अभी भी एप्लिकेशन शुरू करें? मैं एक त्रुटि संदेश प्रदर्शित करने में सक्षम होना चाहता हूं कि उन्हें जावा 6 या बाद में स्थापित करने की आवश्यकता है, लेकिन चूंकि एप्लिकेशन भी शुरू नहीं हो सकता है, इसलिए मुझे ऐसा करने का मौका कभी नहीं मिला।

मेरा हल यह है कि ऐसा करने का कोई तरीका नहीं है, क्योंकि वसंत को यह गारंटी देने में सक्षम होना चाहिए कि मेरा आवेदन प्रारंभ करने के बाद ठीक से बनाया गया है, लेकिन मैंने सोचा कि मैं वैसे भी पूछूंगा। मेरे अंतिम लक्ष्य को पूरा करने के लिए कोई अन्य सुझाव भी उपयोगी और सराहना करेगा।

हम वसंत 3.0.6

धन्यवाद का उपयोग कर रहे हैं!

उत्तर

0

सबसे पहले, java.lang.Error के उप-वर्ग वाले किसी भी फेंकने वाले को आम तौर पर गैर-पुनर्प्राप्ति माना जाता है। इसलिए जब यह उन्हें पकड़ने के लिए संभव है, it's strongly discouraged:

एक Error कि गंभीर समस्याओं है कि एक उचित आवेदन को पकड़ने की कोशिश नहीं करनी चाहिए इंगित करता है Throwable का एक उपवर्ग है। ऐसी अधिकांश त्रुटियां असामान्य स्थितियां हैं।

हालांकि, अगर आप ऐसा करने जा रहे हैं तो एक त्रुटि संदेश प्रदर्शित होता है, तो आप इससे दूर हो सकते हैं।

SO अपने प्रश्न पर वापस जाने के लिए, मैं creating an implementation वसंत के FactoryBean इंटरफ़ेस का सुझाव देता हूं, जो ActiveMQ कक्षाओं को लोड करने का प्रयास करेगा। यदि यह काम करता है, तो यह उपयुक्त वस्तु को FactoryBean.getObject से वापस कर सकता है। यदि यह विफल रहता है (पकड़े गए UnsupportedClassVersionError के माध्यम से), तो यह या तो null या उस स्थिति का प्रतिनिधित्व करने वाली किसी अन्य वस्तु को वापस कर सकता है।

+0

धन्यवाद, यह मेरे लिए काम करता प्रतीत होता है। मैंने इसे उत्तर के रूप में चुना क्योंकि यह फैक्टरीबीन का सुझाव देने वाला पहला था, और मुझे स्प्रिंग को अपग्रेड करने के लिए नहीं कहा था। –

0

आप एक कारखाना बीन बना सकते हैं और इसे वास्तविक ActiveMQ बीन बना सकते हैं। यदि इसे शुरू नहीं किया जा सकता है तो कारखाना एक डमी/नकली कार्यान्वयन वापस कर सकता है ताकि चीजें टूट न जाए। बाद में आप कारखाने से पूछ सकते हैं अगर सब कुछ ठीक हो गया।

@Bean 
public SomeBean public someBean() { 
    if(isEverythingOkWithJavaVersion()) { 
     return new CorrectBean(); 
    } else { 
     return null; 
    } 
} 

या:: स्प्रिंग FactoryBean के पुराने संस्करणों में

@Bean 
public SomeBean public someBean() { 
    try { 
     return new CorrectBean(); 
    } catch(UnsupportedClassVersionError e) { 
     log.warn("", e); 
     return null; 
    } 
} 

हो सकता है

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-extension-factorybean

4

आप स्प्रिंग 3.1 (स्थिर) में नवीनीकृत कर सकते हैं, तो लाभ जावा विन्यास के ले एक ही तर्क को लागू करने के लिए प्रयोग किया जाता है। null लौटने के बजाय आप कुछ नकली कार्यान्वयन भी वापस कर सकते हैं जिसे आप बाद में खोज सकते हैं और जब उपयोगकर्ता इसका उपयोग करने का प्रयास करता है तो उपयोगकर्ता को चेतावनी दे सकता है।

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

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