जावा दूरस्थ पद्धति उत्क्रियण (जावा रिमोट मेथड एक्टिवेशन)
कम्प्यूटिंग में जावा रिमोट मेथड एक्टिवेशन (जावा 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] या उन प्रोग्रामों के लिए जो दूरस्थ ऑब्जेक्ट को निर्यात करते समय स्पष्ट पोर्ट नंबर (या शून्य) प्रदान नहीं करते हैं जो संभव होने के लिए उत्पन्न स्टब्स के लिए आवश्यक है जैसा कि यूनीकास्टरिमोटऑब्जेक्ट हेतु जावाडॉक में वर्णित है। उपरोक्त कन्स्ट्रक्टर में टिप्पणी देखें।
संदर्भ
- ↑ 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]
- ↑ Wilson, M. Jeff (November 10, 2000). "प्रॉक्सी और आरएमआई के साथ स्मार्ट बनें". JavaWorld. Retrieved 2020-07-18.
- ↑ "जावा आरएमआई रिलीज नोट्स". Oracle. Retrieved 9 May 2012.
बाहरी संबंध
- "रिमोट मेथड इनवोकेशन होम". जावा डेवलपर्स के लिए ओरेकल टेक्नोलॉजी नेटवर्क. रेडवुड शोर्स, सीए, यूएसए: ओरेकल कॉर्पोरेशन. Retrieved 2014-07-14.
- जावा RMI ट्यूटोरियल - RMI सीखने के लिए अच्छा आरम्भिक बिंदु। RMI में हैलो वर्ल्ड भी देखें।
- जावा RMI ऑनलाइन प्रशिक्षण - जावा RMI और इसके संदर्भ के रूप में प्रशिक्षण के लिए अच्छा है
- JDK डॉक्स में RMI पेज
java.rmi
(RMI पैकेज के लिए सन का जावा API संदर्भ)- ऐन वोलरथ; रोजर रिग्स; जिम वाल्डो. "जावा सिस्टम के लिए वितरित वस्तु मॉडल" (PDF). Archived (PDF) from the original on 2022-10-10. Retrieved 2009-02-11.
{{cite journal}}
: Cite journal requires|journal=
(help) - प्रोग्रामिंग वेबलॉजिक RMI - ओरेकल वेबलॉजिक में RMI का परिचय।
- सामान्य दूरस्थ आवाहन विधि