Serialization হলো জাভার একটি প্রক্রিয়া, যেখানে একটি অবজেক্টের অবস্থা (state) একটি স্ট্রিমে রূপান্তর করা হয়, যা পরবর্তীতে নেটওয়ার্কের মাধ্যমে প্রেরণ করা বা ফাইল সিস্টেমে সংরক্ষণ করা যায়। RMI (Remote Method Invocation)-এ, Serialization ব্যবহৃত হয় রিমোট অবজেক্টের ডেটা ক্লায়েন্ট এবং সার্ভারের মধ্যে আদান-প্রদান করার জন্য।
Serialization এর প্রয়োজনীয়তা RMI তে
- Remote Communication:
- ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা প্রেরণের জন্য Serialization প্রয়োজন হয়।
- Object Passing:
- রিমোট মেথডের প্যারামিটার এবং রিটার্ন ভ্যালুকে serialize এবং deserialize করা হয়।
- Persistent Storage:
- RMI-তে কোনো অবজেক্টের অবস্থা সংরক্ষণ করতে Serialization ব্যবহৃত হয়।
Serialization এর প্রক্রিয়া
Serializableইন্টারফেস:- অবজেক্ট serialize করতে হলে ক্লাসটিকে
java.io.Serializableইন্টারফেস ইমপ্লিমেন্ট করতে হয়।
- অবজেক্ট serialize করতে হলে ক্লাসটিকে
- Object Serialization:
ObjectOutputStreamব্যবহার করে অবজেক্ট serialize করা হয়।
- Object Deserialization:
ObjectInputStreamব্যবহার করে অবজেক্ট deserialize করা হয়।
RMI এবং Serialization: উদাহরণ
1. Remote Interface তৈরি করা
import java.rmi.Remote;
import java.rmi.RemoteException;
// Remote Interface
public interface StudentService extends Remote {
String registerStudent(Student student) throws RemoteException;
}
2. Serializable ক্লাস তৈরি করা
import java.io.Serializable;
// Serializable Class
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int rollNumber;
// Constructor
public Student(String name, int rollNumber) {
this.name = name;
this.rollNumber = rollNumber;
}
// Getters
public String getName() {
return name;
}
public int getRollNumber() {
return rollNumber;
}
}
3. Remote Object Implementation
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
// Remote Object Implementation
public class StudentServiceImpl extends UnicastRemoteObject implements StudentService {
public StudentServiceImpl() throws RemoteException {
super();
}
@Override
public String registerStudent(Student student) throws RemoteException {
System.out.println("Student Registered: " + student.getName() + ", Roll: " + student.getRollNumber());
return "Student " + student.getName() + " registered successfully!";
}
}
4. Server: Remote Object Bind করা
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
// Create Remote Object
StudentServiceImpl studentService = new StudentServiceImpl();
// Start RMI Registry
Registry registry = LocateRegistry.createRegistry(1099);
// Bind Remote Object
registry.bind("StudentService", studentService);
System.out.println("RMI Server is running...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. Client: Serializable Object পাঠানো
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
public static void main(String[] args) {
try {
// Locate RMI Registry
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
// Lookup Remote Object
StudentService studentService = (StudentService) registry.lookup("StudentService");
// Create Serializable Object
Student student = new Student("John Doe", 101);
// Call Remote Method
String response = studentService.registerStudent(student);
System.out.println("Response from Server: " + response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Serialization এর কাজের ধাপ
- Serialization (Client Side):
- ক্লায়েন্ট
Studentঅবজেক্ট তৈরি করে। - অবজেক্টটি serialize হয়ে নেটওয়ার্কের মাধ্যমে সার্ভারে প্রেরিত হয়।
- ক্লায়েন্ট
- Deserialization (Server Side):
- সার্ভার প্রাপ্ত ডেটাকে deserialize করে
Studentঅবজেক্টে রূপান্তরিত করে। - রিমোট মেথড প্রক্রিয়াটি চালায় এবং ফলাফল প্রদান করে।
- সার্ভার প্রাপ্ত ডেটাকে deserialize করে
Serialization এর সুবিধা
- Distributed Communication:
- ডেটা বিনিময়ের মাধ্যমে ক্লায়েন্ট এবং সার্ভার সহজে যোগাযোগ করতে পারে।
- Object Persistence:
- অবজেক্টের অবস্থা সংরক্ষণ করা যায়।
- Platform Independence:
- Serialization প্ল্যাটফর্ম নিরপেক্ষ হওয়ায় এটি বিভিন্ন পরিবেশে কাজ করে।
Serialization সম্পর্কিত কিছু সীমাবদ্ধতা
- Security Concerns:
- Untrusted ডেটা deserialize করা ঝুঁকিপূর্ণ হতে পারে।
- Performance Overhead:
- Serialization এবং Deserialization প্রক্রিয়াটি কম সময় দক্ষ।
কোড কম্পাইল এবং চালানোর ধাপ
কম্পাইল করা:
javac *.javaRMI Registry চালানো:
rmiregistry 1099Server চালানো:
java ServerClient চালানো:
java Client
Serialization RMI-তে রিমোট অবজেক্টের ডেটা আদান-প্রদান এবং মেথড কলের জন্য অপরিহার্য। উদাহরণটি দেখায় কীভাবে একটি Serializable অবজেক্ট (যেমন Student) তৈরি এবং রিমোট মেথডে ব্যবহার করা যায়। এটি ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের ডেটা হ্যান্ডলিং ক্ষমতাকে উন্নত করে।
Read more