Java RMI (Remote Method Invocation) হলো একটি Java প্রযুক্তি যা আপনাকে এক কম্পিউটারের Java অ্যাপ্লিকেশন থেকে অন্য কম্পিউটারের Java অ্যাপ্লিকেশনকে দূরবর্তীভাবে মেথড কল করতে সক্ষম করে। এটি একটি ডিসট্রিবিউটেড প্রোগ্রামিং প্রযুক্তি, যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের সুবিধাগুলি ব্যবহার করে, এবং এটি নেটওয়ার্কের মাধ্যমে অবজেক্টগুলির মধ্যে যোগাযোগ করতে দেয়।
Java RMI (Remote Method Invocation) হলো Java এর একটি প্রযুক্তি, যা আপনাকে একটি distributed বা বিতরণকৃত অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। RMI এর মাধ্যমে আপনি একটি Java প্রোগ্রামের মেথড কে অন্য একটি দূরবর্তী সার্ভার বা রিমোট মেশিন এ কল করতে পারবেন, যেন মেথডটি লোকাল মেশিনেই কল হচ্ছে। অর্থাৎ, RMI এর মাধ্যমে আপনি এমন মেথড কল করতে পারেন, যা অন্য একটি JVM (Java Virtual Machine) এ চলে, এবং রিমোট অবজেক্টের মাধ্যমে রিমোট মেথড কল করার সুবিধা প্রদান করে।
RMI এর মাধ্যমে একটি ক্লায়েন্ট রিমোট মেশিনে অবস্থিত একটি অবজেক্টের মেথড কল করতে পারে। RMI এর কাজের প্রক্রিয়া মূলত তিনটি অংশে বিভক্ত:
Stub: এটি ক্লায়েন্টের জন্য একটি লোকাল অবজেক্ট, যা রিমোট অবজেক্টের প্রতিনিধিত্ব করে। ক্লায়েন্ট মেথড কল করলে Stub সেই মেথডকে রিমোট সার্ভারে প্রেরণ করে।
Skeleton: Skeleton হলো রিমোট সার্ভারে অবস্থিত একটি উপাদান, যা Stub থেকে আসা মেথড কলকে গ্রহণ করে এবং রিমোট অবজেক্টে মেথডটি চালায়। (Java 2 থেকে Skeleton নিজে থেকে তৈরি হয় না, এটি স্বয়ংক্রিয়ভাবে RMI দ্বারা পরিচালিত হয়)।
RMI Registry: RMI Registry হলো একটি রেজিস্ট্রি সার্ভার, যা রিমোট অবজেক্টের নাম এবং তাদের অবস্থানের মধ্যে সম্পর্ক সংরক্ষণ করে। ক্লায়েন্টরা এই রেজিস্ট্রি সার্ভারের মাধ্যমে রিমোট অবজেক্টের রেফারেন্স পায়।
RMI এর কাজের প্রধান ধাপগুলো হলো:
নিচে একটি উদাহরণ দেখানো হলো, যেখানে আমরা RMI ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করব।
১. Remote Interface তৈরি করা
প্রথমে, আমরা একটি ইন্টারফেস তৈরি করব, যেখানে রিমোট মেথড ডিক্লেয়ার করা থাকবে। ইন্টারফেসটি java.rmi.Remote ইন্টারফেসটি ইমপ্লিমেন্ট করবে এবং প্রত্যেকটি মেথডে RemoteException থ্রো করতে হবে।
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}২. Remote Object (Server) ইমপ্লিমেন্ট করা
ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি রিমোট অবজেক্ট তৈরি করতে হবে, যেখানে sayHello মেথডটি ইমপ্লিমেন্ট করা হবে।
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
protected HelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "Hello from the remote server!";
}
}৩. Server তৈরি করা
এখন আমরা সার্ভার কোড লিখব, যেখানে RMI Registry তে আমাদের রিমোট অবজেক্টকে bind করা হবে।
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
// রিমোট অবজেক্ট তৈরি করা
HelloImpl obj = new HelloImpl();
// RMI Registry এ রিমোট অবজেক্ট bind করা
Registry registry = LocateRegistry.createRegistry(1099); // Default port 1099
registry.bind("Hello", obj);
System.out.println("Server is ready.");
} catch (Exception e) {
System.out.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}৪. Client তৈরি করা
এখন আমরা ক্লায়েন্ট কোড লিখব, যেখানে রিমোট অবজেক্টকে lookup করা হবে এবং রিমোট মেথড কল করা হবে।
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");
// রিমোট অবজেক্টকে খুঁজে বের করা
Hello stub = (Hello) registry.lookup("Hello");
// রিমোট মেথড কল করা
String response = stub.sayHello();
System.out.println("Response from server: " + response);
} catch (Exception e) {
System.out.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}ধাপ ১: RMI স্টাব জেনারেট করা
RMI এর জন্য stub এবং skeleton জেনারেট করা দরকার ছিল পুরোনো ভার্সনে, কিন্তু Java 5 থেকে এটি অটোমেটিক তৈরি হয়। এজন্য আপনাকে অতিরিক্ত কিছু করতে হবে না। শুধু javac দিয়ে সার্ভার এবং ক্লায়েন্ট কম্পাইল করুন।
ধাপ ২: Server চালু করা
java Serverধাপ ৩: Client চালু করা
java Clientআউটপুট:
Server is ready.
Response from server: Hello from the remote server!Java RMI একটি শক্তিশালী এবং কার্যকর টুল, যা distributed computing এর মাধ্যমে Java প্রোগ্রামের রিমোট মেথড কল করতে দেয়। RMI ডেভেলপারদের জন্য রিমোট অবজেক্ট এবং মেথড ব্যবহার করা সহজ করে তোলে এবং এর মাধ্যমে সার্ভার ও ক্লায়েন্ট অ্যাপ্লিকেশন সহজেই তৈরি করা যায়।
Java RMI (Remote Method Invocation) হলো একটি Java প্রযুক্তি যা আপনাকে এক কম্পিউটারের Java অ্যাপ্লিকেশন থেকে অন্য কম্পিউটারের Java অ্যাপ্লিকেশনকে দূরবর্তীভাবে মেথড কল করতে সক্ষম করে। এটি একটি ডিসট্রিবিউটেড প্রোগ্রামিং প্রযুক্তি, যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের সুবিধাগুলি ব্যবহার করে, এবং এটি নেটওয়ার্কের মাধ্যমে অবজেক্টগুলির মধ্যে যোগাযোগ করতে দেয়।
Java RMI (Remote Method Invocation) হলো Java এর একটি প্রযুক্তি, যা আপনাকে একটি distributed বা বিতরণকৃত অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। RMI এর মাধ্যমে আপনি একটি Java প্রোগ্রামের মেথড কে অন্য একটি দূরবর্তী সার্ভার বা রিমোট মেশিন এ কল করতে পারবেন, যেন মেথডটি লোকাল মেশিনেই কল হচ্ছে। অর্থাৎ, RMI এর মাধ্যমে আপনি এমন মেথড কল করতে পারেন, যা অন্য একটি JVM (Java Virtual Machine) এ চলে, এবং রিমোট অবজেক্টের মাধ্যমে রিমোট মেথড কল করার সুবিধা প্রদান করে।
RMI এর মাধ্যমে একটি ক্লায়েন্ট রিমোট মেশিনে অবস্থিত একটি অবজেক্টের মেথড কল করতে পারে। RMI এর কাজের প্রক্রিয়া মূলত তিনটি অংশে বিভক্ত:
Stub: এটি ক্লায়েন্টের জন্য একটি লোকাল অবজেক্ট, যা রিমোট অবজেক্টের প্রতিনিধিত্ব করে। ক্লায়েন্ট মেথড কল করলে Stub সেই মেথডকে রিমোট সার্ভারে প্রেরণ করে।
Skeleton: Skeleton হলো রিমোট সার্ভারে অবস্থিত একটি উপাদান, যা Stub থেকে আসা মেথড কলকে গ্রহণ করে এবং রিমোট অবজেক্টে মেথডটি চালায়। (Java 2 থেকে Skeleton নিজে থেকে তৈরি হয় না, এটি স্বয়ংক্রিয়ভাবে RMI দ্বারা পরিচালিত হয়)।
RMI Registry: RMI Registry হলো একটি রেজিস্ট্রি সার্ভার, যা রিমোট অবজেক্টের নাম এবং তাদের অবস্থানের মধ্যে সম্পর্ক সংরক্ষণ করে। ক্লায়েন্টরা এই রেজিস্ট্রি সার্ভারের মাধ্যমে রিমোট অবজেক্টের রেফারেন্স পায়।
RMI এর কাজের প্রধান ধাপগুলো হলো:
নিচে একটি উদাহরণ দেখানো হলো, যেখানে আমরা RMI ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করব।
১. Remote Interface তৈরি করা
প্রথমে, আমরা একটি ইন্টারফেস তৈরি করব, যেখানে রিমোট মেথড ডিক্লেয়ার করা থাকবে। ইন্টারফেসটি java.rmi.Remote ইন্টারফেসটি ইমপ্লিমেন্ট করবে এবং প্রত্যেকটি মেথডে RemoteException থ্রো করতে হবে।
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}২. Remote Object (Server) ইমপ্লিমেন্ট করা
ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি রিমোট অবজেক্ট তৈরি করতে হবে, যেখানে sayHello মেথডটি ইমপ্লিমেন্ট করা হবে।
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
protected HelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "Hello from the remote server!";
}
}৩. Server তৈরি করা
এখন আমরা সার্ভার কোড লিখব, যেখানে RMI Registry তে আমাদের রিমোট অবজেক্টকে bind করা হবে।
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
// রিমোট অবজেক্ট তৈরি করা
HelloImpl obj = new HelloImpl();
// RMI Registry এ রিমোট অবজেক্ট bind করা
Registry registry = LocateRegistry.createRegistry(1099); // Default port 1099
registry.bind("Hello", obj);
System.out.println("Server is ready.");
} catch (Exception e) {
System.out.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}৪. Client তৈরি করা
এখন আমরা ক্লায়েন্ট কোড লিখব, যেখানে রিমোট অবজেক্টকে lookup করা হবে এবং রিমোট মেথড কল করা হবে।
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");
// রিমোট অবজেক্টকে খুঁজে বের করা
Hello stub = (Hello) registry.lookup("Hello");
// রিমোট মেথড কল করা
String response = stub.sayHello();
System.out.println("Response from server: " + response);
} catch (Exception e) {
System.out.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}ধাপ ১: RMI স্টাব জেনারেট করা
RMI এর জন্য stub এবং skeleton জেনারেট করা দরকার ছিল পুরোনো ভার্সনে, কিন্তু Java 5 থেকে এটি অটোমেটিক তৈরি হয়। এজন্য আপনাকে অতিরিক্ত কিছু করতে হবে না। শুধু javac দিয়ে সার্ভার এবং ক্লায়েন্ট কম্পাইল করুন।
ধাপ ২: Server চালু করা
java Serverধাপ ৩: Client চালু করা
java Clientআউটপুট:
Server is ready.
Response from server: Hello from the remote server!Java RMI একটি শক্তিশালী এবং কার্যকর টুল, যা distributed computing এর মাধ্যমে Java প্রোগ্রামের রিমোট মেথড কল করতে দেয়। RMI ডেভেলপারদের জন্য রিমোট অবজেক্ট এবং মেথড ব্যবহার করা সহজ করে তোলে এবং এর মাধ্যমে সার্ভার ও ক্লায়েন্ট অ্যাপ্লিকেশন সহজেই তৈরি করা যায়।
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ
Are you sure to start over?