Chương 2 Hệ thống đối tượng phân tán
2.2 Sự phân tán trong môi trường Java: RMI
2.2.1 Hệ thống đối tượng phân tán trong môi trường Java
Các hệ thống phân tán đòi hỏi sự truyền thông giữa các quá trình tính toán diễn ra trong các không gian địa chỉ khác nhau, rõ hơn đó là các host khác nhau. Đối với kĩ thuật truyền thông cơ bản, ngôn ngữ lập trình Java hỗ trợ các socket, một cơ chế khá mềm dẻo và hiệu quả cho sự truyền thông thông thường. Tuy nhiên, các socket đòi hỏi client và server phải tham gia vào các giao thức mức ứng dụng (applications-level protocols) để mã hóa và giải mã các thông điệp được trao đổi, và việc thiết kế các giao thức đó là nặng nề và có thể dễ gây lỗi[10].
Một sự thay thế các socket đó là lời gọi thủ tục từ xa (RPC - Remote Procedure Call), trừu tượng hóa giao diện truyền thông tới mức của một lời gọi thủ tục. Thay cho sự làm việc trực tiếp với các socket, lập trình viên có cảm giác như đang gọi một thủ tục địa phương, khi mà trong thực tế các đối số của lời gọi được đóng gói và được gửi tới đích ở xa của lời gọi. Các hệ thống RPC mã hóa các đối số và trả về các giá trị, sử dụng một sự biểu diễn dữ liệu bên ngoài, ví dụ như XDR.
RPC, tuy nhiên lại không truyền đạt tốt vào trong các hệ thống đối tượng phân tán, nơi mà sự truyền thống giữa các đối tượng mức chương trình (program-level objects) cư trú trong các không gian địa chỉ được yêu cầu. Để so khớp các ngữ nghĩa của lời gọi đối tượng, các hệ thống đối tượng phân tán cần đến lời gọi phương thức từ xa hay RMI (Remote Method Invocation) . Trong các hệ thống được đề cập trên, một đối tượng đại diện địa phương (local surrogate (stub) object) sẽ quản lý các lời gọi trên một đối tượng từ xa.
Mục đích hỗ trợ đối tượng phân tán trong ngôn ngữ Java là:
- Hỗ trợ liền mạch triệu gọi từ xa đối tượng trên các máy ảo khác nhau. - Hỗ trợ callback từ các server tới các applet.
- Tích hợp mô hình đối tượng phân tán vào ngôn ngữ lập trình Java một cách tự nhiên trong khi vẫn giữ lại được hầu hết ngữ nghĩa đối tượng của ngôn ngữ lập trình Java.
- Tạo nên sự khác biệt giữa mô hình đối tượng phân tán với mô hình đối tượng của nền Java cục bộ.
- Duy trì được các kiểu an toàn (type-safety) cung cấp bởi môi trường runtime của nền Java.
- Hỗ trợ các kiểu tham chiếu ngữ nghĩa khác nhau cho các đối tượng từ xa; ví dụ các kiểu tham chiếu trực tiếp (live), không liên tục hay các kiểu tham chiếu liên tục hay lazy activation.
Duy trì nền an toàn của nền Java được cung cấp bởi các security manager và các class loader.
Các mục đích trên cũng chính là yêu cầu đối với mô hình RMI sao cho đơn giản (dễ sử dụng) và tự nhiên (hợp với ngôn ngữ).
Sự khác biệt giữa mô hình phân tán và không phân tán trong môi trường Java như sau
Trong nền Java, mô hình đối tượng phân tán và mô hình đối tượng có những điểm chung:
Một tham chiếu đến một đối tượng từ xa có thể được gửi như là một đối số hay được trả về như là một kết quả của lời gọi phương thức (cả cục bộ hay từ xa).
Một đối tượng từ xa có thể đặt(cast) trong tập các giao diện từ xa bất kỳ hỗ trợ bởi các thi hành có sử dụng cú pháp cho việc đặt được cài sẵn trong ngôn ngữ lập trình Java.
Toán tử cài sẵn instanceof có thể sử dụng để test các giao diện từ xa được cung cấp bởi một đối tượng từ xa.
Trong nền Java, mô hình đối tượng phân tán khác với mô hình đối tượng ở những điểm sau:
Các client của các đối tượng từ xa tương tác với các giao diện từ xa chứ không tương tác với lớp thi hành của các giao diện đó.
Các đối không từ xa gửi tới, và kết quả trả về từ lời gọi phương thức từ xa được gửi bằng một bản copy chứ không phải là tham chiếu. Đó là vì các tham chiếu tới đối tượng chỉ có tác dụng trong một máy ảo đơn.
Một đối tượng từ xa được gửi đi bằng tham chiếu chứ không phải là một bản copy của sự thực thi từ xa thật sự
Ngữ nghĩa của một số phương thức được định nghĩa trong lớp java.lang.Object cũng thích ứng với các đối tượng từ xa.
Khi chế độ lỗi của triệu gọi đối tượng từ xa phức tạp hơn chế độ lỗi của triệu gọi đối tượng cục bộ thì phía client sẽ phải thêm vào các ngoại lệ (exception) có thể xảy ra trong quá trình triệu gọi phương thức từ xa.