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

From Vigyanwiki
(Created page with "thumb|right|400px|[[ वर्ग ठूंठ और डिस्ट्रिब्यूटेड ऑब्जेक्ट कम्यु...")
 
No edit summary
Line 1: Line 1:
[[File:RMI-Stubs-Skeletons.svg|thumb|right|400px|[[ वर्ग ठूंठ ]] और डिस्ट्रिब्यूटेड ऑब्जेक्ट कम्युनिकेशन#स्केलेटन ऑब्जेक्ट्स का उपयोग करते हुए जावा-आरएमआई का एक विशिष्ट कार्यान्वयन मॉडल। Java 2 SDK, Standard Edition, v1.2 ने कंकाल की आवश्यकता को हटा दिया।]][[ कम्प्यूटिंग ]] में, जावा [[ दूरस्थ विधि मंगलाचरण ]] (जावा आरएमआई) एक [[ जावा (प्रोग्रामिंग भाषा) ]] [[ अप्लिकेशन प्रोग्रामिंग अंतरफलक ]] है जो रिमोट मेथड इनवोकेशन करता है, जो [[ सुदूर प्रणाली संदेश ]]्स (RPC) के ऑब्जेक्ट-ओरिएंटेड समतुल्य है, सीरियलाइजेशन #Java के डायरेक्ट ट्रांसफर के लिए सपोर्ट के साथ जावा कक्षाएं और [[वितरित कचरा संग्रह]] | वितरित कचरा-संग्रह।
[[File:RMI-Stubs-Skeletons.svg|thumb|right|400px|[[ वर्ग ठूंठ | स्टब]] और स्केलेटन ऑब्जेक्ट्स का उपयोग करते हुए जावा-RMI का विशिष्ट कार्यान्वयन मॉडल। जावा 2 SDK, मानक संस्करण, v1.2 ने स्केलेटन की आवश्यकता को समाप्त कर दिया।]][[ कम्प्यूटिंग |कम्प्यूटिंग]] में [[ दूरस्थ विधि मंगलाचरण |जावा दूरवर्ती आवाहन विधि]] (जावा RMI), [[ जावा (प्रोग्रामिंग भाषा) |जावा (प्रोग्रामिंग भाषा)]] [[ अप्लिकेशन प्रोग्रामिंग अंतरफलक | अप्लिकेशन प्रोग्रामिंग इंटरफ़ेस]] है जो दूरवर्ती आवाहन करता है जो [[ सुदूर प्रणाली संदेश |सुदूर प्रणाली संदेश]] (आरपीसी) के वस्तु के उन्मुख समतुल्य है तथा क्रमबद्ध जावा कक्षाओं के सीधे हस्तांतरण के समर्थन के साथ और [[वितरित कचरा संग्रह|गार्बेज-संग्रह वितरण]] किया।


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


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


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


== सामान्यीकृत कोड ==
== सामान्यीकृत कोड ==
मूल आरएमआई एपीआई के प्रोग्रामर ने [[ हाइपरटेक्स्ट परहस्त शिष्टाचार ]] ट्रांसपोर्ट जैसे विभिन्न कार्यान्वयनों का समर्थन करने के लिए कुछ हद तक कोड को सामान्यीकृत किया। इसके अतिरिक्त, RMI इंटरफ़ेस के साथ संगत होने के लिए CORBA में तर्कों को [[मूल्य से कॉल करें]] पास करने की क्षमता जोड़ी गई थी। फिर भी, RMI-IIOP और JRMP कार्यान्वयनों में पूरी तरह से समान इंटरफेस नहीं हैं।
मूल RMI API के प्रोग्रामर ने [[ हाइपरटेक्स्ट परहस्त शिष्टाचार |HTTP]] ट्रांसपोर्ट जैसे विभिन्न कार्यान्वयनों का समर्थन करने के लिए कुछ सीमा तक कोड को सामान्यीकृत किया। इसके अतिरिक्त RMI इंटरफ़ेस के साथ संगत होने के लिए CORBA में तर्कों को [[मूल्य से कॉल करें]] पास करने की क्षमता जोड़ी गई थी। फिर भी, RMI-IIOP और JRMP कार्यान्वयनों में पूरी तरह से समान इंटरफेस नहीं हैं।
 
RMI कार्यक्षमता पैकेज में आती है {{Javadoc:SE|package=java.rmi|java/rmi|module=java.rmi}}, जबकि सूर्य का अधिकांश कार्यान्वयन में स्थित है <code>sun.rmi</code> पैकेट। ध्यान दें कि जावा 5.0 से पहले जावा संस्करणों के साथ डेवलपर्स को आरएमआई स्टब्स को एक अलग संकलन चरण में संकलित करना था <code>'''rmic'''</code>. Java के संस्करण 5.0 और उसके बाद के संस्करण को अब इस चरण की आवश्यकता नहीं है।
 
== जिनि संस्करण ==
[[ खून ]] जावा में आरएमआई का अधिक उन्नत संस्करण प्रदान करता है। यह समान रूप से कार्य करता है लेकिन वितरित वस्तु अनुप्रयोगों के लिए अधिक उन्नत सुरक्षा, वस्तु खोज क्षमताएं और अन्य तंत्र प्रदान करता है।<ref name="From P2P to Web Services and Grids 2005">{{cite book |first=Ian J |last=Taylor |title=From P2P to Web Services and Grids : Peers in a Client/Server World |series=Computer Communications and Networks |publisher=Springer-Verlag |location=London |year=2005 |isbn=1852338695 |doi=10.1007/b138333 |url=https://archive.org/details/fromp2ptowebserv0000tayl |oclc=827073874 |url-access=registration }}{{page needed|date=September 2017}}</ref>


RMI कार्यक्षमता पैकेज में आती है {{Javadoc:SE|package=java.rmi|java/rmi|module=java.rmi}}, जबकि सूर्य का अधिकांश <code>sun.rmi</code> पैकेट कार्यान्वयन में स्थित है। ध्यान दें कि जावा 5.0 से पहले जावा संस्करणों के साथ डेवलपर्स को RMI स्टब्स को एक अलग संकलन चरण में संकलित करना था <code>'''rmic'''</code>. Java के संस्करण 5.0 और उसके बाद के संस्करण को अब इस चरण की आवश्यकता नहीं है।


== जीनी संस्करण ==
[[ खून |जीनी]], जावा में RMI का अधिक उन्नत संस्करण प्रदान करता है। यह समान रूप से कार्य करता है परन्तु वितरित वस्तु अनुप्रयोगों के लिए अधिक उन्नत सुरक्षा, ऑब्जेक्ट खोज क्षमताएं और अन्य तंत्र प्रदान करता है।<ref name="From P2P to Web Services and Grids 2005">{{cite book |first=Ian J |last=Taylor |title=From P2P to Web Services and Grids : Peers in a Client/Server World |series=Computer Communications and Networks |publisher=Springer-Verlag |location=London |year=2005 |isbn=1852338695 |doi=10.1007/b138333 |url=https://archive.org/details/fromp2ptowebserv0000tayl |oclc=827073874 |url-access=registration }}{{page needed|date=September 2017}}</ref>
== उदाहरण ==
== उदाहरण ==
निम्न वर्ग आरएमआई का उपयोग कर एक साधारण क्लाइंट-सर्वर प्रोग्राम को लागू करते हैं जो एक संदेश प्रदर्शित करता है।<code>RmiServerIntf</code> इंटरफ़ेस - उस इंटरफ़ेस को परिभाषित करता है जो क्लाइंट द्वारा उपयोग किया जाता है और सर्वर द्वारा कार्यान्वित किया जाता है।
निम्न वर्ग RMI का उपयोग कर साधारण क्लाइंट-सर्वर प्रोग्राम को लागू करते हैं जो एक संदेश प्रदर्शित करता है।<code>RmiServerIntf</code> इंटरफ़ेस - उस इंटरफ़ेस को परिभाषित करता है जो क्लाइंट द्वारा उपयोग किया जाता है और सर्वर द्वारा कार्यान्वित किया जाता है।


<syntaxhighlight lang=java>
<syntaxhighlight lang=java>
Line 28: Line 26:
</syntaxhighlight>
</syntaxhighlight>


<code>RmiServer</code> वर्ग - आरएमआई अनुरोधों को सुनता है और उस इंटरफ़ेस को लागू करता है जिसका उपयोग क्लाइंट द्वारा दूरस्थ तरीकों को लागू करने के लिए किया जाता है।
<code>RmiServer</code> वर्ग - RMI अनुरोधों को प्राप्त करता है और उस इंटरफ़ेस को लागू करता है जिसका उपयोग क्लाइंट द्वारा दूरस्थ उपायों को लागू करने के लिए किया जाता है।


<syntaxhighlight lang=java>
<syntaxhighlight lang=java>
Line 68: Line 66:
</syntaxhighlight>
</syntaxhighlight>


<code>RmiClient</code> वर्ग - यह क्लाइंट है जो सर्वर पर रहने वाली दूरस्थ वस्तु के लिए संदर्भ (एक प्रॉक्सी) प्राप्त करता है और संदेश प्राप्त करने के लिए इसकी विधि को आमंत्रित करता है। यदि सर्वर ऑब्जेक्ट java.rmi.Remote के बजाय java.io.Serializable लागू करता है, तो इसे क्रमबद्ध किया जाएगा और क्लाइंट को मान के रूप में पास किया जाएगा।<ref>{{cite web |last1=Wilson |first1=M. Jeff |date=2000-11-10 |df=mdy |url=https://www.infoworld.com/article/2076234/get-smart-with-proxies-and-rmi.html |title=प्रॉक्सी और आरएमआई के साथ स्मार्ट बनें|work=[[JavaWorld]] |access-date=2020-07-18}}</ref>
<code>RmiClient</code> वर्ग - यह क्लाइंट है जो सर्वर पर रहने वाली दूरस्थ ऑब्जेक्ट के लिए संदर्भ (एक प्रॉक्सी) प्राप्त करता है और संदेश प्राप्त करने के लिए इसकी विधि को आमंत्रित करता है। यदि सर्वर ऑब्जेक्ट java.rmi.Remote के अतिरिक्त java.io.Serializable लागू करता है तो इसे क्रमबद्ध किया जाएगा और क्लाइंट को मान के रूप में पास किया जाएगा।<ref>{{cite web |last1=Wilson |first1=M. Jeff |date=2000-11-10 |df=mdy |url=https://www.infoworld.com/article/2076234/get-smart-with-proxies-and-rmi.html |title=प्रॉक्सी और आरएमआई के साथ स्मार्ट बनें|work=[[JavaWorld]] |access-date=2020-07-18}}</ref>


<syntaxhighlight lang=java>
<syntaxhighlight lang=java>
Line 80: Line 78:
}
}
</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण को चलाने से पहले, हमें उस इंटरफ़ेस के लिए एक 'स्टब' फ़ाइल बनानी होगी जिसका हमने उपयोग किया था। इस कार्य के लिए हमारे पास RMI कम्पाइलर है - 'rmic'
इस उदाहरण के उपयोग से पहले हमें उस इंटरफ़ेस के लिए 'स्टब' फ़ाइल बनानी होगी जिसका हमने उपयोग किया था। इस कार्य के लिए हमारे पास RMI कम्पाइलर - 'rmic' है
*ध्यान दें: हम रिमोट इंटरफ़ेस के कार्यान्वयन के साथ '*.class' फ़ाइल से एक स्टब फ़ाइल बनाते हैं, '*.java' फ़ाइल से नहीं।
*ध्यान दें: हम रिमोट इंटरफ़ेस के कार्यान्वयन के साथ '*.class' फ़ाइल से स्टब फ़ाइल बनाते हैं, '*.java' फ़ाइल से नहीं।
<syntaxhighlight lang=dos>
<syntaxhighlight lang=dos>
rmic RmiServer
rmic RmiServer
</syntaxhighlight>
</syntaxhighlight>
ध्यान दें कि गतिशील रूप से उत्पन्न स्टब फ़ाइलों के लिए J2SE समर्थन के संस्करण 5.0 को जोड़ा गया है, और rmic केवल पिछले रनटाइम के साथ पश्चगामी संगतता के लिए प्रदान किया गया है,<ref>{{cite web|title=जावा आरएमआई रिलीज नोट्स|url=http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/relnotes.html|publisher=Oracle|access-date=9 May 2012}}</ref> या उन प्रोग्रामों के लिए जो दूरस्थ वस्तुओं को निर्यात करते समय एक स्पष्ट पोर्ट नंबर (या शून्य) प्रदान नहीं करते हैं, जो संभव होने के लिए उत्पन्न स्टब्स के लिए आवश्यक है, जैसा कि Javadoc for UnicastRemoteObject में वर्णित है। उपरोक्त कन्स्ट्रक्टर में टिप्पणी देखें।
ध्यान दें कि गतिशील रूप से उत्पन्न स्टब फ़ाइलों के लिए J2SE समर्थन के संस्करण 5.0 को सम्बद्ध किया गया है और rmic केवल पिछले रनटाइम के साथ पश्चगामी संगतता के लिए प्रदान किया गया है<ref>{{cite web|title=जावा आरएमआई रिलीज नोट्स|url=http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/relnotes.html|publisher=Oracle|access-date=9 May 2012}}</ref> या उन प्रोग्रामों के लिए जो दूरस्थ ऑब्जेक्ट को निर्यात करते समय स्पष्ट पोर्ट नंबर (या शून्य) प्रदान नहीं करते हैं जो संभव होने के लिए उत्पन्न स्टब्स के लिए आवश्यक है जैसा कि यूनीकास्टरिमोटऑब्जेक्ट हेतु जावाडॉक में वर्णित है। उपरोक्त कन्स्ट्रक्टर में टिप्पणी देखें।


==संदर्भ==
==संदर्भ==
Line 92: Line 90:


==बाहरी संबंध==
==बाहरी संबंध==
*{{cite web |title=Remote Method Invocation Home |url=http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html |website= Oracle Technology Network for Java Developers |publisher=[[Oracle Corporation]] |location=Redwood Shores, CA, USA |access-date=2014-07-14}}
*{{cite web |title=रिमोट मेथड इनवोकेशन होम |url=http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html |website= जावा डेवलपर्स के लिए ओरेकल टेक्नोलॉजी नेटवर्क |publisher=[[ओरेकल कॉर्पोरेशन]] |location=रेडवुड शोर्स, सीए, यूएसए |access-date=2014-07-14}}
* [http://download.oracle.com/javase/tutorial/rmi/index.html The Java RMI tutorial] - a good starting point to learn RMI. Also check the [http://java.sun.com/j2se/1.5.0/docs/guide/rmi/hello/hello-world.html Hello World in RMI]
* [http://download.oracle.com/javase/tutorial/rmi/index.html जावा RMI ट्यूटोरियल] - RMI सीखने के लिए अच्छा आरम्भिक बिंदु। [http://java.sun.com/j2se/1.5.0/docs/guide/rmi/hello/hello-world.html RMI में हैलो वर्ल्ड] भी देखें।
* [http://java.sun.com/developer/onlineTraining/rmi/RMI.html the Java RMI online training] - Very good for training JavaRMI and as reference
* [http://java.sun.com/developer/onlineTraining/rmi/RMI.html जावा RMI ऑनलाइन प्रशिक्षण] - जावा RMI और इसके संदर्भ के रूप में प्रशिक्षण के लिए अच्छा है
* [http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/index.html The RMI page in the JDK docs]
* [http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/index.html JDK डॉक्स में RMI पेज]
* {{Javadoc:SE|package=java.rmi|java/rmi}} (Sun's Java API Reference for the RMI package)
* {{Javadoc:SE|package=java.rmi|java/rmi}} (RMI पैकेज के लिए सन का जावा API संदर्भ)
* {{cite document | author1= Ann Wollrath | author2= Roger Riggs | author3 = Jim Waldo |author3-link=Jim Waldo
* {{cite document | author1= ऐन वोलरथ | author2= रोजर रिग्स | author3 = जिम वाल्डो |author3-link=जिम वाल्डो
   | title= A Distributed Object Model for the Java System
   | title= जावा सिस्टम के लिए वितरित वस्तु मॉडल
   | url=http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf |archive-date=2022-10-10 |url-status=live | access-date= 2009-02-11}}
   | url=http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf |archive-date=2022-10-10 |url-status=live | access-date= 2009-02-11}}
* [http://docs.oracle.com/cd/E12840_01/wls/docs103/rmi/rmi_intro.html Programming WebLogic RMI] - an introduction to RMI in Oracle Weblogic.
* [http://docs.oracle.com/cd/E12840_01/wls/docs103/rmi/rmi_intro.html प्रोग्रामिंग वेबलॉजिक RMI] - ओरेकल वेबलॉजिक में RMI का परिचय।
* [http://notes.corewebprogramming.com/student/RMI.pdf General Remote Method Invocation]
* [http://notes.corewebprogramming.com/student/RMI.pdf सामान्य दूरस्थ आवाहन विधि]
[[Category: जावा प्लेटफॉर्म | आरएमआई]] [[Category: सुदूर प्रणाली संदेश]] [[Category: जावा कोड उदाहरण के साथ लेख]]  
[[Category: जावा प्लेटफॉर्म | आरएमआई]] [[Category: सुदूर प्रणाली संदेश]] [[Category: जावा कोड उदाहरण के साथ लेख]]  



Revision as of 22:15, 18 May 2023

स्टब और स्केलेटन ऑब्जेक्ट्स का उपयोग करते हुए जावा-RMI का क विशिष्ट कार्यान्वयन मॉडल। जावा 2 SDK, मानक संस्करण, v1.2 ने स्केलेटन की आवश्यकता को समाप्त कर दिया।

कम्प्यूटिंग में जावा दूरवर्ती आवाहन विधि (जावा 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 कार्यक्षमता पैकेज में आती है java.rmi, जबकि सूर्य का अधिकांश sun.rmi पैकेट कार्यान्वयन में स्थित है। ध्यान दें कि जावा 5.0 से पहले जावा संस्करणों के साथ डेवलपर्स को RMI स्टब्स को एक अलग संकलन चरण में संकलित करना था rmic. Java के संस्करण 5.0 और उसके बाद के संस्करण को अब इस चरण की आवश्यकता नहीं है।

जीनी संस्करण

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

उदाहरण

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

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RmiServerIntf extends Remote {
    String getMessage() throws RemoteException;
}

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

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.*;

public class RmiServer extends UnicastRemoteObject implements RmiServerIntf {
    public static final String MESSAGE = "Hello World";

    public RmiServer() throws RemoteException {
        super(0); // required to avoid the 'rmic' step, see below
    }

    public String getMessage() {
        return MESSAGE;
    }

    public static void main(String args[]) throws Exception {
        System.out.println("RMI server started");

        try { //special exception handler for registry creation
            LocateRegistry.createRegistry(1099);
            System.out.println("java RMI registry created.");
        } catch (RemoteException e) {
            //do nothing, error means registry already exists
            System.out.println("java RMI registry already exists.");
        }
           
        //Instantiate RmiServer
        RmiServer server = new RmiServer();

        // Bind this object instance to the name "RmiServer"
        Naming.rebind("//localhost/RmiServer", server);
        System.out.println("PeerServer bound in registry");
    }
}

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

import java.rmi.Naming;

public class RmiClient {
    public static void main(String args[]) throws Exception {
        RmiServerIntf server = (RmiServerIntf)Naming.lookup("//localhost/RmiServer");
        System.out.println(server.getMessage());
    }
}

इस उदाहरण के उपयोग से पहले हमें उस इंटरफ़ेस के लिए 'स्टब' फ़ाइल बनानी होगी जिसका हमने उपयोग किया था। इस कार्य के लिए हमारे पास RMI कम्पाइलर - 'rmic' है

  • ध्यान दें: हम रिमोट इंटरफ़ेस के कार्यान्वयन के साथ '*.class' फ़ाइल से स्टब फ़ाइल बनाते हैं, '*.java' फ़ाइल से नहीं।
rmic RmiServer

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

संदर्भ

  1. Taylor, Ian J (2005). From P2P to Web Services and Grids : Peers in a Client/Server World. Computer Communications and Networks. London: Springer-Verlag. doi:10.1007/b138333. ISBN 1852338695. OCLC 827073874.[page needed]
  2. Wilson, M. Jeff (November 10, 2000). "प्रॉक्सी और आरएमआई के साथ स्मार्ट बनें". JavaWorld. Retrieved 2020-07-18.
  3. "जावा आरएमआई रिलीज नोट्स". Oracle. Retrieved 9 May 2012.


बाहरी संबंध