Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 39 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
39
Dung lượng
115,95 KB
Nội dung
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