जावा आरएमआई रजिस्ट्री के बारे में सब कुछ और इसका उपयोग कैसे करें

जावा आरएमआई रजिस्ट्री के बारे में सब कुछ और इसका उपयोग कैसे करें

आरएमआई के लिए खड़ा है दूरस्थ विधि आह्वान और, जैसा कि नाम से संकेत मिलता है, जावा प्रोग्राम के लिए एक प्रोटोकॉल है जो किसी अन्य कंप्यूटर पर चल रहे ऑब्जेक्ट की विधि को लागू करता है। यह एक प्रोग्राम (सर्वर कहा जाता है) से किसी ऑब्जेक्ट को निर्यात करने के लिए एक एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफेस) प्रदान करता है और उस ऑब्जेक्ट के तरीकों को किसी अन्य प्रोग्राम (क्लाइंट कहा जाता है) से लागू करता है, संभवतः एक अलग कंप्यूटर पर चल रहा है।





जावा आरएमआई रजिस्ट्री जावा आरएमआई प्रणाली का एक प्रमुख घटक है और सेवाओं को पंजीकृत करने के लिए सर्वरों के लिए और इन सेवाओं को देखने के लिए ग्राहकों के लिए एक केंद्रीकृत निर्देशिका प्रदान करता है। इस लेख में, हम सीखते हैं कि किसी वस्तु को उजागर करने के लिए सर्वर को कैसे लागू किया जाए और सर्वर पर एक विधि को लागू करने के लिए क्लाइंट के साथ-साथ आरएमआई रजिस्ट्री में सेवा को पंजीकृत करने और देखने के लिए।





विंडोज़ 10 . के लिए मैक ओएस एमुलेटर

सर्वर इंटरफ़ेस घोषित करना

जावा आरएमआई सिस्टम कैसे काम करता है, इसकी पेचीदगियों को जानने के लिए, आइए हम एक साधारण सर्वर ऑब्जेक्ट को लागू करें जो एक नाम स्वीकार करने और एक ग्रीटिंग वापस करने की विधि प्रदान करता है। यहाँ ऑब्जेक्ट इंटरफ़ेस की परिभाषा है:





import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Greeting extends Remote
{
public String greet(String name) throws RemoteException;
}

इंटरफ़ेस का नाम कहा जाता है शुभकामना . यह एक एकल विधि प्रदान करता है जिसे कहा जाता है नमस्कार() जो एक नाम स्वीकार करता है और एक उपयुक्त अभिवादन देता है।

इस इंटरफ़ेस को निर्यात योग्य के रूप में चिह्नित करने के लिए, इसे विस्तारित करने की आवश्यकता है java.rmi.Remote इंटरफेस। इसके अलावा विधि को घोषित करने की आवश्यकता है a फेंकता खंड सूची java.rmi.RemoteException किसी भी एप्लिकेशन विशिष्ट अपवादों के अतिरिक्त। ऐसा इसलिए है कि क्लाइंट कोड दूरस्थ विधि आमंत्रण त्रुटियों को संभाल (या प्रचारित) कर सकता है जैसे कि मेज़बान नहीं मिला , कनेक्शन विफलता , आदि।



सर्वर ऑब्जेक्ट को लागू करना

इंटरफ़ेस (जो क्लाइंट द्वारा उपयोग किया जाता है) घोषित करने के बाद, हम सर्वर साइड ऑब्जेक्ट को लागू करते हैं, और प्रदान करते हैं नमस्कार() विधि के रूप में दिखाया गया है। यह ग्रीटिंग को प्रारूपित करने के लिए एक साधारण प्रारूप स्ट्रिंग का उपयोग करता है।

public class GreetingObject implements Greeting
{
private String fmtString = 'Hello, %s';
public String greet(String name)
{
return String.format(this.fmtString, name);
}
}

सर्वर मुख्य विधि

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





  • सर्वर ऑब्जेक्ट कार्यान्वयन बनाने के लिए पहला कदम है। |_+_|
  • अगला, हम RMI रनटाइम से सर्वर ऑब्जेक्ट के लिए एक स्टब प्राप्त करते हैं। स्टब सर्वर ऑब्जेक्ट के समान इंटरफ़ेस लागू करता है। हालाँकि यह विधि दूरस्थ सर्वर ऑब्जेक्ट के साथ आवश्यक संचार को लागू करती है। इस स्टब का उपयोग क्लाइंट द्वारा सर्वर ऑब्जेक्ट पर विधि को पारदर्शी रूप से लागू करने के लिए किया जाता है। |_+_|
  • एक बार स्टब प्राप्त हो जाने के बाद, हम इस स्टब को एक निर्दिष्ट नामित सेवा से जुड़ने के लिए RMI रजिस्ट्री को सौंप देते हैं। जब क्लाइंट इस सेवा के कार्यान्वयन का अनुरोध करता है, तो उसे स्टब प्राप्त होता है जो जानता है कि सर्वर ऑब्जेक्ट के साथ कैसे संवाद करना है। निम्नलिखित में, स्थिर विधि LocateRegistry.getRegistry () स्थानीय रजिस्ट्री संदर्भ प्राप्त करने के लिए प्रयोग किया जाता है। NS रिबाइंड () विधि का उपयोग तब नाम को स्टब से बांधने के लिए किया जाता है। |_+_|

पूर्ण मुख्य विधि।

Greeting greeting = new GreetingObject();

सर्वर का निर्माण

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





निम्न स्रोत फ़ाइलों को लक्ष्य निर्देशिका में वर्ग फ़ाइलों में संकलित करता है।

Greeting stub = (Greeting)UnicastRemoteObject.exportObject(greeting, 0);

निष्पादन के लिए वर्ग फ़ाइलों को एक JAR फ़ाइल में एकत्रित करें।

String name = 'Greeting';
Registry registry = LocateRegistry.getRegistry(port);
registry.rebind(name, stub);

हम क्लाइंट को लाइब्रेरी JAR में संकलित करने के लिए आवश्यक इंटरफ़ेस फ़ाइलें भी एकत्र करते हैं।

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class Main
{
static public void main(String[] args) throws Exception
{
if ( args.length == 0 ) {
System.err.println('usage: java Main port#');
System.exit(1);
}
int index = 0;
int port = Integer.parseInt(args[index++]);
String name = 'Greeting';
Greeting greeting = new GreetingObject();
Greeting stub = (Greeting)UnicastRemoteObject.exportObject(greeting, 0);
Registry registry = LocateRegistry.getRegistry(port);
registry.rebind(name, stub);
System.out.println('Greeting bound to '' + name + ''');
}
}

क्लाइंट को लागू करना

आइए अब सर्वर ऑब्जेक्ट विधियों को लागू करने के लिए उपयोग किए जाने वाले क्लाइंट को लागू करने पर ध्यान दें।

  • सर्वर के साथ के रूप में, रजिस्ट्री के लिए एक संदर्भ प्राप्त करें, होस्टनाम निर्दिष्ट करें जहां रजिस्ट्री चल रही है, और पोर्ट नंबर। |_+_|
  • इसके बाद, रजिस्ट्री में सेवा देखें। NS खोजें() विधि एक स्टब लौटाती है जिसका उपयोग सेवाओं को लागू करने के लिए किया जा सकता है। |_+_|
  • और आवश्यक तर्कों को पारित करने की विधि का आह्वान करें। यहां, हम नाम पास करके और उसे प्रिंट करके अभिवादन प्राप्त करते हैं। |_+_|

पूरा ग्राहक कोड:

rm -rf target
mkdir target
javac -d target src/server/*.java

आरएमआई रजिस्ट्री

आइए अब सर्वर प्रोग्राम चलाते हैं ताकि यह अनुरोधों की सेवा शुरू कर सके।

jar cvf target/rmi-server.jar -C target server

क्या है यह अपवाद ? कनेक्शन नहीं हो सका .

आपको यह अपवाद इसलिए मिलता है क्योंकि: सर्वर कोड से नोट करें कि यह पोर्ट 1099 पर स्थानीय रजिस्ट्री से कनेक्ट करने का प्रयास करता है। यदि वह विफल रहता है, तो आप इस अपवाद के साथ समाप्त होते हैं।

समाधान RMI रजिस्ट्री को चलाना है। RMI रजिस्ट्री एक प्रोग्राम है जिसे जावा वर्चुअल मशीन के साथ भेजा जाता है और इसे कहा जाता है रमिरजिस्ट्री . यह में स्थित होना चाहिए पूर्वाह्न जावा वर्चुअल मशीन स्थापना की निर्देशिका। इसे चलाना उतना ही सरल है जितना:

jar cvf target/rmi-lib.jar -C target server/Greeting.class

डिफ़ॉल्ट रूप से, रजिस्ट्री पोर्ट 1099 पर सुनती है। इसे किसी अन्य पोर्ट पर सुनने के लिए, पोर्ट नंबर को निम्नानुसार निर्दिष्ट करें:

Registry registry = LocateRegistry.getRegistry(host, port);

जांचें कि निर्दिष्ट पोर्ट पर वास्तव में श्रोता है नेटस्टैट कमांड :

वायरलेस हेडसेट को Xbox One से कैसे कनेक्ट करें
Greeting greeting = (Greeting) registry.lookup(name);

सर्वर चलाना

आइए अब सर्वर को फिर से चलाने का प्रयास करें।

System.out.println(name + ' reported: ' + greeting.greet(myName));

फिर से एक अपवाद! इस बार क्या है?

सर्वर इंटरफ़ेस वर्ग को लोड करने में असमर्थ है सर्वर.नमस्कार . ऐसा इसलिए होता है क्योंकि RMI रजिस्ट्री आवश्यक वर्ग को लोड करने में असमर्थ है। तो आपको आवश्यक कक्षाओं का स्थान निर्दिष्ट करने की आवश्यकता है। ऐसा करने का एक तरीका क्लासस्पैट पर्यावरण चर निर्दिष्ट करना है:

package client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import server.Greeting;
public class Client
{
static public void main(String[] args) throws Exception
{
if ( args.length != 3 ) {
System.err.println('usage: java Client host port myName');
System.exit(1);
}
int index = 0;
String host = args[index++];
int port = Integer.parseInt(args[index++]);
String myName = args[index++];
String name = 'Greeting';
Registry registry = LocateRegistry.getRegistry(host, port);
Greeting greeting = (Greeting) registry.lookup(name);
System.out.println(name + ' reported: ' + greeting.greet(myName));
}
}

सर्वर को फिर से चलाने का प्रयास देता है:

java -cp target/rmi-server.jar server.Main 1099
# throws
Exception in thread 'main' java.rmi.ConnectException: Connection refused to host: xxx; nested exception is:
java.net.ConnectException: Connection refused

अब सर्वर चल रहा है।

क्लाइंट चलाना

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

/usr/lib/jvm/jdk1.8.0_71/bin/rmiregistry

सारांश

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

क्या आप अपनी परियोजना में जावा आरएमआई का उपयोग कर रहे हैं? आपका अनुभव कैसा रहा? क्या कोई विकल्प है जिसकी आपने जांच की है? कृपया हमें नीचे टिप्पणी में बताएं।

साझा करना साझा करना कलरव ईमेल एनिमेटिंग स्पीच के लिए एक शुरुआती गाइड

एनिमेटिंग भाषण एक चुनौती हो सकती है। यदि आप अपने प्रोजेक्ट में संवाद जोड़ना शुरू करने के लिए तैयार हैं, तो हम आपके लिए प्रक्रिया को तोड़ देंगे।

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • जावा
लेखक के बारे में जय श्रीधर(17 लेख प्रकाशित) जय श्रीधर की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें