Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java Chú ý : các đối tượng máy chủ của bạn không thực sự mở rộng lớp

Một phần của tài liệu Báo cáo môn học Lập Trình Hệ Thống với Java Đề tài số 7 Tìm hiểu Lập trình phân tán trong Java (Trang 48)

- Hãy chắc chắn để sử dụng URL khi bắt đầu các máy chủ Di chuyển các lớp trong thư mục server vào máy chủ của bạn và bắt đầu đăng ký RMI và máy

47Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java Chú ý : các đối tượng máy chủ của bạn không thực sự mở rộng lớp

Chú ý : các đối tượng máy chủ của bạn không thực sự mở rộng lớp Activatable. Nếu chúng không làm điều đó thì đặt gọi phương thức tĩnh

Activatable.exportObject(this, id, 0)trong hàm tạo của lớp máy chủ.

- Bây giờ chúng ta chuyển sang chương trình sự hoạt hóa. Trước tiên, ta cần phải xác định một nhóm hoạt hóa. Một nhóm hoạt hóa mô tả các thông số chung cho việc khởi động máy ảo có chứa các đối tượng máy chủ. Thông số quan trọng nhất là security policy (cách xử sự bảo mật).

- Cũng như với các đối tượng máy chủ khác của chúng ta, chúng ta không kiểm tra bảo mật. (Có lẽ, các đối tượng đến từ một nguồn đáng tin cậy.) Tuy nhiên, máy ảo (mà trong đó các đối tượng được hoạt hóa chạy) có một sự quản lý bảo mật được cài đặt. Để kích hoạt tất cả các quyền truy cập, cung cấp một tập tin

server.policy với nội dung sau:

grant {

permission java.security.AllPermission; };

- Xây dựng một mô tả nhóm hoạt hóa như sau: Properties props = new Properties();

props.put("java.security.policy", "/server/server.policy"); ActivationGroupDesc group = new ActivationGroupDesc(props, null);

-Tham số thứ hai mô tả các tùy chọn lệnh đặc biệt, chúng ta không cần bất kỳ cho ví dụ này, vì vậy chúng ta truyền một tham chiếu null.

- Tiếp theo, tạo ra một ID nhóm với việc gọi ActivationGroupID id =

ActivationGroup.getSystem().registerGroup(group);

- Bây giờ ta đã sẵn sàng để xây dựng các mô tả hoạt hóa. Đối với mỗi đối tượng mà phải được xây dựng trên nhu cầu, bạn cần những điều sau đây:

 ID nhóm hoạt hóa cho máy ảo mà trong đó đối tượng cần được xây dựng;

 Tên của lớp (như "ProductImpl" hoặc "com.mycompany.MyClassImpl");

 Chuỗi URL mà từ đó để tải các tập tin lớp. Điều này cần có các địa chỉ URL cơ bản, không bao gồm các đường dẫn gói;

 Thông tin xây dựng được sắp xếp theo thứ tự.

Ví dụ:

MarshalledObject param = new MarshalledObject("Blackwell Toaster");

ActivationDesc desc = new ActivationDesc(id, "ProductImpl", http://myserver.com/download /, param);

48 Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java

-Truyền mô tả đến phương thức Activatable.register tĩnh. Nó trả về một đối tượng của một số lớp mà thực hiện các giao diện từ xa của lớp thực hiện. Bạn có thể ràng buộc các đối tượng với dịch vụ tên:

Product p = (Product) Activatable.register(desc); namingContext.bind("toaster", p);

- Không giống như các chương trình máy chủ trong những ví dụ trước, chương trình hoạt hóa thoát sau khi ghi nhận và bắt buộc người nhận hoạt hóa. Các đối tượng máy chủ được xây dựng chỉ khi gọi phương thức từ xa đầu tiên xảy ra.

- Ví dụ 5-14 và 5-15 cho thấy đoạn mã cho việc thực hiện sản phẩm có thể được hoạt hóa và chương trình hoạt hóa. Giao diện sản phẩm và chương trình máy con là không được thay đổi.

- Để khởi động chương trình này, làm theo các bước sau: 1) Biên dịch tất cả các tập tin nguồn.

2) Nếu bạn sử dụng JDK 1.4 hoặc phiên bản thấp hơn , chạy rmic để tạo ra một stub (mạch nhánh) cho lớp ProductImpl:

rmic -v1.2 ProductImpl 3) Bắt đầu đăng ký RMI.

4) Bắt đầu hoạt hóa RMI.

rmid -J-Djava.security.policy=rmid.policy & hoặc (adsbygoogle = window.adsbygoogle || []).push({});

start rmid -J-Djava.security.policy=rmid.policy

+ Chương trình rmid nghe yêu cầu hoạt hóa và hoạt hóa các đối tượng trong một máy ảo riêng biệt. Để khởi động một máy ảo, chương trình rmid cần quyền truy cập nhất định. Điều đó được quy định trong một tập tin xử sự (xem Ví dụ 5-16). Sử dụng tùy chọn –J để truyền một tùy chọn đến máy ảo đang chạy hoạt hóa.

5) Chạy chương trình hoạt hóa.Trong cài đặt này, chúng ta giả định rằng ta bắt đầu chương trình trong bảng kiểm kê chứa các tập tin lớp và các tập tin xử sự máy chủ.

java ProductActivator

+ Chương trình thoát sau khi người nhận hoạt hóa đã được đăng ký xong với dịch vụ tên.

6) Chạy chương trình máy con

java -Djava.security.policy=client.policy ProductClient + Máy con sẽ in các mô tả sản phẩm quen thuộc. Khi ta chạy máy con lần đầu tiên, ta cũng sẽ thấy các thông điệp hàm tạo trong cửa sổ vỏ máy chủ.

49 Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java Example 5-14. ProductImpl.java Example 5-14. ProductImpl.java 1. import java.rmi.*; 2. import java.rmi.server.*; 3. 4. /**

5. This is the implementation class for the remote product 6. objects. 6. objects.

7. */

8. public class ProductImpl

9. extends UnicastRemoteObject 10. implements Product 10. implements Product

11. {

12. /**

13. Constructs a product implementation 14. @param n the product name 14. @param n the product name

15. */

16. public ProductImpl(String n) throws RemoteException 17. { 17. {

18. name = n; 19. } 19. }

20.

21. public String getDescription() throws RemoteException 22. { 22. {

23. return "I am a " + name + ". Buy me!"; 24. } 24. }

25.

26. private String name; 27. } 27. } Example 5-15. ProductActivator.java 1. import java.io.*; 2. import java.net.*; 3. import java.rmi.*; 4. import java.rmi.activation.*; 5. import java.util.*; 6. import javax.naming.*; 7. 8. /**

Một phần của tài liệu Báo cáo môn học Lập Trình Hệ Thống với Java Đề tài số 7 Tìm hiểu Lập trình phân tán trong Java (Trang 48)