• RMI Remote Method Invoke –có nghĩa là gọi phương thức từ xa là cách thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt nằm trên máy khác nhau có thể gọi lẫn nhau... RMI Gọi phươ
Trang 1RMI (Remote Method Invocation)
Trang 3RMI Các vấn đề
• Khái niệm RMI
• Những bước xây dựng và ứng dụng RMI
• Chạy và biên dịch một chương trình RMI
• Cấu hình Enterprise RMI
• RMI Applet
Trang 4RMI Gọi phương thức từ xa
• Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục chay hàm Mã lệnh của hàm (hay thủ tục) được nạp thẳng vào bộ nhớ và thực thi ngay trên máy cục bộ Vậy thì có cách nào nạp nội dung của hàm hay đối tượng ở một máy nào đó và gọi chúng từ một máy khác hay không?
• RMI (Remote Method Invoke –có nghĩa là gọi phương thức từ xa) là cách thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt nằm trên máy khác nhau có thể gọi lẫn nhau
Trang 5RMI Gọi phương thức từ xa
• Việc phân phối các đối tượng qua những máy khác nhau để tận dụng phần cứng và phần mềm chuyên dụng
• Người phát triển xây dựng mạng dịch vụ và cài đặt nó trên những máy cụ thể
• Người dùng yêu cầu một thực thể thuộc lớp sử dụng cú pháp URL
• Người dùng sử dụng đối tượng giống như nó là 1 đối tượng
cụ thể, cục bộ
• Kết nối mạng tự động
• Các bản Java cho phép bạn vận chuyển những cấu trúc dữ liệu phức tạp thông qua mạng mà ko cần viết code để phân tích và xây dựng lại chúng
Trang 6RMI Quá trình hoạt động
• Ứng dụng RMI bao gồm hai chương trình riêng biệt, server (máy chủ) và client (máy khách)
• Chương trình máy chủ sẽ tạo ra đối tượng ở xa, những đối tượng này được điều chỉnh có thể tham chiếu được và chờ cho đến khi máy khách thiết lập các phương thức gọi lên các đối tượng này
• Chương trình máy khách sẽ nhận được tham chiếu của một hay nhiều đối tượng sau đó tiến hành các phương thức gọi lên chúng
Trang 7RMI Quá trình hoạt động
• Các tham số truyền cho các phương thức của đối tượng ở xa phải được đóng gói và chuyển qua mạng để đến được với phương thức thực sự (việc truyền kết quả trở về cũng vậy)
• Để giải quyết các vấn đề trên, đối tượng Java trên hai máy khác
nhau không gọi nhau trực tiếp mà thông qua các lớp trung gian nằm trên cả máy khách và máy chủ
• Phía máy khách, lớp trung gian này được gọi là Stub
• Phía máy chủ, lớp trung gian này được gọi là Skeleton
Trang 8RMI Quá trình hoạt động
• Đầu tiên RMI-server đăng ký tên của
nó với bộ Registry
•RMI-client tìm tên của RMI-server trong
bộ Registry để thiết lập truy cập từ xa
với RMI-server
•Stub đóng gói thamsố rồi gửi đến
Skeleton
•Skeleton gọi phương thức từ xa rồi
đóng gói kết quả gửi về Stub
Trang 9RMI Quá trình hoạt động
Trang 10RMI Quá trình hoạt động
Trang 11RMI Quá trình hoạt động
GIAO TIẾP STUB VÀ SKELETON
• Client gọi một phương thức từ xa, lời gọi này đầu tiên được chuyển tiếp đến Stub.
• Stub có nhiệm vụ gửi tiếp lời yêu cầu này đến Skeleton phía server bằng cách Stub mở một
socket đến server, đóng gói các tham số rồi truyền luồng dữ liệu này đến Skeleton.
• Skeleton chứa đựng một phương thức nhận các
lời yêu cầu từ xa, mở gói tham số, gọi hàm thực sự trên server để tính toán rồi trả kết quả về Stub phía client.
Trang 12RMI Các bước xây dựng
1 Định nghĩa một giao tiếp từ xa (remote interface) trênserver
2 Xây dựng một đối tượng từ xa (remote object) bằng cáchHiện thực giao tiếp từ xa (remote interface)
3 Xây dựng chương trình phía Server
4 Xây dựng chương trình phía Client
5 Biên dịch các file Java nguồn (phía client vàserver)
6 Sinh ra các Stub phía client và Skeleton phía server
7 Khởi động bộ đăng ký RMI (RMI registry)
8 Khởi động các đối tượng từ xa phía server
9 Chạychương trình phía client
Trang 13RMI Các bước xây dựng
1.ĐỊNH NGHĨA MỘT REMOTE INTERFACE
Để tạo một ứng dụng RMI, bước đầu tiên là định nghĩa một Remote Interface giữa các đối tượng Client và Sever
Các phương thức trong Remote Inteface muốn được gọi từ xa đều phải có khả năng ném ra ngoại lệ Remote Exception
Trang 14RMI Các bước xây dựng
2 HIỆN THỰC REMOTE INTERFACE
Lớp Calculator ở bước1 chỉ là một Remote Interface, nó chỉ đặc tả các phương thức của đối tượng Từ giao tiếp đó, đối
tượng thực sự phải được cài đặt như sau:
Trang 15RMI Các bước xây dựng
3.XÂY DỰNG CHƯƠNG TRÌNH TRÊN MÁY SERVER
Bây giờ ta viết một chương trình để cài đặt đối tượng Calculator trên máy server Ta đặt tên chương trình này là CalculatorServer:
/* CalculatorServer.java*/
import java.rmi.server.*;
Import java.rmi.*;
public class CalculatorServer{
public static void main(Stringargs[]) { try{
//tạo đối tượng Calculator thực sự
CalculatorImpl c= new CalculatorImpl();
System.out.println(“ExportingCalculator…”);
Trang 16RMI Các bước xây dựng
3.XÂY DỰNG CHƯƠNG TRÌNH TRÊN MÁY SERVER
//thông báo sự hiện diện của đối tượng cho máy ảo Java
}
Trang 17RMI Các bước xây dựng
4.XÂY DỰNG CHƯƠNG TRÌNH PHÍA CLIENT
Ở bước này ta thiết kế chương trình phía bên máy khách(client) có khả năng gọi và sử dụng đối tượng
Calculator trên máy chủ (server), như sau:
/* CalculatorClient.java*/
import java.rmi.*;
public class CalculatorClient { public static void main(String args[]) {
try{
Trang 18RMI Các bước xây dựng
4.XÂY DỰNG CHƯƠNG TRÌNH PHÍA CLIENT
// tìm đối tượng cần truy xuất theo tên
System.out.println(“Findingobject…”);
Calculator c= (Calculator)Naming.lookup (“rmi://localhost/MyCalculator”);
// gọi phương thức của đối tượng
System.out.println(c.addNum(12,1));
} catch(Exception e) { System.out.println(e); } }
}
Trang 19RMI Các bước xây dựng
5 BIÊN DỊCH CÁC FILE JAVA NGUỒN
Phía server ta đã có các file nguồn là Calculator.java, CalculatorImpl.java, CalculatorServer.java Tiến hành biên dịch chúng như sau:
C:\RMI>javacCalculator.java C:\RMI>javacCalculatorImpl.java C:\RMI>javacCalculatorServer.java
PhíabênClient ta đã có file nguồn là CalculatorClient.java Tiến hành biên dịch như sau:
C:\RMI>javacCalculatorClient.java
Trang 20RMI Các bước xây dựng
6 SINH LỚP TRUNG GIAN STUB & SKETLETON
Dựa vào lớp cài đặt CalculatorImpl.class, trình biên dịchrmic.exe của Java sẽ cung cấp cho ta hai lớp trung gian Stub và Skeleton Mở cửa sổ DOS-promp(cmd) rồi đánh lệnh biên dịch sau:
C:\RMI>rmicCalculatorImpl
Kết quả ta sẽ thu được hai tập tin
CalculatorImpl_Stub.class
và CalculatorImpl_Skel.class
Trang 21RMI Các bước xây dựng
7 CHẠY CHƯƠNG TRÌNH rmiregistry.exe
Mở cửa sổ DOS-prompt (cmd) chạy chương trình rmiregistry từ dòng lệnh như sau:
C:\RMI>rmiregistry.exe
Chương trình này chạy ở dạng service Nó có nhiệm vụ đón nhận các kết nối chứa thông tin về đối tượng do phương thức Naming.bind() gửi đến
Mặc định rmiregistry.exe lắng nghe các kết nối gửi đến cổng 1099
Trang 22RMI Các bước xây dựng
8 KHỞI ĐỘNG CÁC ĐỐI TƯỢNG PHÍA SERVER
Bây giờ ta mở một cửa sổ DOS-prompt khác chạy chương
trình CalculatorServer như sau:
Trang 23RMI Các bước xây dựng
9 CHẠY CHƯƠNG TRÌNH PHÍA CLIENT
Bây giờ ta mở thêm một cửa sổ DOS-prompt thứ ba để chạy chương trình CalculatorClient như sau:
Trang 24RMI Tích hợp tham số
•Trong Java, đối tượng được truyền theo tham chiếu còn các kiểu
dữ liệu đơn giản như int, char,… được truyền theo tham trị
• Đối với việc truyền tham số qua mạng theo cơ chế RMI thì có hai nguyên tắc sau:
-Tất cả các kiểu dữ liệu đơn giản như int, char,… đều được truyền theo thamtrị
-Tất cả các dữ liệu kiểu đối tượng muốn truyền qua mạng đều
buộc phải cài đặt một trong hai tiếp là Remote hoặc Serializable Các đối tượng cài giao tiếp Remote sẽ được truyền theo tham chiếu còn các đối tượng cài đặt giao tiếp Serializable sẽ được truyền theo tham trị
Trang 25RMI Cấu hình Enterprise
• Những file stub cần được đặt trên một HTTP server cho việc download
– Trong Java 2, giao thức RMI 1.2 không yêu cầu skeleton
• Client phải cài đặt 1 RMISecurityManager để tải những lớp RMI từ xa
– System.setSecurityManager (new RMISecurityManager());
• Client cần có một policy file để kết nối và đăng ký và HTTP server
Trang 26RMI Cấu hình Enterprise
Policy File cho Client
Grant {
//rmihost - RMI registry and the server
//webhost –HTTP server for stub classes
Server liên kết với rmiregistry(và client) trên port ngẫu nhiên có trong nguồn
Có thể thiết lập những chính sách trong java.policy đặt trong JAVA_HOME/lib/security/
Trang 27RMI RMI Applet
• Applet không cần lớp RMI Security Manager
• Applet chỉ có thể truy cập server trong những files lớp đã được load
– RMI registry và server đối tượng ở xa của server phải cùng HTTP host nơi applet được load
• RMI 1.1 Giao thức stub không chính thức được hỗ trợ trên IE
• RMI 1.2 Giao thức stub cần Java plug-in hoặc Netscape 6
Trang 29THANK YOU FOR YOUR
LISTENING