Bài giảng công nghệ lập trình tích hợp chương 7 ts nguyễn quang uy

39 0 0
Bài giảng công nghệ lập trình tích hợp chương 7   ts  nguyễn quang uy

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương Lập trình phân tán - RMI Mục lục chương • • • • • Cơ RIM Cài đặt RMI Biên dịch thực RMI Sử dụng RMI An Ninh lập trình phân tán RMI Cơ RMI • Trong chương trình trước, phương thức mà ta gọi đến thuộc đối tượng nằm máy tính cục • Tuy nhiên môi trường phân tán (distributed environment), thường yêu cầu ta gọi đến phương thức thuộc đối tượng xa • RMI (Remote Method Invocation) cung cấp phương pháp độc lập với tảng để ta thực điều Cơ RMI • Trong mơ hình RMI có hai phía ứng dụng phía Client Server • Server cung cấp phương thức mà Client gọi đến • Client gọi đến phương thức xa cung cấp Server Cơ RMI • Trong RMI, server đăng ký giao tiếp (register) với dịch vụ tên nhờ mà giao tiếp truy cập client • Client sau sử dụng tên đăng ký để nhận tham chiếu đến giao tiếp – Các tham chiếu gọi stub – Các stub coi người đại diện cho phương thức xa máy cục • Bên phía server có đại diện gọi skeleton Cơ RMI • Khi mà Client gọi đến phương thức xa, RMI coi client gọi trực tiếp phương thức từ stub • Stub sau truyền lời gọi tham số đến skeleton • Một ý kiển liệu nguyên thủy kiểu liệu tham chiếu cài đặt giao tiếp Serializable truyền tham số – Các kiểu liệu cài đặt giao tiếp Serializable gọi marshalling Cơ RMI • Skeleton nhận lời gọi từ client dạng streams • Skeleton chuyển đổi streams thành lời gọi ban đầu thực phương thức Mơ hình hoạt động RMI Cài đặt RMI • Các gói sử dụng để cải đặt RMI bao gồm: java.rmi, java.rmi.server and java.rmi.registry • Các bước để thực ứng dụng RMI sau: – Tạo giao diện – Định nghĩa lớp cài đặt giao điện – Tạo chương trình server – Tạo chương trình Client Cài đặt RMI • Sau ta bắt tay vào cài đặt ứng dụng RMI đơn gian server publish phương thức client gọi đến phương thức • Khi phương thức thực thị xâu ký tự 10 Dịch chạy chương trinh RMI • Mở cửa sổ lệnh mời chạy chương trình client – Ta mở cửa sổ thực lệnh – java HelloClient 25 Sử dụng RMI thực tế • Trong ví dụ trước ta mởi sử dụng RMI cách đơn gian • Trong thực tế có nhiều phương thức nhiều đối tượng cài đặt • Trong ứng dụng vậy, có hai chiến lược để triên khai 26 Sử dụng RMI thực tế • Hai chiến lược là: – Sử dụng đối tượng lớp cài đặt để chứa đối tượng lớp mà phương thức publish Truyền tham số lớp thứ hai cho trỏ lớp thứ – Sử dụng lớp cài đặt để chứa trực tiếp liệu phương thức Tạo thể lớp thay tạo lớp riêng biệt 27 Sử dụng RMI thực tế • Ví dụ: – Trong ứng dụng này, số đối tượng bank account tạo client kết nối tới – Client sau thực số thao tác đối tượng cách gọi phương thức – Để cho đơn gian thi ta tạo đối tượng bank account 28 Sử dụng RMI thực tế • Phương pháp • Tạo giao tiếp – Giao tiếp ta gọi Bank1 cấp phương thức getBankAccounts để tra vector account – import java.rmi.*; – import java.util.Vector; – public interface Bank1 extends Remote –{ – public Vector getBankAccounts() – throws RemoteException; –} 29 Sử dụng RMI thực tế • Định nghĩa lớp cài đặt – – – – – – – – – – – – – – – – – import java.rmi.*; import java.rmi.server.*; import java.util.Vector; public class Bank1Impl extends UnicastRemoteObject implements Bank1 { private Vector acctInfo; public Bank1Impl(Vector acctVals) throws RemoteException { acctInfo = acctVals; } public Vector getBankAccounts() throws RemoteException { return acctInfo; } } 30 Sử dụng RMI thực tế • Tạo lớp ứng dụng theo yêu cầu – Chỉ có lớp ứng dụng account cần tạo – Lớp phải cài đặt giao tiếp Serializable 31 Sử dụng RMI thực tế • Tạo lớp ứng dụng theo yêu cầu – import java.io.Serializable; – public class Account implements Serializable – { – private int acctNum; – private String surname; – private String firstNames; – private double balance; – – – – – – – public Account(int acctNo, String sname, String fnames, double bal) { acctNum = acctNo; surname = sname; firstNames = fnames; balance = bal; } 32 Sử dụng RMI thực tế • Tạo lớp ứng dụng theo yêu cầu – public int getAcctNum() – { – return acctNum; – } – – – – public String getName() { return (firstNames + " " + surname); } – – – – public double getBalance() { return balance; } 33 Sử dụng RMI thực tế • Tạo lớp ứng dụng theo yêu cầu – public double withdraw(double amount) – { – if (amount 0) – balance += amount; – } – } 34 Sử dụng RMI thực tế • Xây dựng ứng dụng server – – – – – – – – – – – – import java.rmi.*; import java.util.Vector; public class Bank1Server { private static final String HOST = "localhost"; public static void main(String[] args) throws Exception { Account[] account = {new Account(111111,"Smith","Fred James",112.58), new Account(222222,"Jones","Sally",507.85), new Account(234567,"White","Mary Jane",2345.00), new Account(666666,"Satan","Beelzebub",666.00)}; 35 Sử dụng RMI thực tế • Xây dựng ứng dụng server – Vector acctDetails = new Vector(); – – for (int i=0; i

Ngày đăng: 27/07/2023, 08:34