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

From Vigyanwiki
स्टब और स्केलेटन ऑब्जेक्ट्स का उपयोग करते हुए जावा-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.


बाहरी संबंध