2012-10-30 17 views
6

मैं एसओएपी क्लाइंट कक्षाएं उत्पन्न करने के लिए सीएक्सएफ का उपयोग कर रहा हूं। CXF documentation में, वेक्या सीएक्सएफ क्लाइंट प्रॉक्सी थ्रेड सुरक्षित है?

क्या JAX-WS क्लाइंट प्रॉक्सी थ्रेड सुरक्षित हैं?

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

सीएक्सएफ उत्तर: सीएक्सएफ प्रॉक्सी कई उपयोग मामलों के लिए थ्रेड सुरक्षित हैं। अपवाद हैं:

(मैं इन उपयोग के मामलों के अपने विवरण को छोड़ते हुए हूँ) सबसे "सरल" उपयोग के मामलों के लिए, आप एक से अधिक थ्रेड पर CXF प्रोक्सी का उपयोग कर सकते हैं। उपर्युक्त दूसरों के लिए कामकाज की रूपरेखा तैयार करता है।

क्या किसी के पास कोई विपरीत अनुभव है? बहु-थ्रेडिंग मुद्दों को जन्म दिया जो उनके faq में वर्णित नहीं हैं? या उनका वर्णन सटीक है और वे मूल रूप से उपयोग करने के लिए सुरक्षित हैं?

+0

इसका क्या अर्थ है? क्या इसका मतलब यह है कि सीएक्सएफ 'wsdl2java' ** द्वारा उत्पन्न क्लाइंट प्रॉक्सी ** ** (ज्यादातर) थ्रेड-सुरक्षित हैं, या क्या आपको अपने क्लाइंट प्रोग्राम में किसी भी वास्तविक सीएक्सएफ एपीआई का उपयोग करने की आवश्यकता है? –

+0

@ मार्टन बोइकहोल्ड मेरा मतलब जेनरेट क्लाइंट प्रॉक्सी है। – Eyal

उत्तर

6

हम हाल ही में हमारी परियोजना में इसी तरह की चर्चा में भाग गए। जैसा कि आप पूछे जाने वाले एफएक्यू में निर्दिष्ट हैं, फ्लाई पर HTTP कंड्यूट को संशोधित करने वाली सुविधाओं को छोड़कर (उदा: सत्र प्रबंधन और विफलता सुविधाओं), सीएक्सएफ क्लाइंट प्रॉक्सी थ्रेड सुरक्षित है। इसलिए यदि आप इन सुविधाओं का उपयोग नहीं करते हैं तो क्लाइंट प्रॉक्सी को थ्रेड के बीच साझा करना ठीक है।

1

शायद आप रनटाइम का जिक्र कर रहे हैं, लेकिन मुझे नहीं लगता कि कॉन्फ़िगरेशन समय थ्रेडसेफ होना है। मेरा मानना ​​है कि मैंने JettyHTTPServerEngineFactory में रेस की स्थिति देखी है।

एक परीक्षण दोहन में हम कई असंबद्ध एसओएपी सर्वर लाते हैं और जब वे बस साझा करते हैं तो दौड़ की स्थिति के लिए एक संभावना होती है यदि एकाधिक धागे एक ही समय में JettyHTTPServerEngine उदाहरण जोड़ने का प्रयास करते हैं। विशिष्ट रेस स्थिति setTLSServerParametersForPort() में है, जिसे आप पोर्ट के लिए HTTPS का उपयोग करना चाहते हैं। वह विधि किसी लॉकिंग के साथ तत्वों को हैश मैप में जोड़ती है।

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

+0

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

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