Java RMI (Remote Method Invocation) এর মাধ্যমে ক্লায়েন্ট অ্যাপ্লিকেশন সার্ভার সাইডে থাকা রিমোট মেথড কল করতে পারে। এটি একটি ডিস্ট্রিবিউটেড আর্কিটেকচার তৈরি করে যেখানে রিমোট অবজেক্ট মেথড ইন্টারঅ্যাকশন সম্ভব হয়।
Client-Side থেকে Server-Side Method Call করার ধাপসমূহ
Step 1: Remote Interface তৈরি করা
Remote মেথডের সংজ্ঞা Remote Interface-এ থাকে। এটি অবশ্যই java.rmi.Remote ইন্টারফেসটি এক্সটেন্ড করতে হবে এবং প্রতিটি মেথডে RemoteException থ্রো করতে হবে।
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemoteService extends Remote {
String sayHello(String name) throws RemoteException;
}
Step 2: Remote Object বাস্তবায়ন করা
Remote Object হলো Remote Interface এর ইমপ্লিমেন্টেশন। এটি UnicastRemoteObject এক্সটেন্ড করে এবং রিমোট মেথডগুলোর লজিক সরবরাহ করে।
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class MyRemoteServiceImpl extends UnicastRemoteObject implements MyRemoteService {
public MyRemoteServiceImpl() throws RemoteException {
super();
}
@Override
public String sayHello(String name) throws RemoteException {
return "Hello, " + name + "! Welcome to RMI.";
}
}
Step 3: RMI Server তৈরি করা
RMI Server Remote Object তৈরি করে এবং এটি RMI Registry তে নিবন্ধন করে।
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIServer {
public static void main(String[] args) {
try {
// Remote Object তৈরি করা
MyRemoteServiceImpl service = new MyRemoteServiceImpl();
// RMI Registry তৈরি করা
Registry registry = LocateRegistry.createRegistry(1099);
// Remote Object কে RMI Registry তে bind করা
registry.bind("MyService", service);
System.out.println("RMI Server is running...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Step 4: RMI Client তৈরি করা
RMI Client RMI Registry থেকে রিমোট অবজেক্ট খুঁজে পায় এবং রিমোট মেথড কল করে।
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIClient {
public static void main(String[] args) {
try {
// RMI Registry থেকে রিমোট অবজেক্ট খোঁজা
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
MyRemoteService service = (MyRemoteService) registry.lookup("MyService");
// রিমোট মেথড কল করা
String response = service.sayHello("Alice");
System.out.println("Server Response: " + response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client-Side থেকে Server-Side Method Call এর ব্যাখ্যা
- Registry.lookup():
ক্লায়েন্ট lookup() মেথড ব্যবহার করে রিমোট অবজেক্ট খুঁজে পায়। এটি RMI Registry থেকে নির্দিষ্ট নামের রিমোট অবজেক্ট রিটার্ন করে। - Remote Method Invocation:
ক্লায়েন্ট রিমোট অবজেক্টে মেথড কল করলে, RMI Stub রিমোট মেথড কলকে সিরিয়ালাইজ করে এবং সার্ভারে প্রেরণ করে। - Execution on Server:
সার্ভার প্রাপ্ত ডেটা ডেসিরিয়ালাইজ করে মেথড এক্সিকিউট করে এবং ফলাফল ক্লায়েন্টে ফেরত পাঠায়।
Client-Side এবং Server-Side এর মধ্যে যোগাযোগের প্রক্রিয়া
- Stub এবং Skeleton:
- Stub: ক্লায়েন্ট সাইডে রিমোট অবজেক্টের প্রতিনিধিত্ব করে।
- Skeleton: সার্ভার সাইডে রিমোট অবজেক্টের প্রতিনিধিত্ব করে (Java 2-এর পর Skeleton আর ব্যবহৃত হয় না)।
- Serialization and Deserialization:
- মেথড প্যারামিটার এবং রিটার্ন ভ্যালু serialize ও deserialize হয়।
- Transport Layer:
- RMI এর মাধ্যমে মেথড কলের ডেটা TCP/IP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রেরণ করা হয়।
উদাহরণ অনুযায়ী Output:
RMI Server is running...
Server Response: Hello, Alice! Welcome to RMI.
প্রয়োজনীয় বিষয়সমূহ
RMI Registry:
RMI Registry চালু করতে হবে।rmiregistry- Security Manager:
RMI অ্যাপ্লিকেশনে নিরাপত্তা নিশ্চিত করতে Security Manager ব্যবহার করা যেতে পারে। - Policy File:
যদি Security Manager ব্যবহার করা হয়, তবে একটি policy file প্রদান করতে হবে। - Firewall Configuration:
RMI ব্যবহারের জন্য নেটওয়ার্ক পোর্ট খুলে রাখতে হবে।
Java RMI ব্যবহার করে ক্লায়েন্ট অ্যাপ্লিকেশন সহজেই রিমোট সার্ভারে মেথড কল করতে পারে। RMI যোগাযোগের মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেম তৈরির জন্য এটি একটি শক্তিশালী টুল। Stub, RMI Registry, এবং Serialization এর মতো উপাদানগুলি সঠিকভাবে কনফিগার করে এই প্রক্রিয়া সফলভাবে সম্পন্ন করা যায়।
Read more