Object Serialization এবং RMI তে Object Transfer

Parameters Passing in RMI - জাভা আরএমআই (Java RMI) - Java Technologies

305

RMI-তে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা পাঠানোর জন্য Object Serialization একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি একটি প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টকে এমন ফরম্যাটে রূপান্তর করা হয় যা নেটওয়ার্কের মাধ্যমে স্থানান্তরযোগ্য এবং পরবর্তীতে পুনরায় ডি-সিরিয়ালাইজ করা যায়।


Object Serialization কী?

Serialization হলো একটি প্রক্রিয়া, যার মাধ্যমে Java অবজেক্টকে byte stream এ রূপান্তর করা হয়। এটি পরবর্তীতে ফাইল, ডেটাবেস, বা নেটওয়ার্কের মাধ্যমে স্থানান্তরের জন্য ব্যবহৃত হয়।

Deserialization হলো বিপরীত প্রক্রিয়া, যা byte stream থেকে অবজেক্ট পুনরুদ্ধার করে।

Serialization এর ব্যবহার:

  1. RMI-তে Remote Object Transfer
  2. Persistent Data Storage (অবজেক্ট ফাইল বা ডেটাবেসে সংরক্ষণ)।
  3. Network Communication

RMI-তে Object Transfer

RMI-তে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের সময়, Serializable অবজেক্টগুলো নেটওয়ার্কের মাধ্যমে পাঠানো হয়।

Key Concepts:

  1. Serializable Interface:
    • যে কোনো অবজেক্টকে Serialization করতে হলে এটি java.io.Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।
    • এই ইন্টারফেস কোনো মেথড ডিফাইন করে না (Marker Interface)।
  2. Object Passing Mechanisms:
    • By Value: ক্লায়েন্ট ও সার্ভারের মধ্যে অবজেক্টের একটি কপি পাঠানো হয়।
    • By Reference: Remote Object এর রেফারেন্স পাঠানো হয়, যা ক্লায়েন্ট রিমোটলি অ্যাক্সেস করতে পারে।

Serialization উদাহরণ

1. Serializable ক্লাস তৈরি করা

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1L; // Unique ID for Serialization
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }

    // Getters and Setters
}

2. Remote Interface তৈরি করা

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface PersonService extends Remote {
    String savePerson(Person person) throws RemoteException;
    Person getPerson() throws RemoteException;
}

3. Remote Object Implementation

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

public class PersonServiceImpl extends UnicastRemoteObject implements PersonService {
    private Person person;

    protected PersonServiceImpl() throws RemoteException {
        super();
    }

    @Override
    public String savePerson(Person person) throws RemoteException {
        this.person = person;
        return "Person saved: " + person;
    }

    @Override
    public Person getPerson() throws RemoteException {
        return this.person;
    }
}

4. Server Class

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {
    public static void main(String[] args) {
        try {
            PersonService personService = new PersonServiceImpl();
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("PersonService", personService);
            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. 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);
            PersonService personService = (PersonService) registry.lookup("PersonService");

            // Sending a serialized object
            Person person = new Person("John Doe", 30);
            String response = personService.savePerson(person);
            System.out.println(response);

            // Retrieving the object
            Person retrievedPerson = personService.getPerson();
            System.out.println("Retrieved Person: " + retrievedPerson);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Serialization-এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  1. Simple Object Transfer:
    • অবজেক্টকে সহজেই নেটওয়ার্কে পাঠানো যায়।
  2. Cross-Network Compatibility:
    • একবার অবজেক্ট সিরিয়ালাইজ করলে, এটি বিভিন্ন ডিভাইস বা প্ল্যাটফর্মে পাঠানো যায়।
  3. Persistent Storage:
    • অবজেক্ট ফাইল বা ডেটাবেসে সংরক্ষণ করা যায়।

সীমাবদ্ধতা:

  1. Non-Serializable Fields:
    • transient বা static ফিল্ডগুলো সিরিয়ালাইজ হয় না।
  2. Performance Overhead:
    • সিরিয়ালাইজ এবং ডি-সিরিয়ালাইজ করতে বেশি সময় লাগে।
  3. Versioning Issue:
    • ক্লাসের সংস্করণ পরিবর্তন করলে InvalidClassException হতে পারে যদি serialVersionUID ঠিকমতো সেট না থাকে।

RMI-তে Serialization এবং Object Transfer এর গুরুত্বপূর্ণ বিষয়সমূহ

  1. Serializable Interface:
    • যেসব ক্লাস RMI-তে স্থানান্তরিত হবে তাদের অবশ্যই Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।
  2. Transient Keyword:
    • কোন ফিল্ড যদি স্থানান্তর না করতে হয়, তবে সেটিকে transient ডিক্লেয়ার করতে হবে।
  3. serialVersionUID:
    • সিরিয়ালাইজড অবজেক্টের সংস্করণ ট্র্যাক করার জন্য serialVersionUID ব্যবহার করা হয়।

Serialization ব্যবহার করে RMI Communication এর সারণি

উদাহরণSerialization Typeব্যাখ্যা
Remote ObjectReferenceক্লায়েন্ট Remote Object এর রেফারেন্স পায় এবং মেথড কল করে।
Custom ObjectValueঅবজেক্টের কপি পাঠানো হয় এবং নেটওয়ার্কের মাধ্যমে স্থানান্তরিত হয়।

RMI-তে Object Serialization এর মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে জটিল ডেটা সহজেই স্থানান্তর করা যায়। এটি জাভা ভিত্তিক ডিস্ট্রিবিউটেড সিস্টেম গঠনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। Serialization ব্যবহারের সময় পারফরম্যান্স এবং নিরাপত্তা বিষয়েও সতর্ক থাকা জরুরি।

Content added By
Promotion

Are you sure to start over?

Loading...