แอปพลิเคชัน 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 - ทันทีที่คุณเริ่มไคลเอนต์คุณจะเห็นผลลัพธ์ต่อไปนี้ในเซิร์ฟเวอร์