2011-04-05 10 views
6

तो, मैं ऐसी परिस्थिति में हूं जहां मैं एसिंक्रोनस प्रोसेसिंग के लिए HttpServletRequest ऑब्जेक्ट्स का एक गुच्छा कतारबद्ध करना चाहता हूं। इस पल के लिए अलग रहें कि यह एक बुद्धिमान रणनीति है या नहीं - वास्तव में यह इस मामले में है, क्योंकि मैं एक भयानक विरासत प्रणाली को फिर से निकालने की कोशिश कर रहा हूं - क्या यह एक खतरनाक बात है?क्या बाद में प्रसंस्करण के लिए कतार में HttpServletRequest ऑब्जेक्ट्स को स्टोर करना खतरनाक है?

मुझे इस बारे में चिंता है कि क्या HttpServletRequest ऑब्जेक्ट किसी भी मूल्यवान संसाधनों या खुले कनेक्शन पर है या नहीं, जो डेडलॉक्स या संसाधन विवाद के मुद्दों का कारण बनेंगे।

यहाँ मान लें कि मैं एक विधि doPost() कि HttpServletRequest वस्तु लेता है, यह एक LinkedBlockingQueue में डालता है, और उसके बाद उपयोगकर्ता (शेयर प्रतिक्रिया के कुछ प्रकार भेजता है एक 301 की तरह एक पुष्टिकरण को अनुप्रेषित के साथ एक सरल सर्वलेट को लागू कर रहा हूँ पृष्ठ)।

धन्यवाद!

+0

आपके सर्वलेट कंटेनर पर निर्भर करता है, लेकिन यह उड़ने की काफी संभावना है। अनुरोध में आप किस जानकारी तक पहुंचेंगे? * अपने * एलबीक्यू में सामान डाल दें। – Ron

+0

मैं राल का उपयोग कर रहा हूँ। और हाँ, मुझे पता है कि मैं ऐसा कर सकता हूं, लेकिन विरासत कोड के साथ होने वाले विभिन्न कारणों से, यह उतना सरल नहीं है जितना होना चाहिए। – sangfroid

उत्तर

6

मैंने जेटी के आंतरिक भाग को देखा है, और मैं आपको आश्वस्त कर सकता हूं कि मौजूदा अनुरोध से उस संरचना को आगे बढ़ाना बहुत बुरा होगा। वर्तमान कनेक्शन स्थिति के सभी प्रकार हैं जिनका उपयोग वर्तमान अनुरोध के बाहर नहीं किया जा सकता है। मैं मदद नहीं कर सकता लेकिन मान लीजिए कि यह किसी भी सर्वलेट कंटेनर के लिए सच होगा।

ऐसा लगता है कि आप मूल अनुरोध का जवाब देने और फिर कुछ अतिरिक्त प्रोसेसिंग करने की योजना बना रहे हैं। मैं ऑफ़लाइन प्रसंस्करण के लिए मूल अनुरोध से आपको आवश्यक जानकारी की प्रतिलिपि बनाने की अनुशंसा करता हूं। साथ ही, यदि आप कोड से निपट रहे हैं जिसके लिए एक HttpServeletRequest की आवश्यकता है, तो आप हमेशा कोड द्वारा आवश्यक डेटा के बिट्स के साथ अपना खुद का नकल कर सकते हैं।

+0

असल में, मुझे ऐसी प्रक्रिया लेने की आवश्यकता है जो वर्तमान में सिंक्रोनस है, और इसे अतुल्यकालिक बनाएं। मुझे आवश्यक सभी मान HTTP हेडर, फॉर्म पैरामीटर और कुकीज़ में हैं। समस्या यह है कि मूल्यों का यह सेट विरासत कोड में बीमार और परिभाषित किया गया है। मैं इन मूल्यों को "खोज" करने का प्रयास कर सकता हूं और फिर HttpServletRequest ऑब्जेक्ट की बजाय एक नई डेटा संरचना लेने के लिए व्यवसाय तर्क को दोबारा दोहरा सकता हूं, लेकिन यह एक कठिन, त्रुटि-प्रवण प्रक्रिया होगी। मैं अकेले विरासत कोड छोड़ दूंगा और एक HttpServletRequest ऑब्जेक्ट में पास करना जारी रखूंगा। मॉकिंग एक विकल्प है, यद्यपि। – sangfroid

1

मैं एक बहुत ही इसी तरह काम किया है, और समस्याओं मैं अनुभव से एक है, कि जेट्टी कुछ बिंदु पर HttpServletRequest अंदर सामान को साफ करने लगता है null वापसी और यहां तक ​​कि फेंकने NPEs getXYZ तरीकों में से कुछ से मूल्यों पर साथ छोड़ आप दूसरों के लिए।

तो, हाँ, यह खतरनाक है।

अब मैं doPost और doGet के अंदर की जरूरतों को कॉपी करता हूं और पूरी तरह से उदाहरण को भूल जाता हूं।

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