java - एक आराम सेवा के उस अनुप्रयोग वर्ग के जीवन चक्र क्या है?
rest java-ee (1)
Application
क्या है?
Application
एक जेएक्स-आरएस आवेदन के घटकों को कॉन्फ़िगर करने और पंजीकरण करने के लिए जेएक्स-आरएस द्वारा प्रदान किए जाने पर एक परिनियोजन अज्ञेय सार तत्व है और इसका उपयोग एप्लिकेशन को अतिरिक्त मेटाडेटा देने के लिए भी किया जाता है।
Application
उन प्रकारों में से एक है, जिन्हें @Context
एनोटेशन का उपयोग करके इंजेक्ट किया जा सकता है। अधिक विवरण के लिए, इस उत्तर का संदर्भ लें।
Application
उपवर्ग
Application
उपवर्ग घटकों और गुणों को विन्यस्त और पंजीयन के लिए getClasses()
, getSingletons()
और getSingletons()
रूप में तरीकों को लागू कर सकते हैं
Application
उपवर्गों को @ApplicationPath
साथ एनोटेट किया जा सकता है, @ApplicationPath
-आरएस संसाधन वर्गों के लिए बेस यूआरआई को परिभाषित करता है (वर्ग के साथ @Path
वर्ग)। जब वेब अनुप्रयोग शुरू होता है, तब एक बार Application
उप-वर्गों को तत्काल तभी तब्दील किया जाता है और उनका प्रबंधन JAX-RS रनटाइम द्वारा होता है।
सरल क्रियान्वयन संभव निम्नलिखित है:
@ApplicationPath("api")
public SampleApplication extends Application {
}
उपरोक्त उदाहरण में कोई संसाधन वर्ग या प्रदाता पंजीकृत नहीं हैं, इसलिए जेएक्स-आरएस रनटाइम जेएक्स-आरएस घटकों के लिए क्लासपाथ स्कैन करेगा और उन्हें स्वचालित रूप से पंजीकरण करेगा।
हालांकि, Jakub Podlesak से इस पोस्ट के अनुसार, इस दृष्टिकोण उत्पादन वातावरण में हतोत्साहित किया गया है:
उपरोक्त उदाहरण महान काम करता है शुरू होने पर, एप्लिकेशन सिर्फ वास्तविक वर्ग-पथ को स्कैन करता है, और वास्तविक रनटाइम कॉन्फ़िगरेशन में वहां के प्रत्येक एक जेएक्स-आरएस घटक वर्ग को जोड़ता है। अच्छा नहीं है? सच कहूँ तो, इस तरह की विन्यास सिर्फ ठीक काम कर सकता है। जब तक कोई सिस्टम कॉन्फ़िगरेशन (सिस्टम क्लास-पथ) या आप जिस तरह से आवेदन किया जा रहा है (या तो एक नया तृतीय पक्ष घटक जोड़ा जा सकता है / आवेदन क्लास-पथ से हटा दिया गया हो) या तो। ये परिवर्तन आपके नियंत्रण से बाहर हो सकते हैं और उनमें से एक होने पर, आप अनुप्रयोग कॉन्फ़िगरेशन को तोड़ सकते हैं। इस कारण से, उत्पादन पर्यावरण में इस तरह के विन्यास का उपयोग करना बुद्धिमानी नहीं है।
जर्सी, JAX-RS संदर्भ कार्यान्वयन, ResourceConfig
वर्ग प्रदान करता है। Application
मुकाबले, ResourceConfig
कॉन्फ़िफ जॅक्स-आरएस घटकों के पंजीकरण को आसान बनाने के लिए उन्नत क्षमताओं को प्रदान करता है, जैसे कि किसी प्रदान किए गए कक्षापथ में या रूट के संसाधनों के लिए स्कैनिंग या पैकेज नामों के सेट में, आदि। अधिक जानकारी के लिए, जर्सी दस्तावेज़ीकरण देखें ।
एकाधिक Application
उप-क्लासेस के साथ कार्य करना
यह भी उल्लेख के लायक है कि आप प्रति वेब अनुप्रयोग के एकल Application
उप-वर्ग तक सीमित नहीं हैं। एक ही युद्ध में एकाधिक Application
उप-वर्ग हो सकते हैं अधिक जानकारी के लिए, एडम बिएन से इस पोस्ट को देखें :
एक युद्ध में विभिन्न यूआरआई के साथ कई जेएक्स-आरएस अनुप्रयोगों को लागू करने के लिए आपको एक ऐसे
javax.ws.rs.core.Application
उपवर्ग बनाना होगा (या प्रयोजन के लिएweb.xml
उपयोग करें)। जाहिर है जावा कॉन्फिगरेशन पर EE सर्वव्यापी कन्वेंशन (या अपवाद द्वारा कॉन्फ़िगरेशन) और अधिक काम नहीं कर सकता: आपको विधि प्राप्तgetSingletons
याgetSingletons
ओवरराइड करते हुए प्रत्येक उपवर्ग में संसाधनों को स्पष्ट रूप से कॉन्फ़िगर करनाgetSingletons
:@Path("first") public class FirstResource { @GET public String first() { return "first"; } }
@ApplicationPath("one") public class JAXRSConfigurationOne extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new HashSet<>(); resources.add(FirstResource.class); return resources; } }
@Path("second") public class SecondResource { @GET public String first() { return "second"; } }
@ApplicationPath("two") public class JAXRSConfigurationTwo extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new HashSet<>(); resources.add(SecondResource.class); return resources; } }
दोनों अलग-अलग यूआरआई के माध्यम से जेएक्स-आरएस आवेदन सुलभ हो जाते हैं:
http://localhost:8080/multiple-roots/one/first
औरhttp://localhost:8080/multiple-roots/two/second
क्या होगा यदि कोई उप-उपखंड मौजूद नहीं है?
यदि कोई Application
उपवर्ग मौजूद नहीं है, तो जेएक्स-आरएस लागू करने के लिए एक सर्वलेट जोड़ने और उसका नाम javax.ws.rs.core.Application
सेट करना javax.ws.rs.core.Application
और स्वचालित रूप से सभी संसाधन कक्षाओं और प्रदाताओं को खोजने के लिए जिन्हें एप्लिकेशन के साथ पैक किया जाना चाहिए।
अधिक विवरण के लिए, जेएक्स-आरएस 2.0 विनिर्देश के अध्याय 2 पर नज़र डालें।
हाय दोस्तों, मैं आराम करने के लिए नया हूँ और जेक्स-आरएस तो मेरा सवाल है कि हर बाकी सेवा उस अनुप्रयोग वर्ग को विस्तारित करने और आवेदनपथ को परिभाषित करने से शुरू होती है। अब मेरा सवाल है कि उस अनुप्रयोग वर्ग की जीवनशैली क्या है? यहाँ एक उदाहरण है:
import javax.ws.rs.core.Application;
@javax.ws.rs.ApplicationPath("resources")
public class ApplicationConfig extends Application {}
क्या यह एक सर्वलेट है? क्या यह हमेशा जीवित है? मैं इस वर्ग को कैसे समझूं? क्या यह सीडीआई बीन है? क्या सर्वर हर अनुरोध पर इस वर्ग को बनाता है?