แอปพลิเคชัน Java RMI

ในการเขียนแอปพลิเคชัน RMI Java คุณจะต้องทำตามขั้นตอนด้านล่าง -

  • กำหนดอินเทอร์เฟซระยะไกล
  • พัฒนาคลาสการนำไปใช้งาน (วัตถุระยะไกล)
  • พัฒนาโปรแกรมเซิร์ฟเวอร์
  • พัฒนาโปรแกรมไคลเอนต์
  • รวบรวมแอปพลิเคชัน
  • ดำเนินการแอปพลิเคชัน

การกำหนดอินเตอร์เฟสระยะไกล

อินเทอร์เฟซระยะไกลให้คำอธิบายของวิธีการทั้งหมดของวัตถุระยะไกลเฉพาะ ไคลเอนต์สื่อสารกับอินเทอร์เฟซระยะไกลนี้

ในการสร้างอินเทอร์เฟซระยะไกล -

  • สร้างอินเทอร์เฟซที่ขยายอินเทอร์เฟซที่กำหนดไว้ล่วงหน้า Remote ซึ่งเป็นของแพ็คเกจ

  • ประกาศวิธีการทางธุรกิจทั้งหมดที่ไคลเอนต์สามารถเรียกใช้ได้ในอินเทอร์เฟซนี้

  • เนื่องจากมีโอกาสที่จะเกิดปัญหาเครือข่ายระหว่างการโทรระยะไกลข้อยกเว้นที่ชื่อ RemoteExceptionอาจเกิดขึ้น; โยนมัน

ต่อไปนี้เป็นตัวอย่างของอินเทอร์เฟซระยะไกล ที่นี่เราได้กำหนดอินเทอร์เฟซด้วยชื่อHello และมีวิธีการที่เรียกว่า printMsg().

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

// Creating Remote interface for our application 
public interface Hello extends Remote {  
   void printMsg() throws RemoteException;  
}

การพัฒนาคลาสการใช้งาน (วัตถุระยะไกล)

เราจำเป็นต้องใช้อินเทอร์เฟซระยะไกลที่สร้างขึ้นในขั้นตอนก่อนหน้านี้ (เราสามารถเขียนคลาสการใช้งานแยกกันหรือทำให้โปรแกรมเซิร์ฟเวอร์ใช้อินเทอร์เฟซนี้ได้โดยตรง)

เพื่อพัฒนาคลาสการใช้งาน -

  • ใช้อินเทอร์เฟซที่สร้างขึ้นในขั้นตอนก่อนหน้า
  • จัดเตรียมการนำไปใช้กับวิธีนามธรรมทั้งหมดของอินเทอร์เฟซระยะไกล

ต่อไปนี้เป็นคลาสการใช้งาน ที่นี่เราได้สร้างคลาสชื่อImplExample และใช้งานอินเทอร์เฟซ Hello สร้างขึ้นในขั้นตอนก่อนหน้าและมีให้ body สำหรับวิธีนี้ซึ่งพิมพ์ข้อความ

// Implementing the remote interface 
public class ImplExample implements Hello {  
   
   // Implementing the interface method 
   public void printMsg() {  
      System.out.println("This is an example RMI program");  
   }  
}

การพัฒนาโปรแกรมเซิร์ฟเวอร์

โปรแกรมเซิร์ฟเวอร์ RMI ควรใช้อินเทอร์เฟซระยะไกลหรือขยายคลาสการนำไปใช้งาน ที่นี่เราควรสร้างวัตถุระยะไกลและเชื่อมโยงกับไฟล์RMIregistry.

เพื่อพัฒนาโปรแกรมเซิร์ฟเวอร์ -

  • สร้างคลาสไคลเอนต์จากตำแหน่งที่คุณต้องการเรียกใช้วัตถุระยะไกล

  • Create a remote object โดยการสร้างอินสแตนซ์คลาสการใช้งานตามที่แสดงด้านล่าง

  • ส่งออกวัตถุระยะไกลโดยใช้วิธีการ exportObject() ของคลาสชื่อ UnicastRemoteObject ซึ่งเป็นของแพ็คเกจ java.rmi.server.

  • รับรีจิสทรี RMI โดยใช้ไฟล์ getRegistry() วิธีการของ LocateRegistry คลาสซึ่งเป็นของแพ็คเกจ java.rmi.registry.

  • ผูกวัตถุระยะไกลที่สร้างขึ้นกับรีจิสทรีโดยใช้ไฟล์ bind() เมธอดของคลาสชื่อ Registry. สำหรับวิธีนี้ให้ส่งสตริงที่แสดงชื่อการผูกและอ็อบเจ็กต์ที่เอ็กซ์พอร์ตเป็นพารามิเตอร์

ต่อไปนี้เป็นตัวอย่างของโปรแกรมเซิร์ฟเวอร์ RMI

import java.rmi.registry.Registry; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class Server extends ImplExample { 
   public Server() {} 
   public static void main(String args[]) { 
      try { 
         // Instantiating the implementation class 
         ImplExample obj = new ImplExample(); 
    
         // Exporting the object of implementation class  
         // (here we are exporting the remote object to the stub) 
         Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);  
         
         // Binding the remote object (stub) in the registry 
         Registry registry = LocateRegistry.getRegistry(); 
         
         registry.bind("Hello", stub);  
         System.err.println("Server ready"); 
      } catch (Exception e) { 
         System.err.println("Server exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

การพัฒนาโปรแกรมไคลเอ็นต์

เขียนโปรแกรมไคลเอนต์ดึงวัตถุระยะไกลและเรียกใช้วิธีการที่ต้องการโดยใช้วัตถุนี้

เพื่อพัฒนาโปรแกรมไคลเอนต์ -

  • สร้างคลาสไคลเอนต์จากจุดที่คุณตั้งใจจะเรียกใช้วัตถุระยะไกล

  • รับรีจิสทรี RMI โดยใช้ไฟล์ getRegistry() วิธีการของ LocateRegistry คลาสซึ่งเป็นของแพ็คเกจ java.rmi.registry.

  • ดึงวัตถุจากรีจิสทรีโดยใช้วิธีการ lookup() ของชั้นเรียน Registry ซึ่งเป็นของแพ็คเกจ java.rmi.registry.

    ในวิธีนี้คุณต้องส่งค่าสตริงที่แสดงชื่อการผูกเป็นพารามิเตอร์ สิ่งนี้จะส่งคืนวัตถุระยะไกลให้คุณ

  • lookup () ส่งคืนอ็อบเจ็กต์ประเภทรีโมตจากนั้นส่งกลับไปที่ประเภท Hello

  • สุดท้ายเรียกใช้วิธีการที่ต้องการโดยใช้วัตถุระยะไกลที่ได้รับ

ต่อไปนี้เป็นตัวอย่างของโปรแกรมไคลเอนต์ RMI

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

public class Client {  
   private Client() {}  
   public static void main(String[] args) {  
      try {  
         // Getting the registry 
         Registry registry = LocateRegistry.getRegistry(null); 
    
         // Looking up the registry for the remote object 
         Hello stub = (Hello) registry.lookup("Hello"); 
    
         // Calling the remote method using the obtained object 
         stub.printMsg(); 
         
         // System.out.println("Remote method invoked"); 
      } catch (Exception e) {
         System.err.println("Client exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

การรวบรวมแอปพลิเคชัน

ในการรวบรวมแอปพลิเคชัน -

  • รวบรวมอินเทอร์เฟซระยะไกล
  • รวบรวมคลาสการใช้งาน
  • คอมไพล์โปรแกรมเซิร์ฟเวอร์
  • คอมไพล์โปรแกรมไคลเอนต์

หรือ,

เปิดโฟลเดอร์ที่คุณเก็บโปรแกรมทั้งหมดและคอมไพล์ไฟล์ Java ทั้งหมดตามที่แสดงด้านล่าง

Javac *.java

การใช้งานแอปพลิเคชัน

Step 1 - เริ่มไฟล์ rmi รีจิสทรีโดยใช้คำสั่งต่อไปนี้

start rmiregistry

สิ่งนี้จะเริ่มต้น rmi รีจิสทรีในหน้าต่างแยกต่างหากดังที่แสดงด้านล่าง

Step 2 - เรียกใช้ไฟล์คลาสเซิร์ฟเวอร์ดังที่แสดงด้านล่าง

Java Server

Step 3 - เรียกใช้ไฟล์คลาสไคลเอนต์ตามที่แสดงด้านล่าง

java Client

Verification - ทันทีที่คุณเริ่มไคลเอนต์คุณจะเห็นผลลัพธ์ต่อไปนี้ในเซิร์ฟเวอร์