जावा दूरस्थ पद्धति उत्क्रियण (जावा रिमोट मेथड एक्टिवेशन)

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

मूल कार्यान्वयन जावा वर्चुअल मशीन (जेवीएम) वर्ग-प्रतिनिधित्व तंत्र पर निर्भर करता है और इस प्रकार यह केवल एक JVM से दूसरे में कॉल करने का समर्थन करता है। जावा-केवल कार्यान्वयन के अंतर्निहित प्रोटोकॉल को जावा दूरवर्ती प्रोटोकॉल विधि (JRMP) के रूप में जाना जाता है। गैर-JVM संदर्भ में चलने वाले कोड का समर्थन करने के लिए प्रोग्रामर ने इसके पश्चात कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर संस्करण विकसित किया।

RMI शब्द का उपयोग केवल प्रोग्रामिंग इंटरफ़ेस को निरूपित कर सकता है या API और JRMP, IIOP या अन्य कार्यान्वयन दोनों को इंगित कर सकता है जबकि RMI-IIOP शब्द (पढ़ें: IIOP पर RMI) विशेष रूप से RMI इंटरफ़ेस को दर्शाता है जो अधिकांश सहायक CORBA कार्यान्वयन कार्यक्षमता को दर्शाता है।

जावा RMI का मूल विचार वितरित गार्बेज-संग्रह (डीजीसी) प्रोटोकॉल और मूल सन कार्यान्वयन के अंतर्निहित अधिकांश आर्किटेक्चर, मोडुला -3 की नेटवर्क ऑब्जेक्ट सुविधा से आते हैं।

सामान्यीकृत कोड
मूल RMI API के प्रोग्रामर ने HTTP ट्रांसपोर्ट जैसे विभिन्न कार्यान्वयनों का समर्थन करने के लिए कुछ सीमा तक कोड को सामान्यीकृत किया। इसके अतिरिक्त RMI इंटरफ़ेस के साथ संगत होने के लिए CORBA में तर्कों को मूल्य से कॉल करें पास करने की क्षमता जोड़ी गई थी। फिर भी, RMI-IIOP और JRMP कार्यान्वयनों में पूरी तरह से समान इंटरफेस नहीं हैं।

RMI कार्यक्षमता पैकेज में आती है, जबकि सूर्य का अधिकांश  पैकेट कार्यान्वयन में स्थित है। ध्यान दें कि जावा 5.0 से पहले जावा संस्करणों के साथ डेवलपर्स को RMI स्टब्स को एक अलग संकलन चरण में संकलित करना था. Java के संस्करण 5.0 और उसके बाद के संस्करण को अब इस चरण की आवश्यकता नहीं है।

जीनी संस्करण
जीनी, जावा में RMI का अधिक उन्नत संस्करण प्रदान करता है। यह समान रूप से कार्य करता है परन्तु वितरित वस्तु अनुप्रयोगों के लिए अधिक उन्नत सुरक्षा, ऑब्जेक्ट खोज क्षमताएं और अन्य तंत्र प्रदान करता है।

उदाहरण
निम्न वर्ग RMI का उपयोग कर साधारण क्लाइंट-सर्वर प्रोग्राम को लागू करते हैं जो एक संदेश प्रदर्शित करता है। इंटरफ़ेस - उस इंटरफ़ेस को परिभाषित करता है जो क्लाइंट द्वारा उपयोग किया जाता है और सर्वर द्वारा कार्यान्वित किया जाता है।

वर्ग - RMI अनुरोधों को प्राप्त करता है और उस इंटरफ़ेस को लागू करता है जिसका उपयोग क्लाइंट द्वारा दूरस्थ उपायों को लागू करने के लिए किया जाता है।

वर्ग - यह क्लाइंट है जो सर्वर पर रहने वाली दूरस्थ ऑब्जेक्ट के लिए संदर्भ (एक प्रॉक्सी) प्राप्त करता है और संदेश प्राप्त करने के लिए इसकी विधि को आमंत्रित करता है। यदि सर्वर ऑब्जेक्ट java.rmi.Remote के अतिरिक्त java.io.Serializable लागू करता है तो इसे क्रमबद्ध किया जाएगा और क्लाइंट को मान के रूप में पास किया जाएगा।

इस उदाहरण के उपयोग से पहले हमें उस इंटरफ़ेस के लिए 'स्टब' फ़ाइल बनानी होगी जिसका हमने उपयोग किया था। इस कार्य के लिए हमारे पास RMI कम्पाइलर - 'rmic' है ध्यान दें कि गतिशील रूप से उत्पन्न स्टब फ़ाइलों के लिए J2SE समर्थन के संस्करण 5.0 को सम्बद्ध किया गया है और rmic केवल पिछले रनटाइम के साथ पश्चगामी संगतता के लिए प्रदान किया गया है या उन प्रोग्रामों के लिए जो दूरस्थ ऑब्जेक्ट को निर्यात करते समय स्पष्ट पोर्ट नंबर (या शून्य) प्रदान नहीं करते हैं जो संभव होने के लिए उत्पन्न स्टब्स के लिए आवश्यक है जैसा कि यूनीकास्टरिमोटऑब्जेक्ट हेतु जावाडॉक में वर्णित है। उपरोक्त कन्स्ट्रक्टर में टिप्पणी देखें।
 * ध्यान दें: हम रिमोट इंटरफ़ेस के कार्यान्वयन के साथ '*.class' फ़ाइल से स्टब फ़ाइल बनाते हैं, '*.java' फ़ाइल से नहीं।

बाहरी संबंध

 * जावा RMI ट्यूटोरियल - RMI सीखने के लिए अच्छा आरम्भिक बिंदु। RMI में हैलो वर्ल्ड भी देखें।
 * जावा RMI ऑनलाइन प्रशिक्षण - जावा RMI और इसके संदर्भ के रूप में प्रशिक्षण के लिए अच्छा है
 * JDK डॉक्स में RMI पेज
 * (RMI पैकेज के लिए सन का जावा API संदर्भ)
 * प्रोग्रामिंग वेबलॉजिक RMI - ओरेकल वेबलॉजिक में RMI का परिचय।
 * सामान्य दूरस्थ आवाहन विधि
 * प्रोग्रामिंग वेबलॉजिक RMI - ओरेकल वेबलॉजिक में RMI का परिचय।
 * सामान्य दूरस्थ आवाहन विधि