2011-09-17 32 views
22

java:comp/env और java:global (3.1 spec के संबंध में) के बीच संबंध क्या है?
java:comp/env जैसा लगता है ईजेबी संदर्भों के लिए विशिष्ट है। इस मामले में "विशिष्ट" का क्या अर्थ है?जावा: comp/env और java: global के बीच संबंध क्या है?

उत्तर

40

java:global एक नामस्थान है जो पूरे एप्लिकेशन सर्वर के लिए वैश्विक है, जिसमें अन्य ईएआर मॉड्यूल (जिन्हें विभिन्न अनुप्रयोग माना जाता है) शामिल हैं।

java:comp/env छोटे नामस्थान है। वेब मॉड्यूल के लिए, यह सभी वेब घटकों (सर्वलेट इत्यादि) से मेल खाता है जो सभी को एक साथ जेएनडीआई के लिए एक 'घटक' माना जाता है, लेकिन ईजेबी बीन्स के लिए यह एक बीन के लिए नामस्थान है, क्योंकि प्रत्येक बीन को एक माना जाता है अलग घटक

java:app और java:module भी है, जिनकी स्कॉप्स वैश्विक और कंप के बीच आती है।

java:comp/env और अन्य के बीच एक बड़ा अंतर यह है कि पूर्व रनटाइम पर केवल सख्ती से पढ़ा जाता है और इसमें कुछ बीन्स शामिल होते हैं जिन्हें कुछ घटक में इंजेक्शन दिया जाता है। तो उदा। पर विचार करें:

@Stateless 
public class ExampleBean { 

    @EJB 
    OtherBean testBean; 

} 

इस मामले में, विशिष्ट प्रॉक्सी कि क्षेत्र testBean में इंजेक्ट किया गया था भी java:comp/env से प्राप्त किया जा सकता है, लेकिन केवल जब java:comp/env (JNDI अत्यधिक प्रासंगिक है) ExampleBean के भीतर से संदर्भित है।

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

उदाहरण के लिए, यदि OtherBeanExampleBean रूप में एक ही मॉड्यूल में परिभाषित किया गया है, तो आप java:module इस्तेमाल कर सकते हैं, अगर यह एक ही आवेदन (लेकिन संभवतः विभिन्न मॉड्यूल) आप java:app का उपयोग कर सकते है।

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