RMI Client তৈরি করা

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

340

Java RMI Client একটি ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের অংশ, যা RMI সার্ভার থেকে রিমোট মেথড কল করতে ব্যবহৃত হয়। RMI Client সাধারণত একটি Remote Interface-এর মাধ্যমে RMI সার্ভারে থাকা রিমোট অবজেক্টের মেথড কল করে।


RMI Client তৈরির ধাপসমূহ

1. প্রয়োজনীয় জিনিসপত্র

  • RMI সার্ভারে থাকা Remote Interface এর জারিত ক্লাস।
  • সার্ভারের সাথে সংযোগ স্থাপন করার জন্য RMI রেজিস্ট্রির লোকেশন।
  • প্রয়োজনীয় স্টাব ফাইল (অথবা ডাইনামিক প্রক্সি ব্যবহার করা হলে, এটি অপ্রয়োজনীয়)।

2. RMI Client এর স্টেপ-বাই-স্টেপ গাইড

2.1 Remote Interface ডিফাইন করা

RMI Client রিমোট মেথড কল করার জন্য একটি Remote Interface প্রয়োজন।

উদাহরণ: Remote Interface (MyRemoteInterface)

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

// Remote Interface ডিফাইন
public interface MyRemoteInterface extends Remote {
    String sayHello(String name) throws RemoteException;
}
2.2 RMI Client কোড লেখা

RMI Client সার্ভারের রিমোট অবজেক্ট খুঁজে পায় এবং সেই অবজেক্টের মেথড কল করে।

উদাহরণ: RMI Client কোড

import java.rmi.Naming;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // RMI Registry থেকে রিমোট অবজেক্ট খুঁজে বের করা
            String rmiURL = "rmi://localhost:1099/MyRemoteService";
            MyRemoteInterface remoteObject = (MyRemoteInterface) Naming.lookup(rmiURL);

            // রিমোট মেথড কল
            String response = remoteObject.sayHello("John");
            System.out.println("Response from Server: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. RMI Client চালানোর জন্য প্রয়োজনীয় জিনিস

3.1 RMI Registry চালু করা

RMI Client সার্ভারের সাথে সংযোগ স্থাপন করার জন্য RMI Registry চালু থাকতে হবে।

rmiregistry

3.2 RMI Server চালু করা

RMI Client কাজ করার আগে সার্ভার চালু করে নিতে হবে।


4. Client এর জন্য Key Classes এবং Methods

Class/Methodবিবরণ
Naming.lookup()RMI Registry থেকে রিমোট অবজেক্ট রিটার্ন করে।
Remote Interfaceরিমোট মেথডগুলো ডিক্লেয়ার করে, যা ক্লায়েন্ট ব্যবহার করবে।
SecurityManagerনিরাপত্তার জন্য (জরুরি নয় তবে পুরোনো ভার্সনে দরকার হতে পারে)।

5. RMI Client চালানোর ধাপসমূহ

  1. Remote Interface কম্পাইল করা:

    javac MyRemoteInterface.java
    
  2. Client কোড কম্পাইল করা:

    javac RMIClient.java
    
  3. RMI Registry চালু করা:

    rmiregistry
    
  4. Server চালু করে নিশ্চিত হওয়া যে এটি ঠিকমতো কাজ করছে।
  5. Client চালানো:

    java RMIClient
    

6. Client Output

যদি সবকিছু সঠিকভাবে সেটআপ করা থাকে, তাহলে ক্লায়েন্ট সার্ভার থেকে সঠিক রেসপন্স পাবে। উদাহরণ Output:

Response from Server: Hello, John

7. কিছু Best Practices

  • Exception Handling: RMI মেথড কল করার সময় RemoteException হ্যান্ডেল করা উচিত।
  • Dynamic IP বা Hostname ব্যবহার করা: localhost এর পরিবর্তে সঠিক সার্ভার IP বা Hostname ব্যবহার করুন।
  • Security: SSL/TLS সংযোগ ব্যবহার করুন, বিশেষ করে প্রোডাকশনে।

Java RMI Client মূলত RMI Registry থেকে সার্ভারের রিমোট অবজেক্ট খুঁজে বের করে এবং সেই অবজেক্টের রিমোট মেথড কল করে। এই পদ্ধতি ডিস্ট্রিবিউটেড সিস্টেমে সহজেই ক্লায়েন্ট-সার্ভার কমিউনিকেশন নিশ্চিত করে। সঠিক সেটআপ এবং কনফিগারেশন নিশ্চিত করলে RMI Client নির্ভরযোগ্যভাবে কাজ করবে।

Content added By

Java RMI (Remote Method Invocation) প্রযুক্তিতে, RMI Client হলো সেই উপাদান যা দূরবর্তী সার্ভারে সংরক্ষিত অবজেক্টের মেথড কল করতে ব্যবহৃত হয়। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ তৈরি করে এবং ক্লায়েন্টকে সার্ভারের রিমোট অবজেক্টের মেথড অ্যাক্সেস করতে দেয়।


RMI Client এর কাজ

  1. RMI Registry থেকে রিমোট অবজেক্ট লুকআপ করা:
    • RMI Client, RMI Registry থেকে Naming.lookup() ব্যবহার করে রিমোট অবজেক্ট রিট্রিভ করে।
  2. রিমোট মেথড কল করা:
    • লুকআপ করা অবজেক্টের মাধ্যমে সার্ভারের মেথড কল করা হয়।
  3. ডাটা রিসিভ এবং রিটার্ন করা:
    • সার্ভার থেকে রিমোট মেথডের রেসপন্স রিসিভ করে এবং প্রয়োজনে ক্লায়েন্টে রিটার্ন করে।
  4. নেটওয়ার্কিং জটিলতা লুকানো:
    • RMI Client স্বয়ংক্রিয়ভাবে নেটওয়ার্ক প্রোটোকলের বিবরণ পরিচালনা করে এবং ক্লায়েন্টকে সহজ ইন্টারফেস প্রদান করে।
  5. ব্যবহারকারীর জন্য সহজতর ইন্টারফেস প্রদান:
    • ক্লায়েন্ট ব্যবহারকারীর জন্য এমনভাবে ডিজাইন করা হয় যাতে মেথড কল করা স্থানীয় মেথড কলের মতো সহজ হয়।

RMI Client এর প্রয়োজনীয়তা

  1. দূরবর্তী কমিউনিকেশন:
    • ক্লায়েন্ট সিস্টেম থেকে সার্ভারের রিমোট অবজেক্টের মেথড অ্যাক্সেস করতে হলে RMI Client প্রয়োজন।
  2. বিভিন্ন সিস্টেমের মধ্যে ইন্টিগ্রেশন:
    • ক্লায়েন্ট এবং সার্ভার বিভিন্ন মেশিনে চলতে পারে। এই সংযোগের জন্য RMI Client ব্যবহৃত হয়।
  3. ব্যবহারকারীকে দূরবর্তী সেবা সরবরাহ করা:
    • RMI Client, ব্যবহারকারীর অনুরোধ অনুযায়ী সার্ভার থেকে ডেটা রিট্রিভ করে।
  4. নেটওয়ার্ক ওভারহেড হ্রাস:
    • RMI Client স্বয়ংক্রিয়ভাবে নেটওয়ার্ক-লেভেলের জটিলতা হ্যান্ডেল করে, যা উন্নত কর্মক্ষমতা নিশ্চিত করে।
  5. অবজেক্ট-অরিয়েন্টেড সুবিধা:
    • RMI Client, সার্ভারের অবজেক্ট-অরিয়েন্টেড মেথড কল করতে ব্যবহৃত হয়, যা সহজ, পুনঃব্যবহারযোগ্য এবং কার্যকর।

RMI Client এর উদাহরণ

RMI Client কোড

import java.rmi.Naming;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // RMI Registry থেকে রিমোট অবজেক্ট লুকআপ করা
            Calculator calculator = (Calculator) Naming.lookup("rmi://localhost:1099/CalculatorService");

            // রিমোট মেথড কল করা
            int sum = calculator.add(10, 20);
            int difference = calculator.subtract(30, 15);

            // রেসাল্ট প্রিন্ট করা
            System.out.println("Sum: " + sum);
            System.out.println("Difference: " + difference);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Client কাজ করার ধাপ

  1. RMI Registry থেকে অবজেক্ট লুকআপ:
    • Naming.lookup() ব্যবহার করে সার্ভারের রিমোট অবজেক্ট অ্যাক্সেস করুন।
    • উদাহরণ:

      Calculator calculator = (Calculator) Naming.lookup("rmi://localhost:1099/CalculatorService");
      
  2. রিমোট মেথড কল:
    • অবজেক্ট ব্যবহার করে মেথড কল করুন।
    • উদাহরণ:

      int sum = calculator.add(10, 20);
      
  3. রেসপন্স রিসিভ এবং প্রসেস করা:
    • সার্ভারের রেসপন্স ব্যবহার করে ক্লায়েন্ট সাইডে ফলাফল প্রিন্ট করুন।
  4. Exception Handling:
    • RMI-তে নেটওয়ার্ক এবং রিমোট অবজেক্ট সম্পর্কিত সমস্যার জন্য RemoteException হ্যান্ডেল করুন।

RMI Client তৈরির জন্য প্রধান ধাপসমূহ

  1. RMI Registry Address এবং Object Name জানুন।
    • উদাহরণ: "rmi://localhost:1099/CalculatorService"
  2. Remote Interface ব্যবহার করুন:
    • রিমোট অবজেক্ট লুকআপ করার পরে ক্লায়েন্টে Remote Interface ব্যবহার করুন।
  3. Naming.lookup() মেথড ব্যবহার করুন:
    • RMI Registry থেকে অবজেক্ট পেতে এই মেথড ব্যবহার করা হয়।
  4. রিমোট মেথড কল করুন:
    • রিমোট অবজেক্ট থেকে সার্ভারের মেথড কল করতে পারবেন।
  5. Exception হ্যান্ডেলিং:
    • RemoteException এবং অন্যান্য RMI সম্পর্কিত এক্সেপশন হ্যান্ডেল করতে হবে।

RMI Client এর মাধ্যমে ক্লায়েন্ট সিস্টেম থেকে সরাসরি সার্ভারের রিমোট মেথড অ্যাক্সেস করা যায়। এটি নেটওয়ার্কিং জটিলতা লুকিয়ে ব্যবহারকারীকে সহজ ইন্টারফেস সরবরাহ করে। RMI Client মূলত ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি এবং পরিচালনার জন্য অপরিহার্য।

Content added By

Java RMI Registry হলো একটি ডিরেক্টরি সার্ভিস যা Remote Objects সংরক্ষণ করে এবং ক্লায়েন্টদের সেগুলো খুঁজে বের করতে সাহায্য করে। ক্লায়েন্ট অ্যাপ্লিকেশনগুলো RMI Registry ব্যবহার করে সার্ভারে থাকা Remote Object এর রেফারেন্স পায় এবং তাদের মেথড কল করতে সক্ষম হয়।


RMI Registry কীভাবে কাজ করে?

  1. Server Side:
    • Remote Object তৈরি করা হয়।
    • RMI Registry-তে Remote Object রেজিস্টার করা হয় একটি নির্দিষ্ট নাম (binding name) সহ।
    • উদাহরণ: registry.rebind("RemoteObjectName", remoteObjectInstance);
  2. Client Side:
    • ক্লায়েন্ট RMI Registry-তে সংযোগ স্থাপন করে।
    • নির্দিষ্ট নাম ব্যবহার করে Remote Object খুঁজে বের করে (lookup)।
    • Remote Object এর মেথড কল করে।

RMI Registry থেকে Remote Object খুঁজে বের করার ধাপ

Step 1: RMI Registry চালু করা

  • RMI Registry চালু করতে rmiregistry কমান্ড ব্যবহার করতে হবে।
  • টার্মিনালে নিচের কমান্ড চালান:

    rmiregistry
    

    এটি ডিফল্টভাবে পোর্ট 1099-এ RMI Registry চালু করবে।

    Note: rmiregistry কমান্ড CLASSPATH সেটআপের উপর নির্ভর করে।


Step 2: RMI Registry-তে Remote Object রেজিস্টার করা (Server Side)

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

public class Server {
    public static void main(String[] args) {
        try {
            // Remote Object তৈরি
            CalculatorImpl calculator = new CalculatorImpl();

            // RMI Registry তৈরি এবং Remote Object রেজিস্টার করা
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("CalculatorService", calculator);

            System.out.println("Server is ready.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Key Points:

  1. LocateRegistry.createRegistry(1099):
    • সার্ভারে RMI Registry তৈরি করে।
  2. registry.rebind("CalculatorService", calculator):
    • Remote Object calculator-কে RMI Registry-তে CalculatorService নামে রেজিস্টার করে।

Step 3: RMI Registry থেকে Remote Object খুঁজে বের করা (Client Side)

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", 1099);

            // Remote Object খুঁজে বের করা
            Calculator calculator = (Calculator) registry.lookup("CalculatorService");

            // Remote Method কল করা
            int result = calculator.add(10, 20);
            System.out.println("Addition Result: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Key Points:

  1. LocateRegistry.getRegistry("localhost", 1099):
    • localhost এবং পোর্ট 1099 ব্যবহার করে RMI Registry-তে সংযোগ স্থাপন করে।
  2. registry.lookup("CalculatorService"):
    • CalculatorService নাম ব্যবহার করে Remote Object খুঁজে বের করে।
  3. Remote Method Invocation:
    • calculator.add(10, 20) কল করে সার্ভারের Remote Method চালানো হয়।

কোডের পূর্ণ উদাহরণ

1. Remote Interface

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

public interface Calculator extends Remote {
    int add(int a, int b) throws RemoteException;
    int subtract(int a, int b) throws RemoteException;
}

2. Remote Object Implementation

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

public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
    protected CalculatorImpl() throws RemoteException {
        super();
    }

    @Override
    public int add(int a, int b) throws RemoteException {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) throws RemoteException {
        return a - b;
    }
}

3. Server Class

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

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

4. 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);
            Calculator calculator = (Calculator) registry.lookup("CalculatorService");
            int result = calculator.add(10, 20);
            System.out.println("Addition Result: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Registry সংক্রান্ত গুরুত্বপূর্ণ বিষয়

  1. পোর্ট নম্বর ডিফল্ট:
    • RMI Registry সাধারণত পোর্ট 1099-এ চালু হয়। তবে এটি পরিবর্তন করা যায়।
  2. মাল্টিপল Remote Object রেজিস্ট্রেশন:
    • একই RMI Registry-তে একাধিক Remote Object রেজিস্টার করা যায়।
    • উদাহরণ:

      registry.rebind("Service1", object1);
      registry.rebind("Service2", object2);
      
  3. ব্যতিক্রম (Exceptions):
    • NotBoundException: নির্দিষ্ট নামের Remote Object যদি Registry-তে না থাকে।
    • AccessException: অবৈধ অ্যাক্সেসের কারণে ত্রুটি।

RMI Registry একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা Remote Object গুলো সংরক্ষণ এবং খুঁজে বের করার সুবিধা প্রদান করে। ক্লায়েন্ট registry.lookup ব্যবহার করে Remote Object এর রেফারেন্স পায় এবং সার্ভারের মেথডগুলো কল করে। RMI Registry এর সঠিক ব্যবহার Distributed Application তৈরিতে সহজতা ও কার্যকারিতা বৃদ্ধি করে।

Content added By

Java RMI (Remote Method Invocation) এর মাধ্যমে ক্লায়েন্ট সরাসরি রিমোট সার্ভারে সংরক্ষিত মেথড কল করতে পারে এবং সেখান থেকে রিটার্ন হওয়া ফলাফল সংগ্রহ করতে পারে। নিচে ধাপে ধাপে প্রক্রিয়াটি আলোচনা করা হয়েছে।


Remote Method Call এর ধাপ

  1. RMI Registry থেকে Remote Object খুঁজে বের করা:
    ক্লায়েন্ট LocateRegistry.getRegistry এবং lookup মেথডের সাহায্যে রিমোট সার্ভারে অবস্থিত অবজেক্ট অ্যাক্সেস করে।
  2. Remote Method কল করা:
    Remote Object এর মেথড সরাসরি ক্লায়েন্ট থেকে কল করা হয়।
  3. ফলাফল সংগ্রহ করা:
    Remote Method থেকে প্রাপ্ত রিটার্ন ভ্যালু ক্লায়েন্ট প্রোগ্রামে ব্যবহার করা হয়।

সম্পূর্ণ উদাহরণ: Remote Method Call এবং ফলাফল সংগ্রহ

ধাপ ১: Remote Interface

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

// Remote Interface
public interface Calculator extends Remote {
    int add(int a, int b) throws RemoteException;
    int subtract(int a, int b) throws RemoteException;
    int multiply(int a, int b) throws RemoteException;
    double divide(int a, int b) throws RemoteException;
}

ধাপ ২: Remote Object (Implementation Class)

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

// Remote Object Implementation
public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
    protected CalculatorImpl() throws RemoteException {
        super();
    }

    @Override
    public int add(int a, int b) throws RemoteException {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) throws RemoteException {
        return a - b;
    }

    @Override
    public int multiply(int a, int b) throws RemoteException {
        return a * b;
    }

    @Override
    public double divide(int a, int b) throws RemoteException {
        if (b == 0) {
            throw new ArithmeticException("Division by zero is not allowed.");
        }
        return (double) a / b;
    }
}

ধাপ ৩: RMI Server

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

// RMI Server
public class Server {
    public static void main(String[] args) {
        try {
            // Create and export the remote object
            Calculator calculator = new CalculatorImpl();

            // Bind the remote object to the registry
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("CalculatorService", calculator);

            System.out.println("Server is running and CalculatorService is ready...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ধাপ ৪: RMI Client

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

// RMI Client
public class Client {
    public static void main(String[] args) {
        try {
            // Locate the RMI registry
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);

            // Lookup the remote object
            Calculator calculator = (Calculator) registry.lookup("CalculatorService");

            // Call remote methods and collect results
            System.out.println("Addition (5 + 3): " + calculator.add(5, 3));
            System.out.println("Subtraction (10 - 4): " + calculator.subtract(10, 4));
            System.out.println("Multiplication (6 * 7): " + calculator.multiply(6, 7));
            System.out.println("Division (20 / 5): " + calculator.divide(20, 5));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Remote Method Call এবং ফলাফল বিশ্লেষণ

  1. Remote Object Registry থেকে প্রাপ্ত:

    Registry registry = LocateRegistry.getRegistry("localhost", 1099);
    Calculator calculator = (Calculator) registry.lookup("CalculatorService");
    
  2. Remote Method কল এবং রিটার্ন ভ্যালু সংগ্রহ:
    • উদাহরণ:

      int result = calculator.add(5, 3);  // Remote Method Call
      System.out.println("Addition Result: " + result);
      
  3. Exception Handling:
    • RemoteException: নেটওয়ার্ক বা সার্ভার সমস্যা হলে থ্রো হয়।
    • ArithmeticException: মেথডের লজিক অনুযায়ী ভাগফল শূন্য দিয়ে ভাগ করার চেষ্টা করলে থ্রো হয়।

RMI অ্যাপ্লিকেশন রান করার ধাপ

  1. .java ফাইল কম্পাইল করুন:

    javac *.java
    
  2. RMI Server চালু করুন:

    java Server
    
  3. RMI Client চালু করুন:

    java Client
    

ফলাফল উদাহরণ

যদি ক্লায়েন্ট 5 + 3 এর জন্য add মেথড কল করে, সার্ভারের মাধ্যমে ফলাফল হবে 8, এবং ক্লায়েন্টের কনসোলে নিচের আউটপুট দেখা যাবে:

Addition (5 + 3): 8
Subtraction (10 - 4): 6
Multiplication (6 * 7): 42
Division (20 / 5): 4.0

  • Remote Method Call: RMI ক্লায়েন্ট সরাসরি রিমোট সার্ভারের মেথড কল করতে পারে।
  • ফলাফল সংগ্রহ: রিমোট মেথড থেকে রিটার্ন হওয়া ভ্যালু ক্লায়েন্ট সাইডে ব্যবহার করা যায়।
  • Distributed Computing: RMI প্রযুক্তি সহজে ক্লায়েন্ট-সার্ভার যোগাযোগ এবং ডিস্ট্রিবিউটেড সিস্টেম ইমপ্লিমেন্টেশনে সাহায্য করে।
Content added By

Java RMI (Remote Method Invocation) এর মাধ্যমে ক্লায়েন্ট প্রোগ্রাম রিমোট সার্ভারে অবস্থিত অবজেক্টের মেথড কল করতে পারে। ক্লায়েন্ট মূলত RMI Registry থেকে রিমোট অবজেক্টের রেফারেন্স পায় এবং সেই রেফারেন্স ব্যবহার করে মেথড কল করে।


RMI Client তৈরির ধাপসমূহ

ধাপ ১: RMI Registry-তে রিমোট অবজেক্ট রেজিস্টার করা

RMI সার্ভারের মাধ্যমে রিমোট অবজেক্টটি RMI Registry-তে রেজিস্টার করতে হবে, যাতে ক্লায়েন্ট এটি অ্যাক্সেস করতে পারে।

ধাপ ২: RMI Client তৈরি করা

ক্লায়েন্ট প্রোগ্রাম তৈরি করতে হবে, যা RMI Registry থেকে রিমোট অবজেক্টের রেফারেন্স পাবে।

ধাপ ৩: Remote Method কল করা

রিমোট অবজেক্টের রেফারেন্স ব্যবহার করে মেথডগুলো কল করা হবে।


RMI Client উদাহরণ

ধরা যাক, আমরা একটি Calculator সার্ভিস তৈরি করেছি যা ক্লায়েন্ট থেকে যোগফল, বিয়োগ, গুণ এবং ভাগের কাজ করতে পারে। নিচে RMI Client তৈরি করার উদাহরণ দেখানো হলো।


Step 1: Remote Interface

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

// Remote Interface
public interface Calculator extends Remote {
    int add(int a, int b) throws RemoteException;
    int subtract(int a, int b) throws RemoteException;
    int multiply(int a, int b) throws RemoteException;
    double divide(int a, int b) throws RemoteException;
}

Step 2: Remote Object Implementation

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

// Implementation of Remote Interface
public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
    public CalculatorImpl() throws RemoteException {
        super();
    }

    @Override
    public int add(int a, int b) throws RemoteException {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) throws RemoteException {
        return a - b;
    }

    @Override
    public int multiply(int a, int b) throws RemoteException {
        return a * b;
    }

    @Override
    public double divide(int a, int b) throws RemoteException {
        if (b == 0) throw new ArithmeticException("Division by zero is not allowed.");
        return (double) a / b;
    }
}

Step 3: RMI Server

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

public class RMIServer {
    public static void main(String[] args) {
        try {
            // Create and bind the remote object
            Calculator calculator = new CalculatorImpl();
            Registry registry = LocateRegistry.createRegistry(1099); // Default RMI port
            registry.rebind("CalculatorService", calculator);

            System.out.println("RMI Server is ready and running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Step 4: RMI Client

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

public class RMIClient {
    public static void main(String[] args) {
        try {
            // Locate the RMI Registry
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);

            // Lookup the remote object
            Calculator calculator = (Calculator) registry.lookup("CalculatorService");

            // Perform remote method calls
            System.out.println("Addition: " + calculator.add(10, 5));
            System.out.println("Subtraction: " + calculator.subtract(10, 5));
            System.out.println("Multiplication: " + calculator.multiply(10, 5));
            System.out.println("Division: " + calculator.divide(10, 5));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Step 5: Compile এবং Run করার নির্দেশনা

1. সমস্ত ফাইল কম্পাইল করুন:

javac *.java

2. RMI Server চালু করুন:

java RMIServer

3. RMI Client চালু করুন:

java RMIClient

আউটপুট (উদাহরণ)

RMI Client এর আউটপুট হতে পারে এরকম:

Addition: 15
Subtraction: 5
Multiplication: 50
Division: 2.0

RMI Client এর গুরুত্বপূর্ণ পয়েন্টসমূহ

  1. RMI Registry থেকে রিমোট অবজেক্ট খুঁজে বের করা:
    • LocateRegistry.getRegistry(host, port) ব্যবহার করা হয়।
  2. lookup মেথড ব্যবহার:
    • RMI Registry থেকে নির্দিষ্ট নামের রিমোট অবজেক্ট রেফারেন্স পাওয়ার জন্য।
  3. Remote Methods কল:
    • রিমোট অবজেক্টের উপর মেথড কল করার সময় RemoteException হ্যান্ডেল করতে হয়।

এই উদাহরণটি RMI Client তৈরি এবং ব্যবহার সম্পর্কে একটি পরিষ্কার ধারণা প্রদান করে। Java RMI প্রযুক্তি ব্যবহার করে ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন সহজে তৈরি এবং পরিচালনা করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...