Chapter 9 RMI Remote Method Invocation GV Nguyn

  • Slides: 93
Download presentation
Chapter 9 RMI Remote Method Invocation GV: Nguyễn Thị Thanh Vân 1

Chapter 9 RMI Remote Method Invocation GV: Nguyễn Thị Thanh Vân 1

Nội dung Giới thiệu Hoạt động của RMI Hoạt động của lớp trung gian

Nội dung 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 Java Simplified / Session 22 / 2 of 2 45

Giới thiệu Lập trình HĐT phân tán: ◦ Môi trường hợp tác ◦ Tận

Giới thiệu 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 Simplified / Session 22 / 3 of 3 45

Giới thiệu Local method Invocation: mã lệnh của hàm (hay thủ tục) được nạp

Giới thiệu 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. Java Simplified / Session 22 / 4 of 4 45

Mô hình triệu gọi các đối tượng từ xa Computer A Computer B A

Mô hình triệu gọi các đối tượng từ xa Computer A Computer B A 2 B 2 A 1 B 2 B 3 Computer C C 1 Java Simplified / Session 22 / 5 of 5 45

RMI và RPC (Remote Procedure Calling) Like RPC , RMI has the following similarities

RMI và RPC (Remote Procedure Calling) 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 Simplified / Session 22 / 6 of 6 45

RMI – Client/Server Client (nơi gọi phương thức của các đối tượng ở xa)

RMI – 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). Java Simplified / Session 22 / 7 of 7 45

Mục đích của RMI Hỗ trợ gọi phương thức từ xa trên các đối

Mục đích của RMI 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. Java Simplified / Session 22 / 8 of 8 45

Vấn đề phát sinh Việc gọi phương thức của đối tượng từ xa luôn

Vấn đề phát sinh 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 Java Simplified / Session 22 / 9 of 9 45

Giải pháp Đối tượng trên hai máy khác nhau không gọi trực tiếp mà

Giải pháp Đố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 Java Simplified / Session 22 / 10 of 10 45

A 2 A 1 Computer B B 1_Skel Computer A B 1_Stub Lớp trung

A 2 A 1 Computer B B 1_Skel Computer A B 1_Stub Lớp trung gian Stub và Skeletion B 1 C 1_Skel C 1_Stub Computer C C 1 Java Simplified / Session 22 / 11 of 11 45

Lớp trung gian Stub và Skeletion Trình biên dịch Java (rmic. exe) sẽ tạo

Lớp trung gian Stub và Skeletion Trình biên dịch Java (rmic. exe) sẽ tạo ra 2 lớp trung gian: ◦ Lớp Stub (lớp móc): chuyển về cho client ◦ Lớp Skeleton (lớp nối): Phía Server Stub và Skeletion sẽ giúp các đối tượng ở xa giao dịch với nhau ? ◦ Đối tượng Server (trên máy Server) cần cung cấp một giao diện tương ứng với các phương thức của nó (Server Object) cho phép đối tượng Client gọi nó trên máy Client dễ dàng. ◦ Đối tượng client sẽ luôn nghĩ rằng nó đang hoạt động trực tiếp với đối tượng server trên máy cục bộ. Java Simplified / Session 22 / 12 of 12 45

Lớp trung gian Stub và Skeletion Ví dụ: Phương thức A truyền cho phương

Lớp trung gian Stub và Skeletion Ví dụ: Phương thức A truyền cho phương thức B hai số a, b. Phương thức B sẽ cộng hai số a, b cho ra kết quả c và trả về phương thức A. Quá trình diễn ra như sau: a, b c Java Simplified / Session 22 / 13 of 13 45

Kiến trúc của RMI v The Stub and Skeleton layer, which intercepts method calls

Kiến trúc của RMI v The Stub and Skeleton layer, which intercepts method calls made by the client to the interface reference variable and redirects these calls to a remote RMI service. v The Remote Reference layer understands how to interpret and manage references made from clients to the remote service objects. v The Transport layer, which is based on TCP/IP connections between machines in a network. It provides basic connectivity, as well as some 14 firewall penetration strategies. Java Simplified / Session 22 / 14 of 45

Kiến trúc của RMI Java Simplified / Session 22 / 15 of 15 45

Kiến trúc của RMI Java Simplified / Session 22 / 15 of 15 45

Quá trình hoạt động của RMI Remote Machine (Server) RMI Server Skeleton return bind

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 16 45

Quá trình hoạt động của RMI B 1: RMI-server đăng ký tên của đối

Quá trình hoạt động của RMI B 1: RMI-server đăng ký tên của đối tượng với bộ q. lý Registry. B 2: 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 B 3 -4: RMI-client liên lạc với bộ Registry để lấy về tham chiếu đến đối tượng trên Server. Các quá trình đăng ký và truy tìm tên đối tượng được Java quản lý bằng các hàm giao tiếp API JNDI B 5 -7: Client sẽ gọi các phương thức của đối tượng trên Server Khi một phương thức được gọi, sẽ được chuyển tiếp đến lớp trung gian Stub, rồi gọi đến lớp Skeleton (hđ Stub). B 8 -10: Lớp Skeleton sẽ trực tiếp yêu cầu đối tượng thực thi phương thức và trả kết quả cho Client (hđ Skeletion) Java Simplified / Session 22 / 17 of 17 45

Trình (bộ quản lý)đăng ký Registry là một chương trình dịch vụ chạy ở

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 socket và lắng nghe Client các yêu cầu gởi đến cổng mặc định 1099, có thể chỉ định một Server cổng khác với cổng 1099. ◦ Ví dụ: C: j 2 sdk 1. 4. 0bin rmiregistry. exe 9999 Đóng vai trò như là một DNS nhỏ cho các đối tượng từ xa thực hiện tìm kiếm dịch vụ, Java Simplified / Session 22 / 18 of 18 45

Hoạt động của Stub, Skeleton v Client gọi một phương thức từ xa, lời

Hoạt động của Stub, Skeleton v Client gọi một phương thức từ xa, lời gọi này được chuyển tiếp đến Stub. v 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ố: • Gói nhận dạng đối tượng từ xa • Gói phương pháp nhận dạng § truyền luồng dữ liệu này đến Skeleton. v 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 § trả kết quả về Stub phía client. Java Simplified / Session 22 / 19 of 19 45

Các lớp và các giao tiếp trong gói java. rmi Giao tiếp Remote Giao

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 đối tượng từ xa cụ thể trên host xác định: ◦ Rmi là giao thức dùng để đăng kí. ◦ Hostname và port là đ/c IP và số hiêu cổng của Server nơi bộ Registry đang chạy. ◦ Objectname là tên tự đặt, các ct phía client sẽ dựa vào tên này để truy tìm tham chiếu đến đối tượng cần dùng. URL rmi vs. URL http. Java Simplified / Session 22 / 20 of 20 45

Naming class - methods Lớp Naming cung cấp các phương thức sau: ◦ public

Naming class - methods Lớp Naming cung cấp các phương thức sau: ◦ public static String[] list(String url) throws Remot. Exception trả về một mảng các xâu ký tự, mỗi xâu là một URL đã được gắn với một tham chiếu. url là URL của trình đăng ký Naming. ◦ public static Remote lookup(String url) throws Remot. Exception, Not. Bound. Exception, Access. Exception, Malformed. URLException Client lookup để tìm kiếm một đối tượng từ xa gắn liền với tên đối tượng. Not. Bound. Exception: server ở xa không nhận ra tên của nó. Java Simplified / Session 22 / 21 of 21 45

Naming class - methods Public static void bind(String url, Remote object) throws Remot. Exception,

Naming class - methods Public static void bind(String url, Remote object) throws Remot. Exception, Already. Bound. Exception, Malformed. URLException, Access. Exception để liên kết một tên với một đối tượng ở xa. Nếu thành công thì client có thể tìm kiếm đối 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. ◦ Malformed. URLException: url không đúng cú pháp. ◦ Remote. Exception: không thể liên lạc được với trình đ. ký ◦ Access. Exception: client không được phép gán các đối tượng trong trình đăng ký. ◦ Already. Bound. Exception: nếu đối tượng URL đã gắn với một đối tượng cục bộ Java Simplified / Session 22 / 22 of 22 45

Naming class - methods public static void rebind(String url, Remote obj)throws Remote. Exception, Access.

Naming class - methods public static void rebind(String url, Remote obj)throws Remote. Exception, Access. Exception, Malformed. URLException Phương thức này giống như phương thức bind() ngoại trừ việc là nó gán URL cho đối tượng ngay cả khi URL đã được gán. Java Simplified / Session 22 / 23 of 23 45

Remote. Object class Remote. Object v Remote. Object class v Các đối tượng từ

Remote. Object class Remote. Object v Remote. Object class v Các đối tượng từ xa là thể hiện của các lớp con của Remote. Object. v Remote. Server class v là lớp con của lớp Remote. Object; v là lớp cha của lớp Unicast. Remote. Object. v Unicast. Remote. Object class v là một lớp con cụ thể của lớp Remote. Server. v Để tạo ra một đối tượng ở xa: v ta phải thừa kế lớp Unicast. Remote. Server v khai báo lớp này thực thi giao tiếp Remote v Phương thức export. Object(Object): làm cho máy ảo Java nhận diện được đối tượng Object. Unicast. Remote Server Object Remote. Server Unicast. Remote Object Unicast. Remote Server Remote Java Simplified / Session 22 / 24 of 24 45

Giao tiếp Registry cho phép các client tìm kiếm các đối tượng ở xa

Giao tiếp Registry cho phép các client tìm kiếm các đối tượng ở xa trên một server theo tên. Các phương thức ◦ Bind() để gán một tên với một đối tượng từ xa cụ thể ◦ List() liệt kê tất cả các tên đã được đăng 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 yêu cầu. Giá trị mặc định là 1099. Java Simplified / Session 22 / 25 of 25 45

Các bước thiết kế và cài đặt RMI 1. Đặc tả một giao tiếp

Các bước thiết kế và cài đặt RMI 1. Đặc tả một giao tiếp từ xa (remote interface) trên server. 2. Hiện thực giao tiếp từ xa (remote interface) để Xây dựng một đối tượng từ xa (remote object). 3. Sinh ra các 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 26 45

Ex, Cài đặt chương trinhg cộng 2 số nguyên Triệu gọi đối tượng RMI

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 22 / 27 of 27 45

1. Đặc tả một Remote Interface (at Srv) Các đối tượng trong Remote Inteface

1. Đặc tả một Remote Interface (at Srv) Các đối tượng trong Remote Inteface phải có khả năng giao tiếp với các đối tượng ở xa (Kế thừa Remote class) Các phương thức phải có khả năng phát ra ngoại lệ Remote Exception. // Calculator. java import java. rmi. *; public interface Calculator extends Remote { public int add. Num(int x, int y) throws Remote. Exception; } Biên dịch Java Simplified / Session 22 / 28 of 28 45

2. Hiện thực Remote Interface Từ giao tiếp RI đã định nghĩa, đối tượng

2. Hiện thực Remote Interface Từ giao tiếp RI đã định nghĩa, đối tượng thực sự phải được cài đặt: /* Calculator. Impl. java*/ import java. rmi. *; public class Calculator. Impl implements Calculator { public int add. Num(int x, int y) throws Remote. Exception { System. out. println("Client request to calculate"); return (x+y); } } Biên dịch Java Simplified / Session 22 / 29 of 29 45

3. Sinh trung gian Stub và Skeleton Dựa vào lớp cài đặt Cal. Impl.

3. Sinh trung gian Stub và Skeleton Dựa vào lớp cài đặt Cal. Impl. class, trình biên dịch rmic. exe của Java sẽ cung cấp hai lớp trung gian C: RMI>rmic Calculator. Impl Kết quả ◦ Calculator. Impl_Stub. class ◦ Calculator. Impl_Skel. class //ko Java Simplified / Session 22 / 30 of 30 45

4. Xây dựng chương trình trên Server /* Cal. Server. java*/ public class Calculator.

4. Xây dựng chương trình trên Server /* Cal. Server. java*/ public class Calculator. Server{ public static void main(String[] args) throws Already. Bound. Exception { try{ //tao doi tuong Calculator thuc su Calculator. Impl c= new Calculator. Impl(); System. out. println("Exporting Calculator ! "); //thông báo sự hiện diện c là đối tượng có khả năng Remote cho JVM Unicast. Remote. Object. export. Object (c); //đăng 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 31 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ó

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: /* Calculator. Client. java*/ import java. rmi. *; public class Calculator. Client { public static void main(String[] args){ try{ System. out. println("Finding Object … "); // tìm đối tượng cần truy xuất theo tên Calculator c= (Calculator)Naming. lookup ("rmi: //localhost/Van"); // goi phuong thuc cua doi tuong System. out. println(c. add. Num(5, 10)); } catch(Exception e) { System. out. println(e); } } } Biên dịch Java Simplified / Session 22 / 32 of 32 45

6. Kích hoạt bộ đăng ký C: RMI>rmiregistry. exe Nó có nhiệm vụ đón

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 lắng nghe các kết nối gửi đến cổng 1099, có thể chỉ định lại: ◦ C: RMI>rmiregistry. exe 2012 ◦ rmiregistry. exe có trong. . Javajdk 1. 7. 0_05bin Không cần chạy service trên nếu có: Locate. Registry. create. Registry(1099); trong main của trình Server Java Simplified / Session 22 / 33 of 33 45

7. K. động các đối tượng phía Server C: RMI>java Calculator. Server Exporting Calculator…

7. K. động các đối tượng phía Server C: RMI>java Calculator. Server Exporting Calculator… Register Calculator! Cũng như rmiregistry. exe, sau khi Calculator Server được gọi, hàm Naming. bind() sẽ đi vào vòng lặp vô tận để chờ nhận yêu cầu từ client đến. Java Simplified / Session 22 / 34 of 34 45

8. Chạy chương trình phía Client C: RMI>java Calculator. Client Finding Object… 15 ->

8. Chạy chương trình phía Client C: RMI>java Calculator. Client Finding Object… 15 -> kết quả trả về là lời gọi đến phương thức add. Num() của đối tượng Calculator. Impl. Quay lại cửa sổ DOS trên Server thấy: Client request to calculate -> hàm add. Num() đã được gọi thực hiện Java Simplified / Session 22 / 35 of 35 45

Test Java Simplified / Session 22 / 36 of 36 45

Test Java Simplified / Session 22 / 36 of 36 45

Review Java Simplified / Session 22 / 37 of 37 45

Review Java Simplified / Session 22 / 37 of 37 45

Lưu ý cách vận hành Dựa vào JVM ta có thể tạo tùy ý

Lưu ý cách vận hành Dựa vào JVM ta có thể tạo tùy ý các máy tính ảo (cho các ct chạy trên các cửa sổ DOS khác nhau) giao tiếp với nhau giả lập mạng. Đặc điểm: cùng IP, cùng chung thư viện Java, cùng 1 chính sách bảo mật -> dễ vận hành. Khi vận hành trên các máy tính vật lý khác nhau cần chú ý về thư viện, security policy Java Simplified / Session 22 / 38 of 38 45

RMI trên JVM Java Simplified / Session 22 / 39 of 39 45

RMI trên JVM Java Simplified / Session 22 / 39 of 39 45

RMI trên máy thực cài đặt của đối tượng Java Simplified / Session 22

RMI trên máy thực cài đặt của đối tượng Java Simplified / Session 22 / 40 of 40 45

Tự tạo bộ đăng kí (ko dùng rmiregistry. exe Tự tạo bộ đăng kí

Tự tạo bộ đăng kí (ko dùng rmiregistry. exe Tự tạo bộ đăng kí và tự đăng kí đối tượng: ◦ Dùng: create. Registry()của lớp Locate. Registry. ◦ Đăng ký một đối tượng khác: Locate. Registry. create. Registry(1234); Naming. bind("rmi: //localhost: 1234/my. Cal", c 2); Locate. Registry. create. Registry(1099); Calculator cal = new Calculator. Impl(); System. out. println("Exporting Calculator ! "); Unicast. Remote. Object. export. Object(cal); System. out. println("Registering object …"); Naming. bind("rmi: //localhost/my. Cal", cal); System. out. println(“Register Calculator"); System. out. println("Waiting for client request…"); Java Simplified / Session 22 / 41 of 41 45

Các lớp được tạo ra trong RMI Các lớp và phạm vi sử dụng

Các lớp được tạo ra trong RMI Các lớp và phạm vi sử dụng Server Client Cal. class Cal. Impl. class Cal. Client. class Cal. Server. class Cal. Impl_Stub. class Cal. Impl_Skel. class Java Simplified / Session 22 / 42 of 42 45

Biến Classpath và tùy chọn Codebase CLASSPATH: ◦ Java dựa vào biến môi trường

Biến Classpath và tùy chọn Codebase CLASSPATH: ◦ Java dựa vào biến môi trường CLASSPATH để truy tìm các tập tin. class. ◦ Nếu CLASSPATH chỉ sai đường dẫn tới lỗi xảy ra: java. lang. Class. Not. Found. Exception: Class. Name ◦ Để thay đổi giá trị cho CLASSPATH, dùng lệnh: Set Classpath. Ví dụ: Set Classpath=. ; C: RMI Java Simplified / Session 22 / 43 of 43 45

Biến Classpath và tùy chọn Codebase (HTML) ◦ [CODEBASE = URLDirectory] //xác định vị

Biến Classpath và tùy chọn Codebase (HTML) ◦ [CODEBASE = URLDirectory] //xác định vị trí tệp từ xa ◦ Codebase cho phép nạp tự động các lớp _Stub. class từ xa. (khi đăng ký đối tượng với rmiregistry trên máy chủ) Thực hiện: ◦ máy chủ phải hỗ trợ thêm dịch vụ Web. Server chạy trên máy nơi rmiregistry đang chạy. ◦ chép tập tin (_Stub. class) vào thư mục (myclass) của trình chủ web server. ◦ biến Classpath trên máy ảo nơi rmiregistry đang chạy không được trỏ đến cùng thư mục chứa class Java Simplified / Session 22 / 44 of 44 45

Nạp stub từ xa xuống client thông qua web server 2. nhận cầu, trả

Nạp stub từ xa xuống client thông qua web server 2. nhận cầu, trả truy stub trong 3. RMI Clientregistry yêu cầu rmi yêu registry vềtìm tham chiếu đối. CLASSPATH tượng, nhưng 4. Client yêu cầu cấp stub 1. Server đăng kýwebserver đốirmi tượng với rmi registry, yêu cầu rmi registry nhưng không có, theo sự chỉ dẫn của server nó tìm đến web client chưa có stub, registry cho nó biết địa chỉ webserver rmiregistry sẽ hướng dẫn máy khách tự động nạp lớp _Stub từđể địa 5. sử dụng stub đó đểcung giao tiếp với server truy tìmđể đối thông server lấystub về, đồng thời ghi nhớ lại đường dẫn đến web nó lên download stub vềqua web chỉ codebase: http: //172. 16. 11. 12/myclass/ server (IP: 172. 16. 11. 12 Java Simplified / Session 22 / 45 of 45 45

Nạp file từ xa và security policy phía client Với Java tất cả các

Nạp file từ xa và security policy phía client Với Java tất cả các thao tác kết nối và chép tập tin lạ từ một máy khác về một máy đều phải thông qua lớp bảo vệ: Security. Manager Khi nạp lớp Stub tự động, chương trình của client cần bổ sung thiết lập lớp phòng vệ: System. set. Security. Manager(new RMISecurity. Manager()); //sau try{ Java Simplified / Session 22 / 46 of 46 45

Nạp file từ xa và security policy phía client /* Calculator. Client. java*/ import

Nạp file từ xa và security policy phía client /* Calculator. Client. java*/ import java. rmi. *; public class Calculator. Client { public static void main(String[] args){ try{ System. set. Security. Manager(new RMISecurity. Manager()); System. out. println("Finding Object … "); // tìm đối tượng cần truy xuất theo tên Calculator c= (Calculator)Naming. lookup ("rmi: //localhost/Van"); // goi phuong thuc cua doi tuong System. out. println(c. add. Num(5, 10)); } catch(Exception e) { System. out. println(e); } } } Java Simplified / Session 22 / 47 of 47 45

Nạp file từ xa và security policy phía client Hệ thống phòng vệ RMISecurity.

Nạp file từ xa và security policy phía client Hệ thống phòng vệ RMISecurity. Manager sẽ cho phép hoặc cấm các kết nối từ xa dựa trên thiết lập trong file: . . javajdk 1. 7. 0_05jrelibsecurityjava. policy Mở tập tin java. policy, edit: grant { permission java. security. All. Permission; // ko phòng vệ permission java. net. Socket. Permission "*: 1099", "connect, accept, resolve"; // This allows RMI clients to contact the RMIRegistry of any host }; Java Simplified / Session 22 / 48 of 48 45

Chuyển tham số trong RMI Ø Đối với việc truyền tham số qua mạng

Chuyển tham số trong RMI Ø Đối với việc truyền tham số qua mạng theo cơ chế RMI thì có hai nguyên tắc sau: v. Tất cả các kiểu dữ liệu đơn giản như int, char, … đều được truyền theo tham trị. v. 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ác đối tượng cài đặt giao tiếp Serializable sẽ được truyền theo tham trị. Các đối tượng ko được cài đặt giao tiếp Serializable hay Remote thì ko thể dùng làm tham số truyền qua mạng được Java Simplified / Session 22 / 49 of 49 45

Chuyển đối tượng theo tham trị Giao tiếp Serializable dùng cho mục đích báo

Chuyển đối tượng theo tham trị Giao tiếp Serializable dùng cho mục đích báo hiệu: ◦ Tất cả các lớp đối tượng cài đặt trong giao tiếp Serializable đều có khả năng tuần tự hóa. Khi gọi một phương thức của đối tượng từ xa, nếu trong lời gọi có y/c tham số kiểu đối tượng: ◦ đối tượng sẽ được đóng gói và chuyển toàn bộ đến server (nơi tiếp nhận và thực thi phương thức). ◦ Tại Server, đối tượng được bung ra lại trạng thái ban đầu và được sử dụng Java Simplified / Session 22 / 50 of 50 45

Ex: truyền tham số qua mạng sử dụng giao tiếp Serializable RMI_Ball Java Simplified

Ex: truyền tham số qua mạng sử dụng giao tiếp Serializable RMI_Ball Java Simplified / Session 22 / 51 of 51 45

Output Java Simplified / Session 22 / 52 of 52 45

Output Java Simplified / Session 22 / 52 of 52 45

Chuyển đối tượng theo tham chiếu Khi đối tượng cần chuyển đi quá lớn

Chuyển đối tượng theo tham chiếu Khi đối tượng cần chuyển đi quá lớn -> đóng gói chuyển qua mạng sẽ ảnh hưởng tốc độ thực thi ct. Khi trình chủ có thể tham chiếu và xử lý trực tiếp đối tượng đang nằm trên máy client -> chuyển đối tượng theo tham chiếu từ chủ đến khách -> cơ chế callback. Java Simplified / Session 22 / 53 of 53 45

Thiết kế ct chuyển đổi đối tượng qua mạng theo tham chiếu 1. Đặc

Thiết kế ct chuyển đổi đối tượng qua mạng theo tham chiếu 1. Đặc tả giao tiếp cho đối tượng Client 2. Đặc tả giao tiếp cho đối tượng Server 3. Cài đặt chi tiết cho đối tượng Client 4. Cài đặt chi tiết cho đối tượng Server 5. Xây dựng chương trình cho đối tượng Server trên Server và đăng ký với Registry 6. Thiết kế chương trình Client gọi phương thức của đối tượng Server 7. Tạo lớp trung gian cho cả 2 đối tượng Server và CLient 8. Khởi động rmiregistry 9. Cài đặt đối tượng trên Server 10. Chạy trình khách trên Client Java Simplified / Session 22 / 54 of 54 45

1, 2. Đặc tả g. tiếp cho đối tượng Client, Server import java. rmi.

1, 2. Đặc tả g. tiếp cho đối tượng Client, Server import java. rmi. *; public interface At. Client extends Remote { //pt này được gọi bởi đ. tượng At. Server trên máy chủ public void call. Client. Method(String message) throws Remote. Exception; } public interface At. Server extends Remote { //Tiếp nhận tham chiếu đến đối tượng At. Client trên trình khách public void register. Client(At. Client c) throws Remote. Exception; //Cung cấp dịch vụ cho các trình khách public void call. Server. Method(String message)throws Remote. Exception; } Java Simplified / Session 22 / 55 of 55 45

3. 4. Cài đặt chi tiết cho đối tượng Client, Srv public class At.

3. 4. Cài đặt chi tiết cho đối tượng Client, Srv public class At. Client. Impl implements At. Client { public void call. Client. Method(String mes) throws Remote. Exception { System. out. println(mes); } } public class At. Server. Impl implements At. Server { At. Client client; //lưu giữ tham chiếu đếnđối tượng trên máy khách // trình khách triệu gọi pt để đăng ký At. Client với trình chủ public void register. Client(At. Client c) throws Remote. Exception { client = c; } public void call. Server. Method(String mes)throws Remote. Exception { System. out. println(mes); for (int i=1; i<10; i++){ String msg= "Server response "+ i; //triệu gọi phương thức của đối tượng chạy trên máy khách client. call. Client. Method(msg); } } Java Simplified / Session 22 / 56 of 56 45 }

5. Xây dựng chương trình cho đối tượng Server trên Server và đăng ký

5. Xây dựng chương trình cho đối tượng Server trên Server và đăng ký với Registry public class Server_Setup { public static void main(String args[]) throws Exception { //Khởi tạo đối tượng chủ At. Server server=new At. Server. Impl(); //thông báo khả năng giao tiếp được từ xa Unicast. Remote. Object. export. Object(server); //Đăng ký đối tượng với RMI Naming. bind("rmi: //localhost/serverobject", server); System. out. println("Waiting for clientrequest. . . "); } } Java Simplified / Session 22 / 57 of 57 45

6. Thiết kế chương trình Client gọi phương thức của đối tượng Server public

6. Thiết kế chương trình Client gọi phương thức của đối tượng Server public class Client_Setup { public static void main(String args[]) throws Exception { //Khởi tạo đối tượng khách At. Client client=new At. Client. Impl(); //thông báo khả năng giao tiếp được từ xa Unicast. Remote. Object. export. Object(client); At. Server server= (At. Server)Naming. lookup("rmi: //localhost/serverobject"); //Truyền t. chiếu của At. Client từ trình khách lên chủ //Trình chủ ko cần. lookup để truy tìm tc đến At. Client server. register. Client(client); server. call. Server. Method("Client Contact. Server"); } } Java Simplified / Session 22 / 58 of 58 45

7. Tạo lớp trung gian cho cả 2 đối tượng Server và Client. 8.

7. Tạo lớp trung gian cho cả 2 đối tượng Server và Client. 8. Khởi động rmiregistry Java Simplified / Session 22 / 59 of 59 45

9. Cài đặt đối tượng trên Server 10. Chạy trình khách trên Client Java

9. Cài đặt đối tượng trên Server 10. Chạy trình khách trên Client Java Simplified / Session 22 / 60 of 60 45

Note Java cho phép 1 đối tượng có thể cài đặt một lúc nhiều

Note Java cho phép 1 đối tượng có thể cài đặt một lúc nhiều Interface. Nếu đối tượng cài cả Remote và Serialization thì đối tượng được truyền theo tham chiếu hay tham trị? Java Simplified / Session 22 / 61 of 61 45

Tuần tự hóa đối tượng Tuần tự hóa là quá trình chuyển (read/write) tập

Tuần tự hóa đối tượng Tuần tự hóa là quá trình chuyển (read/write) tập hợp các thể hiện đối tượng chứa các tham chiếu tới các đối tượng khác thành một luồng byte tuyến tính (tuần tự), luồng này có thể được: ◦ gửi đi qua một Socket, ◦ lưu vào tệp tin hoặc được ◦ xử lý dưới dạng một luồng dữ liệu. Việc lưu đối tượng trên đĩa, dữ liệu trên tập tin là loại dữ liệu tuần tự (trải phẳng đối tượng ra theo thứ tự) Java Simplified / Session 22 / 62 of 62 45

Serialization Java Simplified / Session 22 / 63 of 63 45

Serialization Java Simplified / Session 22 / 63 of 63 45

Tuần tự hóa đối tượng Java cung cấp khả năng ghi toàn bộ đối

Tuần tự hóa đối tượng Java cung cấp khả năng ghi toàn bộ đối tượng xuống một tập tin. Sau đó có thể đem tập tin chứa đối tượng đi khắp nơi nếu cần thì khôi phục đối tượng về trạng thái ban đầu. Đối tượng trong bộ nhớ có thể quan hệ chằng chịt với nhau nhưng khi được ghi xuống tập tin thì bắt buộc phải trải phẳng đối tượng theo thứ tự. Java Simplified / Session 22 / 64 of 64 45

Tuần tự hóa đối tượng Java Simplified / Session 22 / 65 of 65

Tuần tự hóa đối tượng Java Simplified / Session 22 / 65 of 65 45

khả tuần tự hóa Chỉ có đối tượng thực thi giao diện Serializable mới

khả tuần tự hóa Chỉ có đối tượng thực thi giao diện Serializable mới có thể được ghi lại và được phục hồi bởi các tiện ích tuần tự hóa một lớp thực thi giao diện Serializable thì lớp đó có khả năng tuần tự hóa->khả tuần tự hóa Java Simplified / Session 22 / 66 of 66 45

Example Serialization public class write. Obj { public static void main(String[] args) throws Exception

Example Serialization public class write. Obj { public static void main(String[] args) throws Exception { Junk obj 1 = new Junk("Lê Xuân Anh"); Junk obj 2 = new Junk("Lê Quốc Ba"); Object. Output. Stream object. Out = new Object. Output. Stream(new Buffered. Output. Stream(new File. Output. Stream("b. txt"))); object. Out. write. Object(obj 1); // Write object class Junk implements object. Out. write. Object(obj 2); // Write object Serializable { object. Out. close(); // Close the output stream String str; Object. Input. Stream object. In = null; public Junk(String s) int Count = 0; { str = s; } Junk object = null; public String to. St(){ object. In = new Object. Input. Stream( return str; } new Buffered. Input. Stream(new File. Input. Stream("b. txt"))); } while (Count < 2) { object = (Junk) object. In. read. Object(); Count++; System. out. println("Object " + Count + ": " + object. to. Str()); } object. In. close(); } } Java Simplified / Session 22 / 67 of 67 45

Đăng ký nhiều đối tượng với RMIRegistry Java Simplified / Session 22 / 68

Đăng ký nhiều đối tượng với RMIRegistry Java Simplified / Session 22 / 68 of 68 45

Quản lý nhiều đối tượng với RMIRegistry Trong java cũng cho phép ta lấy

Quản lý nhiều đối tượng với RMIRegistry Trong java cũng cho phép ta lấy về danh sách các đối tượng mà rmiregistry đang nắm giữ String host. Add = "127. 0. 0. 1"; //kết nối với bộ RMIRegistry reg = Locate. Registry. get. Registry(host. Add); //Lấy danh sách các đối tượng về String Objlist[] = reg. list(); Java Simplified / Session 22 / 69 of 69 45

Factory Object Khi nhiều đối tượng được tạo ra và được đăng ký với

Factory Object Khi nhiều đối tượng được tạo ra và được đăng ký với rmiregistry => Hạn chế: ◦ rmiregistry phải quản lý nhiều đối tượng. ◦ Trình khách phải nhớ các tên đối tượng. Giải pháp: Java cho phép xây dựng: ◦ Một đối tượng được đăng ký rmiregistry và chỉ dùng để tạo ra các đối tượng con khác gọi là Factory object: có thể coi là xưởng chế tác và cung cấp các đối tượng con cho máy khách Factory Object là cách thức giao tiếp khá thông dụng, được đưa vào trong EJB của Java Simplified / Session 22 / 70 of 70 45

Mô hình hoạt động của Factory Object 3. khách triệu gọi đối tượng Factory

Mô hình hoạt động của Factory Object 3. khách triệu gọi đối tượng Factory Object y/c tạo 2. Trình khách liên hệ với đểchiếu lấy tham 4. 1. Đối tượng chủ Factory tạo ra Object và trả đăng về tham ký tên mình của với Object 5. Trình Dựatượng vào tham chiếu dormiregistry Factory Object trảvề về trình ra và cho phép tham chiếu đến Object A or Object BB chiếu đến đối tượng Factory Object A, rmiregistry. Object B theo yêu cầu của trình khách thực hiện lời gọi đến Object A hoặc Java Simplified / Session 22 / 71 of 71 45

Cài đặt ứng dụng Factory Object Có đối tượng Factory dùng để tạo ra

Cài đặt ứng dụng Factory Object Có đối tượng Factory dùng để tạo ra hai đối tượng con: ◦ Factory. Server. Impl: create. News(): tạo ra đối tượng News khi trình khách gọi create. Timer(): tạo ra đối tượng Timer khi trình khách gọi ◦ News. Impl get. Today. News() dùng để lấy về thông tin ◦ Timer. Impl. get. Current. Time(): dùng để lấy ngày giờ hiên tại trên Server Mô hình Java Simplified / Session 22 / 72 of 72 45

Các bước triển khai 1. 2. 3. 4. Đặc tả giao tiếp và cài

Các bước triển khai 1. 2. 3. 4. Đặc tả giao tiếp và cài đặt đối tượng Timer Đặc tả giao tiếp và cài đặt đối tượng New Đặc tả và cài đặt đối tượng Factory. Service Xây dựng trình cài đặt và đăng ký đối tượng Factory. Service với rmiregistry Server_setup: tạo đt Factory. Service, đk với rmi 5. Xây dựng trình khách triệu gọi đối tượng trên máy chủ. Client_Setup: - liên hệ với đt Factory. Service, - y/c tạo 2 đt News và Timer (create. News, create. Timer) - gọi phương thức của 2 đt (get. Today. News(), get. Current. Time() 6. Biên dịch và chạy chương trình Java Simplified / Session 22 / 73 of 73 45

Đặc tả g. tiếp cho News, Timer, Factory. Service package Factory; public interface News

Đặc tả g. tiếp cho News, Timer, Factory. Service package Factory; public interface News extends Remote{ public String get. Today. News() throws Remote. Exception; } package Factory; public interface Timer extends Remote{ public Date get. Current. Time() throws Remote. Exception; } package Factory; public interface Factory. Service extends Remote{ public News create. News() throws Remote. Exception; public Timer create. Timer() throws Remote. Exception; } Java Simplified / Session 22 / 74 of 74 45

Cài đặt cho News, Timer package Factory; public class News. Imp implements News{ String

Cài đặt cho News, Timer package Factory; public class News. Imp implements News{ String newslist [] = {"The first News", "The second News", "The third News"}; static int index=0; public String get. Today. News() throws Remote. Exception { System. out. println("Client request news"); index++; if (index >2) index=0; return newslist[index]; } } package Factory; public class Timer. Imp implements Timer{ public Date get. Current. Time() throws Remote. Exception { System. out. println("Client request time "); return new Date(); } } Java Simplified / Session 22 / 75 of 75 45

Cài đặt cho Factory. Service package Factory; public class Factory. Service. Imp implements Factory.

Cài đặt cho Factory. Service package Factory; public class Factory. Service. Imp implements Factory. Service{ News newsobject = new News. Imp(); Timer timerobject = new Timer. Imp(); public Factory. Service. Imp(){ try { Unicast. Remote. Object. export. Object(newsobject); Unicast. Remote. Object. export. Object(timerobject); } catch (Remote. Exception e) { e. print. Stack. Trace(); System. out. println(e); } } public News create. News() throws Remote. Exception { return newsobject; } public Timer create. Timer() throws Remote. Exception{ return timerobject; } } Java Simplified / Session 22 / 76 of 76 45

Xây dựng trình Server, Client public class Server_Setup { public static void main(String[] args)

Xây dựng trình Server, Client public class Server_Setup { public static void main(String[] args) throws Exception { System. out. println("Factory Service ready. . . "); Factory. Service obj = new Factory. Service. Imp(); Unicast. Remote. Object. export. Object(obj); Naming. bind("rmi: //localhost/Factory", obj); } } public class Client_Setup { public static void main(String[] args) throws Exception{ Factory. Service obj. Fac=(Factory. Service) Naming. lookup("rmi: //localhost/Factory"); News news = obj. Fac. create. News(); Timer timer= obj. Fac. create. Timer(); System. out. println("1. Curent time: " + timer. get. Current. Time()); System. out. println("1. There is news: " + news. get. Today. News()); } } Java Simplified / Session 22 / 77 of 77 45

Output Java Simplified / Session 22 / 78 of 78 45

Output Java Simplified / Session 22 / 78 of 78 45

Static Method Invocation Cách gọi hàm tĩnh: ◦ Đối tượng ở xa phải cung

Static Method Invocation Cách gọi hàm tĩnh: ◦ Đối tượng ở xa phải cung cấp lớp giao tiếp của bản thân đối tượng ◦ Trình khách lấy tham chiếu đến đối tượng bằng hàm Naming. lookup(). ◦ Trình khách gọi các phương thức của đối tượng chủ. ◦ Trình khách sẽ dựa vào lớp giao tiếp này để chuyển kiểu đối tượng dạng tường minh (sau khi nhận được) Ex: Factory. Service obj. Fac= (Factory. Service) Naming. lookup("rmi: //localhost/Factory"); -> Khi đó có thể truy xuất đối tượng ở xa theo cách thông thường (local) Java Simplified / Session 22 / 79 of 79 45

Dynamic Method Invocation Nếu không có lớp giao tiếp của đối tượng từ xa:

Dynamic Method Invocation Nếu không có lớp giao tiếp của đối tượng từ xa: ◦ Không thể chuyển kiểu Dùng kỹ thuật reflect để triệu gọi phương thức động. ◦ Trình khách lấy tham chiếu đến đối tượng bằng hàm Naming. lookup() dạng tổng quát Object, ex Object obj= Naming. lookup("rmi: //localhost/Obj"); ◦ Sau đó, khảo sát đối tượng Truy tìm xuất xứ class: getclass() Truy tìm phương thức của đối tượng: get. Method() ◦ Thực thi phương thức bên trong đối tượng: invoke() Java Simplified / Session 22 / 80 of 80 45

Đặc tả và cài đặt một Remote Interface // Friend. java import java. rmi.

Đặc tả và cài đặt một Remote Interface // Friend. java import java. rmi. *; public interface Friend extends Remote { public String greeting(String name) throws Remote. Exception; } // Friend. java public class Friend. Imp implements Friend{ public String greeting(String name) throws Remote. Exception; return (“Hi " + name + “ Nice to meet you "); } } Java Simplified / Session 22 / 81 of 81 45

Xây dựng chương trình trên Server /* Server_Setup. java*/ public class Server_Setup{ public static

Xây dựng chương trình trên Server /* Server_Setup. java*/ public class Server_Setup{ public static void main(String[] args) throws Exception { //tao doi tuong Calculator thuc su Friend f= new Friend. Impl(); //thông báo sự hiện diện f là đối tượng có khả năng Remote cho JVM Unicast. Remote. Object. export. Object (f); System. out. println(“Friend waitting…. . "); //đăng ky doi tuong với trình quản lý rmi Naming. bind("rmi: //localhost/Friend", f); } Java Simplified / Session 22 / 82 of 82 45

Xây dựng chương trình trên Client /* Client_Setup. java*/ import java. rmi. *; import

Xây dựng chương trình trên Client /* Client_Setup. java*/ import java. rmi. *; import java. lang. reflect. *; public class Client_Setup { public static void main(String[] args) throws Exception { System. out. println("Finding Object … "); Object f= Naming. lookup ("rmi: //localhost/Friend"); // Truy tìm class Class cls=f. getclass(); Class [] Type. Cls = new Class [] {String. class}; Method mthd = f. get. Method(“greeting”, Typecls); Object [] arg = new Object [] {“Quoc Anh”}; String result = (String) mthd. invoke(f, arg); System. out. println(result); } Friend f= (Friend) Naming. lookup ("rmi: //localhost/Friend"); } String result = f. greeting(“Quoc Anh”); Java Simplified / Session 22 / 83 of 83 45

RMIRegistry và vấn đề Firewall Kết nối giữa trình khách và RMIRegistry bị chặn

RMIRegistry và vấn đề Firewall Kết nối giữa trình khách và RMIRegistry bị chặn bởi firewall: Java Simplified / Session 22 / 84 of 84 45

Giải pháp Yêu cầu admin (of firewall) cung cấp 1 số cổng để sử

Giải pháp Yêu cầu admin (of firewall) cung cấp 1 số cổng để sử dụng Sử dụng cơ chế trung gian thông qua cổng 80 của dịch vụ Web. Server để truy xuất và gọi đối tượng: cơ chế Tunneling (cần mô hình lập trình Web services & nghi thức giao tiếp SOAP dựa trên XML) Java Simplified / Session 22 / 85 of 85 45

Tunneling 1. Đối tượng Object đăng ký với RMIRegistry. 3. 4. Web Servlet server

Tunneling 1. Đối tượng Object đăng ký với RMIRegistry. 3. 4. Web Servlet server liên y/c hệ tới một RMIRegistry đối tượng trung để lấy gian tham Servlet chiếu 5. 2. Servlet Máy khách triệu gửi gọi y/c Object truy xuất Object thông qua 6. trả Webserver về kết quả cho Webserver 7. Servlet Cuối cùng trả kết quả về cho trình giao khách trên của máy Object để xử lý thức http chủ đến (server) Webserver. Java Simplified / Session 22 / 86 of 86 45

Web services & SOAP Web services: Giao thức SOAP (Simple Object Access Protocol): ◦

Web services & SOAP Web services: Giao thức SOAP (Simple Object Access Protocol): ◦ cung cấp cơ chế triệu gọi các đối tượng từ xa thông qua web và giao thức HTTP. ◦ Cung cấp cơ chế truyền tải định dạng đối tượng theo XML. ◦ hỗ trợ Web services. ◦ được định nghĩa dựa trên giao thức HTTP, ◦ cho phép dữ liệu chuyển đi bằng HTTP và định dạng chuẩn theo XML. ◦ Các lời gọi hàm, tham số, dữ liệu đều được chuyển thành dạng XML => dễ dàng xử lý bởi bất cứ ngôn ngữ nào Java Simplified / Session 22 / 87 of 87 45

Lập trình phân tán với CORBA Khác với RMI: ◦ Các đối tượng được

Lập trình phân tán với CORBA Khác với RMI: ◦ Các đối tượng được xây dựng trên nền CORBA được áp dụng cho nhiều ngôn ngữ khác nhau. ◦ Bộ phát triển J 2 SDK cũng hỗ trợ RMI-CORBA, cho phép một đối tượng Java gọi một đối tượng CORBA sử dụng hai cách tiếp cận khác nhau CORBA (Common Object Request Broker Architecture): kiến trúc môi giới gọi các đối tượng thông dụng là ngôn ngữ đặc tả giao tiếp (Interface Definition Language - IDL): ◦ Các đối tượng viết bằng ngôn ngữ khác nhau có thể triệu gọi lẫn nhau theo mô hình đối tượng phân tán Java Simplified / Session 22 / 88 of 88 45

Triệu gọi đối tượng Corba thông qua ORB giao tiếp với đối tượng thông

Triệu gọi đối tượng Corba thông qua ORB giao tiếp với đối tượng thông qua các thông tin được đặc tả theo IDL Java Simplified / Session 22 / 89 of 89 45

Giao tiếp giữa trình khách và đối tượng Corba trên Server Java Simplified /

Giao tiếp giữa trình khách và đối tượng Corba trên Server Java Simplified / Session 22 / 90 of 90 45

Giao tiếp giữa trình khách và đối tượng Corba trên Server a. Phần cài

Giao tiếp giữa trình khách và đối tượng Corba trên Server a. Phần cài đặt đối tượng Corba trên máy chủ: Đặc tả đối tượng X bằng IDL của Corba - Chuyển đặc tả X thành một ngôn ngữ cụ thể (dùng 1 trình biên dịch tương ứng: ex: idlj. exe -> java; idl 2 cpp. exe-> C++) - Trình biên dịch sẽ tạo ra lớp _Skel - Cài đặt đối tượng băng ngôn ngữ (Java) - b. Phần kết nối với đối tượng khách: Sử dụng IDL của X y/c trình biên dịch tạo ra _Stub (trình biên dịch tương ưng với trình khách) - Trình khách gọi đối tượng chủ (-> _Stub -> ORB khách -> IIOP -> ORB chủ -> _Skel -> Corba. Object - Java Simplified / Session 22 / 91 of 91 45

Java Simplified / Session 22 / 92 of 92 45

Java Simplified / Session 22 / 92 of 92 45

Summary 1. Để xây dựng đối tượng ở xa ta phải: - Thiết lập

Summary 1. Để xây dựng đối tượng ở xa ta phải: - Thiết lập một giao tiếp của đối tượng. - Cài đặt giao tiếp của đối tượng, - Sau đó tạo ra các lớp trung gian _Stub và _Skel tương ứng. o Giao tiếp ở trình khách với đối tượng chủ thông qua lớp _Stub. o Giao tiếp của đối tượng chủ với trình khách thông qua lớp _Skel - Đối tượng chủ phải đăng ký tên với tring rmi. Registry để trình khách có thể truy tìm tham chiếu của đối tượng từ xa (Naming. bind) - Trình khách truy tìm đối tượng theo tên (Naming. lookup) và gọi phương thức của đối tượng. 2. Chuyển tham số trong RMI: - Truyền dữ liệu giữa trình khách và đối tượng trên máy chủ có thể thông qua tham trị và tham chiếu: o Tham chiếu: các đối tượng phải cài đặt giao tiếp Remote o Tham trị: các đối tượng phải cài đặt giao tiếp Serialization - Tham chiếu từ đối tượng chủ đến đối tượng trên trình khách: tham chiếu ngược (trình chủ có thể chủ động gọi và điều khiển trình khách) Java Simplified / Session 22 / 93 of 93 45