Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo (JVM) khác nhau Tích hợp mô hình đối tượng phân tán vào ngôn ngữ lập trình Java theo một cách tự nhiên, có tin cậy trong khi vẫn duy trì các ngữ cảnh đối tượng của ngôn ngữ lập trình Java Làm cho mô hình đối tượng phân tán và mô hình đối tượng cục bộ không có sự khác biệt
Chapter 9 RMI Remote Method Invocation GV: Nguyễn Thị Thanh Vân 1 Java Simplified / Session 22 / 2 of 45 Giới thiệu Hoạt động của RMI Hoạt động của lớp trung gian Thiết kế và cài đặt một chương trình RMI Thực thi hệ chương trình RMI, ex Chuyển tham số trong RMI, ex ◦ Tham trị ◦ Tham chiếu Tuần tự hóa đối tượng, ex Factory Object, ex RMI với firewall Nội dung 2 Java Simplified / Session 22 / 3 of 45 Lập trình HĐT phân tán: ◦ Môi trường hợp tác ◦ Tận dụng nguồn tài nguyên phân tán trên mạng Java: giải quyết vấn đề lập trình phân tán ◦ Có .NET của Microsoft Trong Java, sử dụng kỹ thuật RMI để cài đặt các đối tượng phân tán. ◦ KT xuyên suốt trong toàn bộ kiến trúc của Java Giới thiệu 3 Java Simplified / Session 22 / 4 of 45 Local method Invocation: 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ộ Muốn nạp nội dung hàm hay đối tượng ở 1 máy nào đó gọi chúng từ một máy khác? Remote Method Invocation (RMI) : 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. Giới thiệu 4 Java Simplified / Session 22 / 5 of 45 Mô hình tri u g i các đ i tư ng t xaệ ọ ố ợ ừ Computer C C1 Computer A A2 A1 Computer B B3 B2 B2 5 Java Simplified / Session 22 / 6 of 45 Like RPC ,RMI has the following similarities ◦ Remote calls can be made ◦ Client/server contract based on interface Unlike ◦ RPC : hỗ trợ đa ngôn ngữ ◦ RMI: chỉ hỗ trợ các ứng dụng được viết bằng Java RMI và RPC (Remote Procedure Calling) 6 Java Simplified / Session 22 / 7 of 45 RMI – Client/Server Client Server Client (nơi gọi phương thức của các đối tượng ở xa) Server (nơi đối tượng thật sự được cài đặt để thực thi mã lệnh của phương thức). 7 Java Simplified / Session 22 / 8 of 45 Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo (JVM) khác nhau ◦ Tích hợp mô hình đối tượng phân tán vào ngôn ngữ lập trình Java theo một cách tự nhiên, có tin cậy trong khi vẫn duy trì các ngữ cảnh đối tượng của ngôn ngữ lập trình Java ◦ Làm cho mô hình đối tượng phân tán và mô hình đối tượng cục bộ không có sự khác biệt. Mục đích của RMI 8 Java Simplified / Session 22 / 9 of 45 Việc gọi phương thức của đối tượng từ xa luôn phức tạp hơn gọi phương thức cục bộ: ◦ Việc tham chiếu đến biến, địa chỉ của đối tượng khác nhau ở các máy khác nhau ◦ Các tham số truyền cho phương thức của đối tượng ở xa phải được đóng gói và chuyển qua mạng đến phương thức thực sự. (local-stack) ◦ Lời gọi phương thức từ xa phải thông qua mạng và có thể bị ngắt ngang do mạng gặp sự cố Phụ thuộc vào kết nối mạng Vấn đề phát sinh 9 Java Simplified / Session 22 / 10 of 45 Đối tượng trên hai máy khác nhau không gọi trực tiếp mà thông qua lớp trung gian. Lớp trung gian tồn tại ở cả hai phía Client và Server. ◦ Lớp ở máy Client gọi là Stub, ◦ Lớp ở máy Server gọi là Skel(Skeletion) Lớp trung gian Stub sẽ biết cách thông báo lỗi khi có các sự cố về mạng cho Client Giải pháp 10 [...]... (hđ Skeletion) Java Simplified / Session 22 / 17 of 45 Trình (bộ quản lý)đăng ký Registry là một chương trình dịch vụ chạy ở hậu Registry trường (rmiregistry.exe), thực hiện mở ổ cắm Client socket và lắng nghe các yêu cầu gởi đến cổng mặc định 1 099 , có thể chỉ định một Server cổng khác với cổng 1 099 ◦ Ví dụ: C:\j2sdk1.4.0\bin\ rmiregistry.exe 99 99 Đóng vai trò như là một DNS nhỏ cho các đối tượng... nối gửi đến cổng 1 099 , có thể chỉ định lại: ◦ C: \RMI> rmiregistry.exe 2012 ◦ rmiregistry.exe có trong \Java\jdk1.7.0_05\bin Không cần chạy service trên nếu có: LocateRegistry.createRegistry(1 099 ); trong main của trình Server Java Simplified / Session 22 / 33 of 45 7 K.động các đối tượng phía Server C: \RMI> java CalculatorServer Exporting Calculator… Register Calculator! Cũng như rmiregistry.exe,... RMI Java Simplified / Session 22 / 15 of 45 Quá trình hoạt động của RMI Remote Machine (Server) RMI Server Skeleton return bind Registry lookup call Stub RMI Client Local Machine (Client) Java Simplified / Session 22 / 16 of 45 Quá trình hoạt động của RMI B1: RMI- server đăng ký tên của đối tượng với bộ q.lý Registry B2: Bộ quản lý Registry trả về tham chiếu đến đối tượng ở xa (RMI. .. Stub phía client và Skeleton phía server 4 Xây dựng chương trình phía Server 5 Xây dựng chương trình phía Client 6 Khởi động bộ đăng ký RMI (RMI registry) 7 Khởi động các đối tượng từ xa phía server 8 Chạy chương trình phía client Java Simplified / Session 22 / 26 of 45 Ex, Cài đặt chương trinhg cộng 2 số nguyên Triệu gọi đối tượng RMI giữa trình khách và đối tượng chủ ở xa Java Simplified / Session... ky doi tuong với trình quản lý rmi Naming.bind( "rmi: //localhost/Van",c); System.out.println("Register Calculator!"); } catch(Exception e) { System.out.println(e); } } } Biên dịch Java Simplified / Session 22 / 31 of 45 5 Xây dựng chương trình trên Client Chương trình phía bên máy client có khả năng gọi và sử dụng đối tượng Cal trên máy server: /* CalculatorClient.java*/ import java .rmi. *; public class... (x+y); } } Biên dịch Java Simplified / Session 22 / 29 of 45 3 Sinh trung gian Stub và Skeleton Dựa vào lớp cài đặt CalImpl.class, trình biên dịch rmic.exe của Java sẽ cung cấp hai lớp trung gian C: \RMI> rmic CalculatorImpl Kết quả ◦ CalculatorImpl_Stub.class ◦ CalculatorImpl_Skel.class //ko Java Simplified / Session 22 / 30 of 45 4 Xây dựng chương trình trên Server /* CalServer.java*/ public class... client Java Simplified / Session 22 / 19 of 45 Các lớp và các giao tiếp trong gói java .rmi Giao tiếp Remote Giao tiếp này không khai báo bất kỳ phương thức nào Các phương thức được khai báo trong phương thức này là các giao tiếp có thể được gọi từ xa Lớp Naming Lớp java .rmi. Naming truyền tin trực tiếp với một trình đăng ký đang chạy trên server để ánh xạ các URL rmi: //hostname/Objectname thành các... ký với trình đăng ký ◦ Lookup() tìm một đối tượng từ xa cụ thể với một URL cho trước gắn với nó ◦ Rebind() gán một tên với một đối tượng ở xa khác ◦ Unbind() loại bỏ một tên đã được gán cho một đối tượng ở xa trong trình đăng ký ◦ Registry.REGISTRY_PORT là cổng mặc định để lắng nghe các các yêu cầu Giá trị mặc định là 1 099 Java Simplified / Session 22 / 25 of 45 Các bước thiết kế và cài đặt RMI 1 Đặc... tượng stub từ trình đăng ký Có rất nhiều tình huống có thể xảy ra khi gán tên ◦ MalformedURLException: url không đúng cú pháp ◦ RemoteException: không thể liên lạc được với trình đ.ký ◦ AccessException: client không được phép gán các đối tượng trong trình đăng ký ◦ AlreadyBoundException: nếu đối tượng URL đã gắn với một đối tượng cục bộ Java Simplified / Session 22 / 22 of 45 Naming class - methods ... (Calculator)Naming.lookup ( "rmi: //localhost/Van"); // goi phuong thuc cua doi tuong System.out.println(c.addNum(5,10)); } catch(Exception e) { System.out.println(e); } } } Biên dịch Java Simplified / Session 22 / 32 of 45 6 Kích hoạt bộ đăng ký C: \RMI> rmiregistry.exe Nó có nhiệm vụ đón nhận (luôn trong trạng thái sẵn sàng phục vụ) 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 . cài đặt một chương trình RMI Thực thi hệ chương trình RMI, ex Chuyển tham số trong RMI, ex ◦ Tham trị ◦ Tham chiếu Tuần tự hóa đối tượng, ex Factory Object, ex RMI với firewall Nội dung 2 Java. Session 22 / 15 of 45 Kiến trúc của RMI 15 Java Simplified / Session 22 / 16 of 45 Quá trình hoạt động của RMI Registry RMI Server Skeleton Remote Machine (Server) Stub RMI Client Local Machine (Client) call return bind lookup 16 Java. 17 of 45 B1: RMI- server đăng ký tên của đối tượng với bộ q.lý Registry. B2: Bộ quản lý Registry trả về tham chiếu đến đối tượng ở xa (RMI Server) thông qua lớp giao tiếp B3-4: RMI- client liên