हम अभी स्प्रिंग 4 और जेएमएस 2.0 में अपग्रेड किए गए हैं। हम एक CachingConnectionFactory
और एक JmsTemplate
उपयोग कर रहे हैं सन्देश को प्रकाशित करने और पाया है कि जब एक गंतव्य के लिए प्रकाशित करने, पहला प्रयास काम करता है और फिर आगे प्रयास एक ही गंतव्य के लिए प्रकाशित करने के लिए निम्नलिखित अपवाद का कारण: javax:जेएसएम 2.0 के साथ स्प्रिंग 4 कैशिंगकनेक्शन फैक्ट्री ठीक से कैश नहीं करता है उत्पादक
की वजह से। jms.IllegalStateException: निर्माता बंद कर दिया है
सब कुछ वसंत 3.2 के साथ ठीक काम किया है और JMS 1.1 तो मैं कुछ देखने के लिए क्या समस्या थी और ऐसा लगता मुद्दा CachedMessageProducer
कक्षा में है खुदाई किया था। आम तौर पर यह वर्ग MessageProducer
इंटरफ़ेस में सभी विधियों को फिर से लागू करता है। विशेष रूप से close()
विधि है जिसे पुन: लागू किया गया है और केवल गुणों को रीसेट करेगा, लेकिन JmsTemplate
का उपयोग करके संदेश भेजे जाने के बाद निर्माता को जीवित रखें (क्योंकि यह एक कैशिंग फैक्ट्री है)।
हालांकि, स्प्रिंग 4 में getProxyIfNecessary
नामक एक नई विधि है जो निर्धारित करती है कि जेएमएस 2.0 का उपयोग किया जा रहा है या जब यह जेएमएस 2.0 का पता लगाता है तो यह Jms2MessageProducerInvocationHandler
प्रॉक्सी बनाता है। इस प्रॉक्सी का आक्रमण विधि मूल MessageProducer
ऑब्जेक्ट पर सभी कॉलों को प्रतिनिधि दे रही है, और ऐसा लगता है कि कैश मैसेज प्रोड्यूसर में विधि कॉल को बाईपास करना प्रतीत होता है। अंतिम परिणाम यह है कि करीबी विधि को मूल MessageProducer
ऑब्जेक्ट पर कॉल किया जाता है (जिसे हम नहीं चाहते हैं क्योंकि इसे कैश किया जाना चाहिए)। इसका मतलब है कि प्रकाशित करने के लिए भविष्य के प्रयास अपवाद देते हैं कि निर्माता बंद कर दिया गया है।
क्या किसी और के पास इससे पहले कोई समस्या थी? मुझे यकीन नहीं है कि मैं कुछ गलत कर रहा हूं या यदि यह वसंत में नए जेएमएस 2.0 समर्थन के साथ एक बग है।
मुझे लगता है कि यह एक बग है और मैंने एक जिरा टिकट बनाया: https://jira.spring.io/browse/SPR-11949 – cshannon