2011-12-12 7 views
9

मैं जावा में कुछ अवधारणाओं के आसपास मेरे सिर प्राप्त करने के लिए कोशिश कर रहा हूँ:जर्सी के संबंध में JAX-आरएस और JSRs

  1. JSR (ओं): विनिर्देशों का वर्णन है, लेकिन कोई वास्तविक कार्यान्वयन ले। जैसे http://jsr311.java.net/ "रीस्टफुल वेब सेवाओं के लिए जावा ™ एपीआई" के लिए "घर" है। यह जेएसआर -311 के सभी कार्यान्वयन के लिए एक आम संदर्भ के रूप में कार्य करता है।
  2. कोई भी जेएसआर -311 के इंटरफेस (?) को http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api से डाउनलोड कर सकता है, हालांकि, जब तक कि आप स्वयं जेएसआर -311 को लागू नहीं कर रहे हैं, उनके पास कोई विशेष मूल्य नहीं है?
  3. जेएसआर आमतौर पर एक संदर्भ कार्यान्वयन होगा। इसे खोजने के लिए आपको "जेएसआर XXX संदर्भ कार्यान्वयन" करना होगा या विनिर्देशों के होम पेज (उदा। http://jsr311.java.net/)
  4. जेएसआर -311 के लिए यह संदर्भ कार्यान्वयन Jersey है। मेवेन का उपयोग करके आप http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 से जर्सी सर्वर प्राप्त कर सकते हैं। चूंकि जर्सी http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api में पाए गए इंटरफेस के अनुसार कार्यान्वयन प्रदान करता है, तो आपको केवल अपनी परियोजना में निर्भरता के रूप में जर्सी जोड़ने की आवश्यकता है, न कि jsr311-api स्वयं। (यह सभी जेएसआर प्रौद्योगिकियों पर लागू होता है?)
  5. http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api और http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 दोनों को अपनी परियोजना में निर्भरता के रूप में संभवतः क्लासपाथ समस्याओं का कारण बन जाएगा?

क्या मैं पूरी तरह से बंद या कुछ समय पर हूं?

उत्तर

8
  1. हां, यह कुछ भी नया नहीं है। जेडीबीसी के बारे में सोचें, जावा इंटरफेस (Connection, Statement, ResultSet इत्यादि) प्रदान करता है लेकिन यह डेटाबेस विक्रेताओं को कार्यान्वयन प्रदान करने के लिए ऊपर है।

  2. आप एक JSR-311 कार्यान्वयन जर्सी या अपाचे CXF की तरह इस तरह के रूप @Path, @GET, @Produces का उपयोग कर रहे हैं तो आप javax.ws.rs एनोटेशन के साथ अपनी कक्षाओं व्याख्या करेंगे, आदि यही कारण है कि आप स्पष्ट रूप से करने की जरूरत है जेएसआर -311 एक मेवेन निर्भरता के रूप में।

  3. हां, आमतौर पर। JSR list on wiki पर एक नज़र डालें।

  4. आपको जेएसआर और कार्यान्वयन दोनों की आवश्यकता है। टिप्पणियां जेएसआर में हैं, कार्यान्वयन com.sun.jersey.spi.container.servlet.ServletContainer जैसे सहायक वर्ग प्रदान करता है।

  5. नहीं, दोनों निर्भरताओं के रूप में होना आवश्यक है (बिंदु 4 देखें); आपको क्लासपाथ संघर्ष नहीं मिलेगा।

+0

तो शायद असली सवाल यह है कि जर्सी अपने स्वयं के जार के अंदर कक्षाओं को डुप्लिकेट करने के बजाय जेएसआर -311 को निर्भरता के रूप में क्यों घोषित नहीं करता है? –

3
  1. -
  2. एक विभिन्न प्रकार के स्रोतों से फ़ाइलों को डाउनलोड कर सकते हैं। प्राप्त करने के लिए JSR-311 विनिर्देश के अधिकांश आधिकारिक संस्करण को JCP download page पर जाएं। यह काफी संभव है कि आप जेसीपी पृष्ठों से एक जेएआर फ़ाइल (सभी इंटरफेस और सामान के साथ) नहीं प्राप्त कर सकते हैं, लेकिन फिर भी, यह आधिकारिक स्रोत है। (सार्वजनिक ड्राफ्ट के हमेशा अच्छे पीडीएफ भी हैं!)
  3. -
  4. आप सही हो क्योंकि जर्सी एपीआई JSR-311 द्वारा परिभाषित किया गया है, हालांकि मैं एक jsr311-api JAR फ़ाइल के लिए निर्भरता संकलन और जर्सी क्रम निर्भरता के रूप में जोड़ने जोड़ना होगा। यह एपीआई और कार्यान्वयन के बीच एक अच्छा अलगाव बनाता है और आप कभी भी अपने JSR-311 कार्यान्वयन को किसी भी समय [sic] स्वैप कर सकते हैं। यदि आप जर्सी का उपयोग करना चाहते हैं तो में केवल जर्सी शामिल है। आपके पीओएम में एक कम निर्भरता।
  5. यदि जर्सी जेएसआर 311-एपीआई जेएआर के समान एपीआई पैकेज करता है, तो यह नहीं होगा। अगर यह कुछ अलग पैकेज करता है, तो यह भयानक होगा! मेवेन शायद संकलित समय पर छाल जाएगा यदि किसी के पास भ्रष्ट जेएसआर -311 एपीआई अपने क्लासपाथ पर है (मैंने पहले से ही java.lang.ClassFormatError को देखा है: विधि में अनुपस्थित कोड विशेषता ... त्रुटियां, इसलिए अनजान नहीं होगा, यह निश्चित रूप से है)।

इनके अलावा, आप सही हैं।

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