2009-11-13 11 views
6

के साथ एक डायनामिक क्लाइंट का उपयोग करने के लाभ जेएक्स-डब्ल्यूएस सेवाओं के साथ गतिशील क्लाइंट का उपयोग करने के क्या फायदे हैं, जो कि जेनरेट क्लाइंट क्लासेस का उपयोग करने के विरोध में हैं? नुकसान क्या हैं?जेएक्स-डब्ल्यूएस

** मेरे विशेष मामले के लिए मैं अपाचे सीएक्सएफ का उपयोग कर रहा हूं, मुझे यकीन नहीं है कि अन्य पुस्तकालय "गतिशील" ग्राहकों को अनुमति देते हैं।

-मैंने सोचा कि मुझे इसे जोड़ने की आवश्यकता नहीं है, लेकिन ... मैं गैर-स्पष्ट (मुझे पता है ... व्यक्तिपरक) फायदे की तलाश में हूं। मुझे किसी और को यह बताने की ज़रूरत नहीं है कि जेनरेट किए गए वर्गों का उपयोग न करने का लाभ यह है कि मुझे कक्षाएं उत्पन्न करने की आवश्यकता नहीं है।

उत्तर

2

लाभ उत्पन्न करने और कोड सहित से बचने का लाभ है। कुछ वातावरण में, यह एक समस्या है। यदि जेनरेट कोड सहित आपके पर्यावरण में कोई बाधा नहीं है, तो गतिशील क्लाइंट एक बुरा विचार है, धीमा और अधिक बोझिल होना।

गतिशील ग्राहक धीमी है क्योंकि कोड (जिनमें से मैं कुछ लिखा था) करना होगा:

  1. wsdl और स्कीमा
  2. कोड उत्पन्न
  3. पार्स कोड संकलन

यह अधिक बोझिल है क्योंकि आपके डेटा मॉडल में किसी भी जटिल वस्तु के लिए आपके पास बीन कक्षाएं नहीं हैं। आपको प्रतिबिंब का उपयोग करने की आवश्यकता है।

ध्यान रखें कि गतिशील क्लाइंट आमंत्रण इंटरफ़ेस से अलग है।

+0

@bmargulies - गतिशील ग्राहकों के लिए धीमा होने के लिए कोई संदर्भ? "बोझिल" का अर्थ क्या है, इसका विस्तार करने के लिए सावधानी बरतें? मैं यह नहीं कह रहा कि यह सही नहीं है, सिर्फ एक संदर्भ की तलाश है। – jconlin

+1

डायनामिक क्लाइंट का एकमात्र असली "धीमा" हिस्सा स्टार्टअप लागत है। हमें मूल रूप से wsdl को पार्स करने की आवश्यकता है, कुछ कोड उत्पन्न करने के लिए xjc को कॉल करें, संकलित करें, संकलित कक्षाओं को स्मृति में लोड करें, आदि। और उसके बाद, सब कुछ पूरा हो गया है, सामान्य जेनरेट किए गए क्लाइंट के समान सेटअप करें। एक बार सभी उत्पन्न और चलने के बाद, गतिशील ग्राहक धीमे नहीं होते हैं। –

1

गतिशील क्लाइंट का उपयोग करने का लाभ यह है कि आपको रन टाइम से पहले स्टब्स उत्पन्न करने की आवश्यकता नहीं है। यह आपको सामान्य रूप से उन सेवाओं को आमंत्रित करने की अनुमति देता है जिन्हें आप रन टाइम पर नहीं जानते हैं।

+0

@ केविन - यही वजह है कि मुझे "गतिशील" क्लाइंट में जाने के लिए कहा गया था .. संकलन समय निर्भरता बनाने के लिए ... लेकिन यह क्लाइंट और सर्वर साइड कोड के बीच युग्मन भी प्रस्तुत करता है ... मुझे लगता है कि मैं मैं अभी भी सकारात्मक और नकारात्मक वजन का हूँ। – jconlin

7

खैर, CXF प्रलेखन Dynamic Clients के फायदे के बारे में बहुत स्पष्ट है:

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

दूसरे शब्दों में, आप वर्गों की परिभाषा के रूप में नीचे प्रलेखन नमूने में बताया गया की जरूरत नहीं है:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); 
Client client = dcf.createClient("echo.wsdl"); 

Object[] res = client.invoke("echo", "test echo"); 
System.out.println("Echo response: " + res[0]); 

नुकसान के संबंध में उसने बहुत स्पष्ट हैं (और यह कीमत अदा करने के लिए है): आप तारों में हेरफेर कर रहे हैं, आप मजबूत टाइपिंग खो दिया है।

+1

@ पास्कल - मैं जवाब की सराहना करता हूं ... हो सकता है कि मुझे इस सवाल का बेहतर वाक्यांश होना चाहिए क्योंकि आपको कौन सी स्थितियों से उत्पन्न गतिशील क्लाइंट का उपयोग करना होगा ... – jconlin

1

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

यदि इनमें से कोई भी मामला नहीं है तो आपको यह सोचने की आवश्यकता होगी कि आपका ग्राहक इन परिस्थितियों को कैसे संभालेगा। डिस्पैच एपीआई आपको फ्लाई पर वेब-सेवा कॉल उत्पन्न करने के लिए लचीलापन देता है, बिना सेवा के अपरिपक्व ज्ञान के। यह स्पष्ट रूप से उस कॉल को बनाने के लिए आवश्यक कॉन्फ़िगरेशन विकल्पों का समर्थन करने के लिए आपके कोड की लागत पर आता है।

इस सब के साथ, सर्वर साइड इंटरफ़ेस के डेवलपर/रखरखाव के साथ एक निश्चित राशि जिम्मेदारी है जो क्लाइंट कोड को तोड़ने वाले परिवर्तनों को लागू नहीं करेगा।

1

मेरे साथ सह-कार्यकर्ता के साथ एक समान बातचीत हुई। वह स्प्रिंग क्लाइंट का उपयोग कर रहा था, जिसके लिए क्लाइंट को संकलित करने के लिए इंटरफ़ेस के उपयोग की आवश्यकता होती है, लेकिन फिर स्प्रिंग इंटरफ़ेस को काम करने के लिए वास्तविक कोड इंजेक्ट करता है। यह मूल रूप से हमारे बीच के सबसे पुराने आरे के लिए उबला हुआ है, गतिशील प्रॉक्सी जैसी चीजें आमतौर पर कुछ प्रकार के प्रदर्शन कर पेश करती हैं, वह ठीक है, मैंने जीवन लेखन डिवाइस ड्राइवरों को शुरू किया, और इसलिए गति के पक्ष में पूरी तरह से पूर्वाग्रह किया गया। जहां तक ​​मेरा संबंध है, उतना तेज़/छोटा जीत, और चूंकि मैं इस तरह के सीमित वातावरण से बाध्य नहीं हूं ... मेरा डीओडी फोन हेक करता है, मैंने अपने सभी 10 वर्षों में मेनफ्रेम समेत सभी प्रणालियों को पेशेवर रूप से दंडित किया है, मैं गति के पक्ष में नीचे आऊंगा। इसके लिए आम आश्चर्य यह है कि कई अन्य बाधाएं हैं जो "वास्तविक" समस्या हैं, और यह मुद्दा उनके खिलाफ महत्वहीन है .... और यह सच हो सकता है ... लेकिन हर छोटी मदद करता है। यदि आप Steve Souders और उनके सहयोगियों से सामान पढ़ते हैं ... उपयोगकर्ता 400 मिलीसेकंड के रूप में कम से कम परिवर्तन देख सकते हैं ... वे जरूरी नहीं कि पंजीकृत हैं कि चीजें धीमी हैं, लेकिन उनकी प्रतिक्रिया अलग है। इसलिए जब से मैं नेटवर्क की गति, डेटाबेस इंडेक्स ओवरहेड इत्यादि के बारे में कुछ भी नहीं कर सकता, तो मैं उन चीज़ों के साथ कम से कम सर्वश्रेष्ठ काम कर सकता हूं जिन्हें मैं प्रभावित कर सकता हूं। व्हील! उसके लिए क्षमा चाहता हूँ!! अब साबुन बॉक्स से बाहर निकलना! ;)

0

DII(Dynamic Invocation Interface) Client: डीआईआई के साथ, क्लाइंट रिमोट प्रक्रिया के हस्ताक्षर या सेवा का नाम रनटाइम तक अज्ञात होने पर भी एक दूरस्थ प्रक्रिया को कॉल कर सकता है।

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

  • लाभ

    • यहाँ हम उपयोग करने के लिए वेब सेवा के द्वारा समर्थित संचालन का वर्णन सरल जावा इंटरफ़ेस बनाना होगा। इसलिए सेवा तक पहुंचने के लिए ऑटो जेनरेटेड स्टब्स की आवश्यकता नहीं है।
    • एंडपॉइंट का उपयोग करके यह रन-टाइम पर फ्लाई i.e. पर डब्लूएसडीएल और स्टब्स उत्पन्न करता है।
  • नुकसान

    • यहां तक ​​कि इस शैली में हम बनाने ग्राहक से पहले वेब सेवा को पता करने के लिए है।
    • जेनरेटेड स्टब (जीएस) की तुलना में यह डब्लूएसडीएल और स्टब्स रन-टाइम पर उत्पन्न होने के कारण धीरे-धीरे काम करता है।
संबंधित मुद्दे