1/ Passing Nonremote Objects (truyền các đối tượng không từ xa):

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 27)

- 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

1/ Passing Nonremote Objects (truyền các đối tượng không từ xa):

- Khi một đối tượng từ xa được truyền từ máy chủ tới máy con, máy con nhận một stub. Sử dụng stub này, máy con có thể thao tác đối tượng máy chủ bằng cách gọi ra phương thức từ xa.Tuy nhiên,đối tượng vẫn lưu trên máy chủ. Nó cũng có thể truyền và trả lại bất kỳ đối tượng khi gọi một phương thức từ xa không chỉ vậy mà còn thực hiện giao diện từ xa.

Ví dụ : phương thức geTDescriptioncủa phần trước trả về một đối tượng kiểu String

Chuỗi đó được tạo ra trên máy chủ và đã được chuyển đến máy con. Bởi vì kiểu String không thực hiện giao diện từ xa nên máy chủ không thể trả về đối tượng stub kiểu chuỗi. Thay vào đó, máy con lấy một bản sao của chuỗi.Khi đó, sau khi gọi, máy con có đối tượng String để làm việc. Điều này có nghĩa rằng không cần

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

bất kỳ kết nối nào thêm nữa cho bất kỳ đối tượng trên máy chủ để phân tán chuỗi đó.

- Bất cứ khi nào đối tượng không phải là đối tượng từ xa thì cần được

chuyển từ -máy ảo Java đến vùng khác,máy ảo Java thực hiện sao chép và gửi bản sao chép đó thông qua kết nối mạng.Kỹ thuật này sử dụng phương pháp cục bộ để truyền tham số.Khi ta truyền đối tượng vào một phương thức cục bộ,hoặc trả về đối tượng từ kết quả của phương thức này,lưu ý là chỉ có đối tượng tham chiếu được truyền.Tuy nhiên, các đối tượng tham chiếu là những địa chỉ nhớ của các đối tượng trong máy ảo Java cục bộ.Thông tin này là vô nghĩa với một máy ảo Java khác.

- Không khó để tưởng tượng rằng làm thế nào để sao chép một chuỗi và chuỗi sao chép đó có thể được chuyển qua mạng.Cơ chế RMI có thể thực hiện sao chép nhiều đối tượng phức tạp hơn nữa, miễn là chúng được tuần tự hóa(được sắp xếp có thứ tự). RMI sử dụng cơ chế tuần tự hóa được mô tả trong “ Tập 1 Java, Chương 12” ,nó thực hiện gửi các đối tượng qua một kết nối mạng. Điều này có nghĩa rằng chỉ có các thông tin trong bất kỳ lớp mà thực hiện giao diện

Serializable có thể được sao chép.

Hình 5-7: Lấy sản phẩm đề xuất từ máy chủ

*Chú ý: Hình 5-7 có một biểu ngữ "Java Applet Window". Đây là kết quả của việc chạy chương trình với một quản lý bảo mật. Biểu ngữ cảnh báo này được cung cấp để bảo vệ chống vi mã "phishing" (vi mã : 1 chương trình ứng dụng nhỏ thực hiện một nhiệm vụ cụ thể). Một vi mã chống đối có lẽ bật lên một cửa sổ, nhắc nhở điền mật khẩu hoặc số thẻ tín dụng, và sau đó gửi thông tin lại đến host của nó. Để tắt chức năng cảnh báo, thêm những dòng sau vào file client.policy:

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

"showWindowWithoutWarningBanner";

- Ghi chú : phish : (máy tính) sự lợi dụng sự không hiểu biết của người dùng để đánh cắp thông tin cá nhân của họ,bằng cách mượn tên công ty(ngân hàng,công ty thẻ tín dụng…) và dẫn người dùng đến trang Wed giả.

- Một đối tượng loại khách hàng (customer) được gửi đến máy chủ. Bởi vì

customer không phải là đối tượng từ xa nên một sao chép đối tượng được thực

hiện trên máy chủ. Chương trình máy chủ gửi lại một danh sách mảng các sản phẩm.Danh sách mảng chứa các sản phẩm mà phù hợp với hồ sơ khách hàng, và nó luôn luôn chứa một mục mà sẽ thỏa đáng bất cứ ai, cụ thể như một bản sao của cuốn sách Core Java. Một lần nữa,ArrayListkhông phải là một lớp từ xa, do đó, danh sách mảng được sao chép từ máy chủ trở lại cho máy con. Như mô tả trong “Tập 1 Java, chương 12”,cơ chế tuần tự hóa thực hiện sao chép tất cả các đối tượng được tham chiếu bên trong một đối tượng được sao chép. Trong trường hợp của ta, nó thực hiện một sao chép tất cả các mảng danh sách truy cập tốt. Chúng ta thêm một điều phức tạp phụ: Các truy cập là các đối tượng product từ xa. Như vậy, người nhận sẽ lấy một bản sao của mảng danh sách,chứa đầy các đối tượng stub với các sản phẩm trên máy chủ .(xem Hình 5-8).

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

-Tổng kết, các đối tượng từ xa được truyền qua mạng như là các stub. Các đối tượng không từ xa được sao chép. Tất cả điều này là tự động và yêu cầu không có người lập trình can thiệp.

- Bất cứ khi nào đoạn mã gọi một phương phức từ xa, stub thực hiện một gói có chứa các bản sao chép của tất cả các giá trị tham số và gửi nó tới máy chủ, sử dụng cơ chế tuần tự hóa đối tượng để sắp xếp có thứ tự các thông số.Máy chủ không sắp xếp thứ tự cho chúng. Đương nhiên, tiến trình có thể khá là chậm khi các đối tượng tham số rất lớn.

- Hãy nhìn vào các chương trình hoàn tất bên dưới. Trước tiên, chúng ta có

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 27)