Java RMI - บทนำ
RMI ย่อมาจาก Remote Method Invocation. เป็นกลไกที่อนุญาตให้อ็อบเจ็กต์ที่อยู่ในระบบหนึ่ง (JVM) เข้าถึง / เรียกใช้อ็อบเจ็กต์ที่รันบน JVM อื่น
RMI ใช้เพื่อสร้างแอปพลิเคชันแบบกระจาย ให้การสื่อสารระยะไกลระหว่างโปรแกรม Java มีให้ในแพ็คเกจjava.rmi.
สถาปัตยกรรมของแอปพลิเคชัน RMI
ในแอปพลิเคชัน RMI เราเขียนโปรแกรมสองโปรแกรม a server program (อยู่บนเซิร์ฟเวอร์) และ a client program (อยู่บนไคลเอนต์)
ภายในโปรแกรมเซิร์ฟเวอร์จะมีการสร้างวัตถุระยะไกลและการอ้างอิงของวัตถุนั้นพร้อมใช้งานสำหรับไคลเอนต์ (โดยใช้รีจิสทรี)
โปรแกรมไคลเอ็นต์ร้องขอวัตถุระยะไกลบนเซิร์ฟเวอร์และพยายามเรียกใช้เมธอด
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของแอปพลิเคชัน RMI
ตอนนี้ให้เราพูดถึงส่วนประกอบของสถาปัตยกรรมนี้
Transport Layer- เลเยอร์นี้เชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์ จะจัดการการเชื่อมต่อที่มีอยู่และตั้งค่าการเชื่อมต่อใหม่
Stub- ต้นขั้วเป็นตัวแทน (พร็อกซี) ของวัตถุระยะไกลที่ไคลเอนต์ มันอยู่ในระบบไคลเอนต์ ทำหน้าที่เป็นเกตเวย์สำหรับโปรแกรมไคลเอนต์
Skeleton - นี่คือวัตถุที่อยู่ทางฝั่งเซิร์ฟเวอร์ stub สื่อสารกับโครงกระดูกนี้เพื่อส่งคำขอไปยังวัตถุระยะไกล
RRL(Remote Reference Layer) - เป็นชั้นที่จัดการการอ้างอิงที่ลูกค้าทำไปยังวัตถุระยะไกล
การทำงานของแอปพลิเคชัน RMI
ประเด็นต่อไปนี้สรุปวิธีการทำงานของแอปพลิเคชัน RMI -
เมื่อไคลเอ็นต์ทำการโทรไปยังอ็อบเจ็กต์ระยะไกลไคลเอ็นต์จะได้รับโดยต้นขั้วซึ่งส่งคำขอนี้ไปยัง RRL ในที่สุด
เมื่อ RRL ฝั่งไคลเอ็นต์ได้รับคำขอจะเรียกใช้เมธอดที่เรียกว่า invoke() ของวัตถุ remoteRef. ส่งคำขอไปยัง RRL ทางฝั่งเซิร์ฟเวอร์
RRL บนฝั่งเซิร์ฟเวอร์ส่งคำขอไปยัง Skeleton (พร็อกซีบนเซิร์ฟเวอร์) ซึ่งสุดท้ายจะเรียกใช้วัตถุที่ต้องการบนเซิร์ฟเวอร์
ผลลัพธ์จะถูกส่งกลับไปยังไคลเอนต์
Marshalling และ Unmarshalling
เมื่อใดก็ตามที่ไคลเอ็นต์เรียกใช้เมธอดที่ยอมรับพารามิเตอร์บนวัตถุระยะไกลพารามิเตอร์จะรวมอยู่ในข้อความก่อนที่จะส่งผ่านเครือข่าย พารามิเตอร์เหล่านี้อาจเป็นประเภทดั้งเดิมหรือวัตถุ ในกรณีของชนิดดั้งเดิมพารามิเตอร์จะถูกรวมเข้าด้วยกันและแนบส่วนหัวเข้าด้วยกัน ในกรณีที่พารามิเตอร์เป็นอ็อบเจ็กต์พารามิเตอร์เหล่านั้นจะถูกทำให้เป็นอนุกรม กระบวนการนี้เรียกว่าmarshalling.
ที่ฝั่งเซิร์ฟเวอร์พารามิเตอร์ที่บรรจุจะถูกยกเลิกการรวมกลุ่มจากนั้นจึงเรียกวิธีการที่ต้องการ กระบวนการนี้เรียกว่าunmarshalling.
RMI Registry
RMI Registry เป็นเนมสเปซที่วางอ็อบเจ็กต์เซิร์ฟเวอร์ทั้งหมด ทุกครั้งที่เซิร์ฟเวอร์สร้างอ็อบเจ็กต์เซิร์ฟเวอร์จะลงทะเบียนอ็อบเจ็กต์นี้ด้วย RMIregistry (โดยใช้bind() หรือ reBind()วิธีการ) สิ่งเหล่านี้ได้รับการจดทะเบียนโดยใช้ชื่อเฉพาะที่เรียกว่าbind name.
ในการเรียกใช้วัตถุระยะไกลไคลเอนต์ต้องการการอ้างอิงของวัตถุนั้น ในเวลานั้นไคลเอนต์ดึงวัตถุจากรีจิสทรีโดยใช้ชื่อผูก (โดยใช้lookup() วิธี).
ภาพประกอบต่อไปนี้อธิบายกระบวนการทั้งหมด -
เป้าหมายของ RMI
ต่อไปนี้เป็นเป้าหมายของ RMI -
- เพื่อลดความซับซ้อนของแอปพลิเคชัน
- เพื่อรักษาความปลอดภัยประเภท
- เก็บขยะแบบกระจาย.
- ลดความแตกต่างระหว่างการทำงานกับวัตถุภายในและระยะไกล