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 {}

क्या यह एक सर्वलेट है? क्या यह हमेशा जीवित है? मैं इस वर्ग को कैसे समझूं? क्या यह सीडीआई बीन है? क्या सर्वर हर अनुरोध पर इस वर्ग को बनाता है?





jax-rs