Java RMI Registry হলো একটি ডিরেক্টরি সার্ভিস যা Remote Objects সংরক্ষণ করে এবং ক্লায়েন্টদের সেগুলো খুঁজে বের করতে সাহায্য করে। ক্লায়েন্ট অ্যাপ্লিকেশনগুলো RMI Registry ব্যবহার করে সার্ভারে থাকা Remote Object এর রেফারেন্স পায় এবং তাদের মেথড কল করতে সক্ষম হয়।
RMI Registry কীভাবে কাজ করে?
- Server Side:
- Remote Object তৈরি করা হয়।
- RMI Registry-তে Remote Object রেজিস্টার করা হয় একটি নির্দিষ্ট নাম (binding name) সহ।
- উদাহরণ:
registry.rebind("RemoteObjectName", remoteObjectInstance);
- Client Side:
- ক্লায়েন্ট RMI Registry-তে সংযোগ স্থাপন করে।
- নির্দিষ্ট নাম ব্যবহার করে Remote Object খুঁজে বের করে (lookup)।
- Remote Object এর মেথড কল করে।
RMI Registry থেকে Remote Object খুঁজে বের করার ধাপ
Step 1: RMI Registry চালু করা
- RMI Registry চালু করতে
rmiregistryকমান্ড ব্যবহার করতে হবে। টার্মিনালে নিচের কমান্ড চালান:
rmiregistryএটি ডিফল্টভাবে পোর্ট 1099-এ RMI Registry চালু করবে।
Note:
rmiregistryকমান্ডCLASSPATHসেটআপের উপর নির্ভর করে।
Step 2: RMI Registry-তে Remote Object রেজিস্টার করা (Server Side)
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
// Remote Object তৈরি
CalculatorImpl calculator = new CalculatorImpl();
// RMI Registry তৈরি এবং Remote Object রেজিস্টার করা
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("CalculatorService", calculator);
System.out.println("Server is ready.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Key Points:
- LocateRegistry.createRegistry(1099):
- সার্ভারে RMI Registry তৈরি করে।
- registry.rebind("CalculatorService", calculator):
- Remote Object
calculator-কে RMI Registry-তেCalculatorServiceনামে রেজিস্টার করে।
- Remote Object
Step 3: RMI Registry থেকে Remote Object খুঁজে বের করা (Client Side)
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
public static void main(String[] args) {
try {
// RMI Registry থেকে সংযোগ স্থাপন
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
// Remote Object খুঁজে বের করা
Calculator calculator = (Calculator) registry.lookup("CalculatorService");
// Remote Method কল করা
int result = calculator.add(10, 20);
System.out.println("Addition Result: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Key Points:
- LocateRegistry.getRegistry("localhost", 1099):
localhostএবং পোর্ট 1099 ব্যবহার করে RMI Registry-তে সংযোগ স্থাপন করে।
- registry.lookup("CalculatorService"):
CalculatorServiceনাম ব্যবহার করে Remote Object খুঁজে বের করে।
- Remote Method Invocation:
calculator.add(10, 20)কল করে সার্ভারের Remote Method চালানো হয়।
কোডের পূর্ণ উদাহরণ
1. Remote Interface
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote {
int add(int a, int b) throws RemoteException;
int subtract(int a, int b) throws RemoteException;
}
2. Remote Object Implementation
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
protected CalculatorImpl() throws RemoteException {
super();
}
@Override
public int add(int a, int b) throws RemoteException {
return a + b;
}
@Override
public int subtract(int a, int b) throws RemoteException {
return a - b;
}
}
3. Server Class
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
CalculatorImpl calculator = new CalculatorImpl();
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("CalculatorService", calculator);
System.out.println("Server is ready.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. Client Class
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
Calculator calculator = (Calculator) registry.lookup("CalculatorService");
int result = calculator.add(10, 20);
System.out.println("Addition Result: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
RMI Registry সংক্রান্ত গুরুত্বপূর্ণ বিষয়
- পোর্ট নম্বর ডিফল্ট:
- RMI Registry সাধারণত পোর্ট 1099-এ চালু হয়। তবে এটি পরিবর্তন করা যায়।
- মাল্টিপল Remote Object রেজিস্ট্রেশন:
- একই RMI Registry-তে একাধিক Remote Object রেজিস্টার করা যায়।
উদাহরণ:
registry.rebind("Service1", object1); registry.rebind("Service2", object2);
- ব্যতিক্রম (Exceptions):
NotBoundException: নির্দিষ্ট নামের Remote Object যদি Registry-তে না থাকে।AccessException: অবৈধ অ্যাক্সেসের কারণে ত্রুটি।
RMI Registry একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা Remote Object গুলো সংরক্ষণ এবং খুঁজে বের করার সুবিধা প্রদান করে। ক্লায়েন্ট registry.lookup ব্যবহার করে Remote Object এর রেফারেন্স পায় এবং সার্ভারের মেথডগুলো কল করে। RMI Registry এর সঠিক ব্যবহার Distributed Application তৈরিতে সহজতা ও কার্যকারিতা বৃদ্ধি করে।
Read more