జావా RMI రిజిస్ట్రీ గురించి మరియు దానిని ఎలా ఉపయోగించాలో

జావా RMI రిజిస్ట్రీ గురించి మరియు దానిని ఎలా ఉపయోగించాలో

RMI ఉన్నచో రిమోట్ పద్ధతి ఆవాహన మరియు, పేరు సూచించినట్లుగా, జావా ప్రోగ్రామ్ మరొక కంప్యూటర్‌లో నడుస్తున్న వస్తువు యొక్క పద్ధతిని ప్రారంభించడానికి ఒక ప్రోటోకాల్. ఇది ఒక ప్రోగ్రామ్ (సర్వర్ అని పిలవబడే) నుండి ఒక వస్తువును ఎగుమతి చేయడానికి మరియు మరొక ప్రోగ్రామ్ (క్లయింట్ అని పిలవబడే) నుండి ఆ వస్తువు యొక్క పద్ధతులను ప్రారంభించడానికి ఒక API (అప్లికేషన్ ప్రోగ్రామింగ్ ఇంటర్‌ఫేస్) ను అందిస్తుంది, బహుశా వేరే కంప్యూటర్‌లో నడుస్తుంది.





జావా RMI రిజిస్ట్రీ జావా ఆర్‌ఎంఐ సిస్టమ్‌లో కీలకమైన భాగం మరియు సర్వర్‌లు సేవలను నమోదు చేసుకోవడానికి మరియు క్లయింట్‌లు ఈ సేవలను వెతకడానికి కేంద్రీకృత డైరెక్టరీని అందిస్తుంది. ఈ ఆర్టికల్‌లో, ఒక వస్తువును బహిర్గతం చేయడానికి సర్వర్‌ను ఎలా అమలు చేయాలో మరియు సర్వర్‌లో ఒక పద్ధతిని ప్రారంభించడానికి క్లయింట్ ఎలా చేయాలో నేర్చుకుంటాము, అలాగే RMI రిజిస్ట్రీలో సేవను నమోదు చేసుకోవడం మరియు చూడటం.





Google లో డిఫాల్ట్ ఖాతాను ఎలా మార్చాలి

సర్వర్ ఇంటర్‌ఫేస్‌ని ప్రకటించడం

జావా RMI సిస్టమ్ ఎలా పనిచేస్తుందనే చిక్కులను తెలుసుకోవడానికి, ఒక పేరును అంగీకరించడానికి మరియు గ్రీటింగ్‌ను తిరిగి ఇవ్వడానికి ఒక పద్ధతిని అందించే ఒక సాధారణ సర్వర్ వస్తువును అమలు చేద్దాం. ఆబ్జెక్ట్ ఇంటర్‌ఫేస్ యొక్క నిర్వచనం ఇక్కడ ఉంది:





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

ఇంటర్ఫేస్ పేరు అంటారు నమస్కారం . ఇది అనే ఒకే పద్ధతిని అందిస్తుంది అభినందించడానికి() ఇది ఒక పేరును అంగీకరిస్తుంది మరియు తగిన గ్రీటింగ్‌ను అందిస్తుంది.

ఈ ఇంటర్‌ఫేస్‌ని ఎగుమతి చేయదగినదిగా మార్క్ చేయడానికి, అది విస్తరించాల్సిన అవసరం ఉంది java.rmi.Remote ఇంటర్ఫేస్. అలాగే పద్ధతిని ప్రకటించాల్సిన అవసరం ఉంది విసురుతాడు నిబంధన జాబితా 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 () స్థానిక రిజిస్ట్రీ రిఫరెన్స్ పొందడానికి ఉపయోగించబడుతుంది. ది రీబైండ్ () పేరును స్టబ్‌కు బంధించడానికి పద్ధతి ఉపయోగించబడుతుంది. | _+_ |

పూర్తి ప్రధాన పద్ధతి.

Greeting greeting = new GreetingObject();

సర్వర్‌ను నిర్మించడం

ఇప్పుడు సర్వర్‌ను రూపొందించడాన్ని పరిశీలిద్దాం. విషయాలను సరళంగా ఉంచడానికి, మేము మావెన్ వంటి బిల్డ్ టూల్‌ని ఉపయోగించకుండా Linux లో కమాండ్ లైన్ ఉపయోగించి నిర్మిస్తాము.





కిందివి సోర్స్ ఫైల్స్‌ను లక్ష్య డైరెక్టరీలోని క్లాస్ ఫైల్‌లకు కంపైల్ చేస్తాయి.

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 + ''');
}
}

క్లయింట్‌ను అమలు చేయడం

సర్వర్ ఆబ్జెక్ట్ పద్ధతులను ప్రారంభించడానికి ఉపయోగించే క్లయింట్‌ను అమలు చేయడాన్ని ఇప్పుడు చూద్దాం.

  • సర్వర్ మాదిరిగానే, రిజిస్ట్రీకి సూచనను పొందండి, రిజిస్ట్రీ నడుస్తున్న హోస్ట్ పేరు మరియు పోర్ట్ నంబర్‌ను పేర్కొనండి. | _+_ |
  • తరువాత, రిజిస్ట్రీలో సేవను చూడండి. ది పైకి చూడు() పద్ధతి సేవలను అందించడానికి ఉపయోగించగల స్టబ్‌ను అందిస్తుంది. | _+_ |
  • మరియు అవసరమైన వాదనలను పంపే పద్ధతిని ప్రారంభించండి. ఇక్కడ, పేరును పాస్ చేయడం మరియు దాన్ని ముద్రించడం ద్వారా మేము గ్రీటింగ్ పొందుతాము. | _+_ |

పూర్తి క్లయింట్ కోడ్:

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

RMI రిజిస్ట్రీ

ఇప్పుడు సర్వర్ ప్రోగ్రామ్‌ని రన్ చేద్దాం, తద్వారా అది రిక్వెస్ట్‌లను అందించడం ప్రారంభిస్తుంది.

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

ఏమిటి ఈ మినహాయింపు ? కనెక్షన్ తిరస్కరించబడింది .

మీరు ఈ మినహాయింపు పొందడానికి కారణం: పోర్ట్ 1099 లో స్థానిక రిజిస్ట్రీకి కనెక్ట్ చేయడానికి ప్రయత్నిస్తుందని సర్వర్ కోడ్ నుండి గమనించండి. అది విఫలమైతే, మీరు ఈ మినహాయింపుతో ముగుస్తుంది.

పరిష్కారం RMI రిజిస్ట్రీని అమలు చేయడం. RMI రిజిస్ట్రీ అనేది జావా వర్చువల్ మెషిన్‌తో రవాణా చేయబడిన ప్రోగ్రామ్ మరియు దీనిని పిలుస్తారు rmiregistry . ఇది లో ఉన్న ఉండాలి am జావా వర్చువల్ మెషిన్ ఇన్‌స్టాలేషన్ డైరెక్టరీ. దీన్ని అమలు చేయడం చాలా సులభం:

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

డిఫాల్ట్‌గా, రిజిస్ట్రీ పోర్ట్ 1099 లో వింటుంది. దానిని మరొక పోర్టులో వినడానికి, పోర్ట్ నంబర్‌ను ఈ విధంగా పేర్కొనండి:

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

పేర్కొన్న పోర్టులో వినేవారు నిజంగా ఉన్నారో లేదో తనిఖీ చేయండి netstat ఆదేశం :

ప్లేస్టేషన్ 4 ఏ సంవత్సరం వచ్చింది
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

ఇప్పుడు సర్వర్ నడుస్తోంది.

క్లయింట్ రన్నింగ్

అన్ని భాగాలు సమావేశమై మరియు అమలు చేసిన తర్వాత, క్లయింట్‌ను అమలు చేయడం సులభం. ఇది అమలు చేయడానికి తగిన JAR లు అవసరం. వీటిలో ఉన్న క్లాస్ ఉన్నాయి ప్రధాన () పద్ధతి, మరియు ఇంటర్ఫేస్ తరగతి. ఇది RMI రిజిస్ట్రీ ఎక్కడ నడుస్తుందో సూచించే వాదనలను మరియు గ్రీటింగ్ కోసం ఒక పేరును అంగీకరిస్తుంది.

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

సారాంశం

జావా RMI రిమోట్ కోడ్ అమలును సులభతరం చేయడానికి API మరియు సాధనాలను అందిస్తుంది. మీరు జావా RMI రిజిస్ట్రీలో సేవా వస్తువును నమోదు చేసే సర్వర్‌ను అమలు చేయవచ్చు. ఖాతాదారులు రిజిస్ట్రీని ప్రశ్నించవచ్చు మరియు సేవా పద్ధతులను ప్రారంభించడానికి సర్వీస్ ఆబ్జెక్ట్ స్టబ్‌ను పొందవచ్చు. ఈ ఉదాహరణ వివరిస్తున్నట్లుగా, ఇది చాలా సులభం.

మీరు మీ ప్రాజెక్ట్‌లో జావా RMI ఉపయోగిస్తున్నారా? మీ అనుభవం ఏమిటి? మీరు పరిశోధించిన ప్రత్యామ్నాయాలు ఏమైనా ఉన్నాయా? దయచేసి దిగువ వ్యాఖ్యలలో మాకు తెలియజేయండి.

షేర్ చేయండి షేర్ చేయండి ట్వీట్ ఇమెయిల్ యానిమేటింగ్ స్పీచ్ కోసం బిగినర్స్ గైడ్

ప్రసంగాన్ని యానిమేట్ చేయడం ఒక సవాలుగా ఉంటుంది. మీరు మీ ప్రాజెక్ట్‌కి సంభాషణను జోడించడానికి సిద్ధంగా ఉంటే, మేము మీ కోసం ప్రక్రియను విచ్ఛిన్నం చేస్తాము.

తదుపరి చదవండి
సంబంధిత అంశాలు
  • ప్రోగ్రామింగ్
  • జావా
రచయిత గురుంచి జై శ్రీధర్(17 కథనాలు ప్రచురించబడ్డాయి) జే శ్రీధర్ నుండి మరిన్ని

మా వార్తాలేఖకు సభ్యత్వాన్ని పొందండి

టెక్ చిట్కాలు, సమీక్షలు, ఉచిత ఈబుక్‌లు మరియు ప్రత్యేకమైన డీల్స్ కోసం మా వార్తాలేఖలో చేరండి!

సభ్యత్వం పొందడానికి ఇక్కడ క్లిక్ చేయండి