Java RMI-তে java.rmi.Naming ক্লাসটি রিমোট অবজেক্টকে RMI Registry-তে নিবন্ধন বা পুনঃনিবন্ধন করার জন্য এবং ক্লায়েন্ট প্রোগ্রামের মাধ্যমে রিমোট অবজেক্ট অ্যাক্সেস করার জন্য ব্যবহৃত হয়। এই ক্লাসের তিনটি গুরুত্বপূর্ণ মেথড হলো bind(), rebind(), এবং lookup()।
1. Naming.bind() মেথড
উদ্দেশ্য:
- রিমোট অবজেক্টকে RMI Registry-তে নির্দিষ্ট নামে নিবন্ধন করতে ব্যবহৃত হয়।
- যদি একই নামে রিমোট অবজেক্ট ইতিমধ্যে রেজিস্ট্রি-তে থাকে, তবে এটি একটি
AlreadyBoundExceptionনিক্ষেপ করে।
পদ্ধতি:
Naming.bind(String name, Remote obj);
উদাহরণ:
Naming.bind("HelloService", remoteObject);
নোট:
bind()শুধুমাত্র নতুন রিমোট অবজেক্ট নিবন্ধনের জন্য ব্যবহার করুন। যদি নাম আগে থেকেই নিবন্ধিত থাকে, তাহলে এটি কাজ করবে না।
2. Naming.rebind() মেথড
উদ্দেশ্য:
- রিমোট অবজেক্টকে RMI Registry-তে নিবন্ধন করে বা যদি একই নামে রিমোট অবজেক্ট ইতিমধ্যে নিবন্ধিত থাকে, তবে এটি পুরোনো অবজেক্টকে প্রতিস্থাপন করে।
পদ্ধতি:
Naming.rebind(String name, Remote obj);
উদাহরণ:
Naming.rebind("HelloService", remoteObject);
নোট:
rebind()একই নামে পুরোনো অবজেক্ট থাকলেও সেটিকে প্রতিস্থাপন করে নতুন রিমোট অবজেক্ট নিবন্ধন করতে সক্ষম।
3. Naming.lookup() মেথড
উদ্দেশ্য:
- RMI Registry থেকে রিমোট অবজেক্ট খুঁজে বের করে এবং রিমোট রেফারেন্স রিটার্ন করে।
- এটি সাধারণত ক্লায়েন্ট প্রোগ্রামে ব্যবহার করা হয়।
পদ্ধতি:
Remote ref = Naming.lookup(String name);
উদাহরণ:
Hello stub = (Hello) Naming.lookup("rmi://localhost:1099/HelloService");
নোট:
- যদি নির্দিষ্ট নামের কোনো রিমোট অবজেক্ট রেজিস্ট্রি-তে পাওয়া না যায়, তাহলে এটি একটি
NotBoundExceptionনিক্ষেপ করে।
Naming মেথডের ব্যবহার: একটি উদাহরণ
Remote Interface:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
Remote Object Implementation:
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class HelloImpl extends UnicastRemoteObject implements Hello {
protected HelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "Hello from RMI Server!";
}
}
RMI Server:
import java.rmi.Naming;
public class Server {
public static void main(String[] args) {
try {
// Remote Object তৈরি
HelloImpl remoteObject = new HelloImpl();
// RMI Registry-তে Remote Object নিবন্ধন
Naming.bind("HelloService", remoteObject); // প্রথমবার নিবন্ধন
// অথবা Rebinding ব্যবহার করুন
// Naming.rebind("HelloService", remoteObject);
System.out.println("RMI Server is running...");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
RMI Client:
import java.rmi.Naming;
public class Client {
public static void main(String[] args) {
try {
// RMI Registry থেকে Remote Object খুঁজে বের করা
Hello stub = (Hello) Naming.lookup("rmi://localhost:1099/HelloService");
// Remote Method কল করা
String response = stub.sayHello();
System.out.println("Response from server: " + response);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
Naming মেথডের তুলনা
| মেথড | ব্যবহার | ব্যতিক্রম |
|---|---|---|
bind() | নতুন রিমোট অবজেক্ট নিবন্ধন করতে ব্যবহৃত। | AlreadyBoundException |
rebind() | নতুন অবজেক্ট নিবন্ধন বা পুরোনো অবজেক্ট প্রতিস্থাপন করতে ব্যবহৃত। | N/A |
lookup() | রেজিস্ট্রি থেকে রিমোট অবজেক্ট খুঁজে বের করতে ব্যবহৃত। | NotBoundException |
Naming.bind(), rebind(), এবং lookup() RMI অ্যাপ্লিকেশনে রিমোট অবজেক্ট নিবন্ধন ও ব্যবস্থাপনার গুরুত্বপূর্ণ মেথড।
bind()শুধুমাত্র নতুন অবজেক্ট নিবন্ধনের জন্য ব্যবহৃত হয়।rebind()পুরোনো অবজেক্ট প্রতিস্থাপন করতে সক্ষম।lookup()রেজিস্ট্রি থেকে অবজেক্ট খুঁজে ক্লায়েন্টকে রিমোট রেফারেন্স প্রদান করে।
এই মেথডগুলো RMI অ্যাপ্লিকেশনের কার্যকারিতা ও স্থিতিশীলতা নিশ্চিত করে।
Content added By
Read more