Bài giảng Lập trình ứng dụng mạng: Bài 3 - GV. Võ Tấn Dũng
lượt xem 21
download
Bài 3 RMI(Remote Method Invoke)thuộc bài giảng lập trình ứng dụng mạng nhằm trình bày về tổng quan RMI, STUB và SKELETON, cơ chế hoạt động của RMI, giao tiếp SKELETON, thiết kế ứng dụng phân tán RMI, các bước xây dựng một RMI...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình ứng dụng mạng: Bài 3 - GV. Võ Tấn Dũng
- TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI 3 RMI (Remote Method Invoke) GIẢNG VIÊN: VÕ TẤN DŨNG
- PHẦN 1 GIỚI THIỆU TỔNG QUAN VỀ RMI GV: Võ Tấn Dũng
- TỔNG QUAN VỀ RMI • 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 hay 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. GV: Võ Tấn Dũng 3
- Local Machine (Client) Remote Machine (Server) SampleServer remoteObject; int s; … s=remoteObject.sum(1,2); 1,2 public int sum(int a,int b) { return a + b; } 3 System.out.println(s); GV: Võ Tấn Dũng 4
- STUB và SKELETON • 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. GV: Võ Tấn Dũng 5
- Computer A A1 Computer C C1_stub C1_skel A2 C1 B1_stub B1_skel B1 Computer B GV: Võ Tấn Dũng 6
- CƠ CHẾ HOẠT ĐỘNG CỦA RMI Remote Machine • Đầu tiên RMI-server đăng bind ký tên của nó với bộ RMI Server Registry. Registry skeleton • RMI-client tìm tên của RMI-server trong bộ return call lookup Registry để thiết lập truy cập từ xa với RMI-server. stub • Stub đóng gói tham số rồi gửi đến Skeleton. RMI Client Skeleton gọi phương thức từ xa rồi đóng gói kết quả Local Machine gửi về Stub. GV: Võ Tấn Dũng 7
- GIAO TIẾP STUB-SKELETON call skeleton Stub RMI Client RMI Server return • 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. GV: Võ Tấn Dũng 8
- PHẦN 2 THIẾT KẾ ỨNG DỤNG PHÂN TÁN RMI GV: Võ Tấn Dũng
- CÁC BƯỚC XÂY DỰNG MỘT RMI 1. Định nghĩa một giao tiếp từ xa (remote interface) trên server. 2. Xây dựng một đối tượng từ xa (remote object) bằng cách hiện thực giao tiếp từ xa (remote interface). 3. Xây dựng chương trình phía client. 4. Biên dịch các file Java nguồn (phía client và server). 5. Sinh ra các Stub phía client và Skeleton phía server. 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. GV: Võ Tấn Dũng 10
- Step 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ệ RemoteException. /* Calculator.java */ package calculator; import java.rmi.*; public interface Calculator extends Remote { public int sum(int x,int y) throws RemoteException; } GV: Võ Tấn Dũng 11
- Step 2: HIỆN THỰC REMOTE INTERFACE Lớp Calculator ở Step 1 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: /* CalculatorImpl.java*/ import java.rmi.*; public class CalculatorImpl implements Calculator { public int addNum(int x,int y) throws RemoteException { System.out.println(“Client request to calculate”); return (x+y); } } GV: Võ Tấn Dũng C:\RMI>javac CalculatorImpl.java 12
- Step 2: HIỆN THỰC REMOTE INTERFACE (tt) 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*/ C:\RMI>javac CalculatorServer.java import java.rmi.server.*; Import java.rmi.*; public class CalculatorServer { public static void main(String args[]) { try{ //tạo đối tượng Calculator thực sự CalculatorImpl c=new CalculatorImpl(); System.out.println(“Exporting Calculator…”); //thông báo sự hiện diện của đối tượng cho máy ảo Java UnicastRemoteObject.exportObject(c); //đăng ký đối tượng với bộ quản lý rmi Naming.bind(“rmi://localhost/Mycalculator”,c); System.out.println(“Register Calculator!”); } catch(Exception e) { System.out.println(e); } GV: Võ Tấn Dũng } 13 }
- Step 3: 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{ //tìm đối tượng cần truy xuất theo tên System.out.println(“Finding object…”); 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); } } } Chú ý: ở đây c thuộc lớp Calculator nhưng thực tế khi chạy thì chương trình sẽ gọi CalculatorImpl.class GV: Võ Tấn Dũng 14
- Step 4: BIÊN DỊCH CÁC FILE JAVA NGUỒN Phía server ta đã có các fie nguồn là Calculator.java, CalculatorImpl.java, CalculatorServer.java. Tiến hành biên dịch chúng như sau: C:\RMI>javac Calculator.java C:\RMI>javac CalculatorImpl.java C:\RMI>javac CalculatorServer.java Phía bên Client ta đã có file nguồn là CalculatorClient.java. Tiến hành biên dịch như sau: C:\RMI>javac CalculatorClient.java GV: Võ Tấn Dũng 15
- Step 5: SINH LỚP TRUNG GIAN STUB & SKETLETON Dựa vào lớp cài đặt CalculatorImpl.class, trình biên dịch rmic.exe của Java 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>rmic CalculatorImpl Kết quả ta sẽ thu được hai tập tin CalculatorImpl_Stub.class và CalculatorImpl_Skel.class GV: Võ Tấn Dũng 16
- Step 6: 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 có thể không phản hồi cho ta thông tin gì cả bởi vì đây là chương trình 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. Tốt nhất là sau khi khởi động rmiregistry.exe trong cửa sổ DOS-prompt ta hãy thu nhỏ cửa sổ này trên thanh Taskbar của Windows. Khi đã được khởi động thì bộ quản lý rmiregistry này luôn trong trạng thái sẵn sàng phục vụ. Mặc định rmiregistry.exe lắng nghe các kết nối gửi đến cổng 1099. Ta có thể chỉ định số hiệu cổng khác cho rmiregistry. Ví dụ lệnh sau sẽ chạy rmiregistry.exe trên cổng 2003 C:\RMI>rmiregistry.exe 2003 Tùy theo phiên bản Java mà ta cài đặt, ta có thể tìm thấy rmiregistry.exe trong thư mục như C:\Java\jdk1.6.0_11\bin GV: Võ Tấn Dũng 17
- Step 7: KHỞI ĐỘNG CÁC ĐỐI TƯỢNG PHÍA SERVER Ta đã mở một cửa sổ DOS-prompt chạy rmiregistry.exe. Bây giờ ta mở một cửa sổ DOS-prompt khác chạy chương trình CalculatorServer như sau: C:\RMI>java CalculatorServer Exporting Calculator… Register Calculator! Cũng như rmiregistry.exe, sau khi CalculatorServer đượ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. Đến lúc này ta đã có 2 chương trình chạy ở chế độ hậu trường là rmiregistry.exe và CalculatorServer. Mỗi chương trình chạy trên một cửa sổ độc lập. GV: Võ Tấn Dũng 18
- Step 8: 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: C:\RMI>java CalculatorClient Finding Object… 13 (kết quả trả về tổng của 12+1 chính là lời gọi đến phương thức addNum() của đối tượng CalculatorImpl. Theo dõi cửa sổ DOS-prompt nơi chương trình CalculatorServer đang chạy ta sẽ thấy kết xuất sau: “Client request to calculate”.) GV: Võ Tấn Dũng 19
- PHẦN 3 VẤN ĐỀ CHUYỂN THAM SỐ TRONG LỜI GỌI PHƯƠNG THỨC TỪ XA GV: Võ Tấn Dũng
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình ứng dụng Visualbasic: Bài 1 - Phạm Đình Sắc
23 p | 163 | 21
-
Bài giảng Lập trình ứng dụng Visualbasic: Bài 4 - Phạm Đình Sắc
12 p | 147 | 19
-
Bài giảng Lập trình ứng dụng Window Form hướng đối tượng
24 p | 170 | 16
-
Bài giảng Lập trình ứng dụng Visualbasic: Bài 2 - Phạm Đình Sắc
21 p | 130 | 15
-
Bài giảng Lập trình ứng dụng web
328 p | 70 | 13
-
Bài giảng Lập trình ứng dụng Visuabasic: Bài 6 - Phạm Đình Sắc
23 p | 125 | 13
-
Bài giảng Lập trình ứng dụng Visualbasic: Bài 5 - Phạm Đình Sắc
19 p | 110 | 11
-
Bài giảng Lập trình ứng dụng Web - Chương 1: Giới thiệu về lập trình ASP.Net
78 p | 80 | 8
-
Bài giảng Lập trình ứng dụng mạng - Chương 4: Javascript
45 p | 78 | 8
-
Bài giảng Lập trình ứng dụng Web - Chương 10: XML Webservices
24 p | 64 | 7
-
Bài giảng Lập trình ứng dụng Web - Chương 3: HTML Server control và Web Server Control
66 p | 82 | 6
-
Bài giảng Lập trình ứng dụng MiniChat bằng Java dùng cơ chế xử lý Multithread - TS. Nguyễn Văn Hiệp, Nguyễn Quang Hùng
38 p | 112 | 6
-
Bài giảng Lập trình ứng dụng Web - Chương 2: Các lớp sử dụng trong ASP.Net
65 p | 82 | 5
-
Bài giảng Lập trình ứng dụng Web - Chương 6: Lập trình Web với các công nghệ phổ biến
49 p | 82 | 5
-
Bài giảng Lập trình ứng dụng Web - Chương 4: Master Page
18 p | 90 | 4
-
Bài giảng Lập trình ứng dụng Web - Chương 7: Kết gán dữ liệu
29 p | 59 | 4
-
Bài giảng Lập trình ứng dụng Web - Chương 0: Giới thiệu tổng quan về môn học
19 p | 108 | 4
-
Bài giảng Lập trình ứng dụng Web - Chương 5.2: Themes và Skin
19 p | 44 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn