Thuật toánnày đảm bảo rằng thời gian nhận thông điệp là sau thời gian phát nó đi.Với thời gian này cho phép xác định một quan hệ trật tự toàn bộ mà ta đã ký hiệu → và cho phép kiểm tra đ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
GVHD : PGS - TS Lê Văn Sơn
Học viên : Nguyễn Văn Định Môn học : Lập Trình Mạng Nâng Cao Lớp : Khoa Học Máy Tính –Khóa 24
Trang 2LỜI NÓI ĐẦU
ự phát triển nhanh chóng của công nghệ thông tin và truyền thông trên thế giớitrong các năm qua, mạng máy tính ra đời và đóng vai trò hết sức quan trọngtrong nhu cầu khai thác, lưu trữ, quảng bá thông tin trên thế giới Một vấn đề đặt
ra là làm sao để đảm bảo môi trường truyền thông hiệu quả, bảo đảm cho hoạt động traođổi thông tin của các hệ thống truyền thông hoạt động thông suốt, đáp ứng yêu cầu traođổi thông tin của con người
và không đơn giản Trong phạm vi tiểu luận môn học lập trình mạng, với đề tài: “Viết
chương trình cài đặt thuật toán sẵp xếp theo kiểu đóng dấu” nội dung tiểu luận bao
gồm:
- Nghiên cứu bản chất của phương pháp đóng dấu vào thông điệp trước khi gởi đi cho tất cả các server qua hệ thống đường truyền.
- Xây dựng hệ thống đa server.
- Xây dựng chương trình Monitoring quan sát trường dấu trong hàng đợi các thông điệp tại server nhận.
- Viết chương trình cài đặt thuật toán sắp xếp kiểu đóng dấu.
Xin chân thành cám ơn sự hướng dẫn của thầy PGS.TS.Lê Văn Sơn và các bạn học
viên trong lớp đã giúp tôi hoàn thành tiểu luận này
Trang 31.1.2 Cung cấp phân tán.
Vì lý do ổn định và hiệu quả, chức năng cung cấp phải được phân tán trên nhiềutrạm khác nhau Sự hoạt động gắn bó với nhau giữa các chương trình cung cấp là rất cầnthiết để đảm bảo cho hoạt động cung cấp được hoàn toàn chính xác Một sự gắn bó củacác chương trình cung cấp phân tán quản lý trên cùng một tập hợp các tài nguyên chỉ đạtđược nếu tuân thủ các quy tắc sau, ở đây các thông điệp được hiểu là các yêu cầu haykhuyến nghị giải phóng tài nguyên
- Các bộ cung cấp bắt buộc phải thực hiện cùng một giải thuật
- Các bộ cung cấp đều nhận tất cả các thông điệp phát đi từ các tiến trình
- Các thông điệp phải được xử lý cùng một trật tự như nhau trong một chương trình cungcấp
1.1.3 Các yêu cầu cơ bản cần nghiên cứu giải quyết của hệ phân tán.
- Lập trình và thực hiện cho hệ thống đa truy cập, ngẫu nhiên, số lượng lớn
- Định danh cho các đối tượng qua hệ thống viễn thông
- Cấu trúc lập trình được cho các truy vấn đa chiều và đáp ứng lại truy vấn
- Trình tự và đồng bộ các tiến trình hoạt động
- Gắn bó thông tin (Coherence) và vấn đề nhiều bản sao
Trang 4- Vấn đề xử lý - tính toán đồng thời trong hệ
- Vấn đề đa Server và hệ điều khiển - giám sát của người quản trị hệ thống
- Vấn đề tin cậy và hiệu năng hệ thống
1.2 Khái quát vấn đề về đóng dấu
Đóng dấu là hành vi gán giá trị nguyên cho một thông điệp nhằm ghi nhận thờiđiểm truyền trên cơ sở tham chiếu đồng hồ logic
Nội dung cơ bản của phương pháp này là trạm phát được gắn một giá trị khi phát
đi gọi là dấu Giá trị này có tính chất thời điểm cho trạm phát thông tin và dựa vào đồng
hồ Logic cục bộ của chính trạm Các đồng hồ này được lấy lại thông qua hội thoại giữacác trạm
1.3 Sự gắn bó thông tin
Là sự ràng buộc toàn vẹn (Integrity constraint) của các tập thông tin, thể hiện ởràng buộc về cấu trúc (Structure constraint) và hành vi (behavioral constraint), các ràngbuộc này thể hiện sâu sắc các đặc tính riêng biệt của hệ
Trạng thái gắn bó: là trạng thái của hệ thoả mãn một tập các ràng buộc toàn vẹn
Lưu ý: Trạng thái của hệ xác định có gắn bó hay không chỉ xác định được ở mức
quan sát cho trước
Ta quan tâm đến hai mức quan sát sau:
1 người sử dụng (NSD) Tiến trình là một dãy các giao dịch
Giao dịch đó là chương trình duy nhất được thực hiện
từ một trạng thái gắn bó dẫn hệ đến một trạng tháigắn bó khác
2 Hệ thống Mỗi giao dịch được cấu tạo từ một dãy các tác động
Như hình sau ta thể hiện mức quan sát 1
Trang 5Trạng thái II: thực hiện các thao thác ghi nên là trạng thái không gắn bó
Trạng thái III: là trạng thái sau khi ghi - phải là trạng thái gắn bó.
Sự gắn bó thông tin có nhiều cơ chế gắn bó đối với đề tài này chỉ xét gắn bó trên
1.4.2 Triển khai hệ ổn định
Các giao dịch cần xét là các khả năng đọc, ghi hay cập nhật Cập nhật được xácđịnh như là một dãy các thao tác kiểm tra - đọc tức thì trạng thái hiện hành của một bảnsao
Ta giới hạn vấn đề trong phép toán rất quan trọng là phép ghi Mỗi một server tiếpnhận các yêu cầu ghi đến từ trạm cuc bộ ở thời điểm cho trước Nó tiếp nhận các yêu cầu
và tính toán trên cơ sở dấu theo tiêu chí lâu nhất Việc xác định yêu cầu không được tiếnhành ngay tức khắc vì nguyên do ta không thể biết chắc chắn yêu cầu nào là lâu nhất Yêucầu lâu nhất có thể đang truyền trên đường Tính không chắc chắn này xuất hiện có điềukiện với giả thiết về viễn thông Khi trạm i truyền các thông điệp cho trạm j, trật tự nhậnthông điệp tại j là hoàn toàn giống với trật tự của các thông điệp phát đi Giả thiết nàyđược kiểm tra trong các mạng thông thường Việc xác định yêu cầu cần xử lý trên mộttrạm là hoàn toàn có thể
Có hai trường hợp cần xem xét:
- Tập hợp yêu cầu ghi khi chờ chứa các yêu cầu từ tất cả các trạm khác Trongtrường hợp này các yêu cầu đi qua, nếu chúng tồn tại, là mới hơn so với các yêu cầu đã điqua Nói cách khác, yêu cầu lâu nhất chính là yêu cầu đang chờ
- Tồn tại các trạm mà không có bất kỳ yêu cầu nào được truyền đến Ta được đưa
Gắn bó
Trang 6bắt buộc phải xác nhận Do vậy, sau một khoảng thời gian, theo giả thiết về độ ổn định, ta
sẽ nhận hoặc là các yêu cầu đi qua, hoặc là các trả lời cho thông điệp yêu cầu Lúc này, ta
có được các thông điệp đến từ tất cả các trạm
Để tăng tốc độ thực hiện thuật toán, ta có thể đưa vào trên mỗi trạm một hàng đợicho từng trạm của mạng bao gồm cả các trạm cục bộ, các truy vấn được đưa vào đầu hàngđợi theo kỹ thuật FIFO (First In First Out)
1.4.3 Các hành vi bên ngoài của chế độ bình thường
Hai vấn đề mở rộng hơn đối với thuật toán này cho phép lấy ra hay chèn vào tuỳ ýmột trạm nào đó Ngược lại, thuật toán chỉ sống trong trường hợp có sự cố, nếu các điềukiện sau đây được tôn trọng:
1.5 Thuật toán sắp xếp trên cơ sở dấu
Giải thuật được trình bày ở đây là giải thuật Lamport nhằm cho phép ghi lại các sựkiện của hệ tin học phân tán
Mỗi trạm s đều có trang bị công tơ với các giá trị nguyên gọi là Hs Đó chính làđồng hồ logic tăng lên giữa 2 sự kiện kế tiếp Trạm e phát thông điệp ghi dấu E của mìnhdựa trên giá trị hiện hành của He Khi nhận được thông điệp, trạm nhận r cập nhật đồng
hồ Hr riêng của mình bằng giải thuật sau:
Nếu H r , , thì
H r :=E+1 Chấm dứt nếu
Trang 7Sự kiện “nhận thông điệp” lúc này được ghi nhận bằng giá trị của Hr Thuật toánnày đảm bảo rằng thời gian nhận thông điệp là sau thời gian phát nó đi.
Với thời gian này cho phép xác định một quan hệ trật tự toàn bộ mà ta đã ký hiệu
→ và cho phép kiểm tra được các điều kiện trong C1 và C2 của trật tự từng phần
Một sự kiện a sinh ra trong trạm i và được đánh dấu bởi đồng hồ cục bộ gọi là Hi(a) Nếu
a và b đều là 2 sự kiện trên 2 trạm i và j, ta luôn có quan hệ xác định như sau:
a→b <=> H i (a) < H i (b)
Đó là trật tự không chặt chẽ do vì hai sự kiện trên 2 trạm khác nhau có thể đếncùng một thời điểm giống nhau
Ta có thể mở rộng quan hệ → thành quan hệ trật tự chặt chẽ => bằng cách kết hợpmột số các cố định cho mỗi trạm và bằng cách đánh dấu thời gian cho mỗi sự kiện a củatrạm i bằng cặp (Hi(a),i)
Theo định nghĩa ta có:
1.6 Các thuật toán gắn bó trên cơ sở đóng dấu
1.6.1 Phương pháp đánh nhãn thời gian cơ bản
Mục tiêu của phương pháp đánh dấu là các giao tác được sắp xếp theo một thứ tựtổng thể theo thời gian Trong việc thiết lập thứ tự này, bộ quản lý các giao tác gán chomỗi giao tác Ti một dấu thời gian TS(Ti) duy nhất tại thời điểm nó khởi tạo, một nhãnthời gian có các thuộc tính sau:
Nhãn thời gian có các thuộc tính:
+ TS(Ti): là định danh duy nhất của Ti (nghĩa là các giao tác khác nhau có các nhãn thờigian khác nhau)
+ Với 2 giao tác A, B bất kỳ , nếu A xãy ra trước B thì TS(A)<TS(B)
Tại một trạm đơn, quan hệ xảy ra trước ký hiệu có thể được tổng quát hoá trong
a=>b => (Hi(a) < Hi(b)) hay
(Hi(a) = Hi(b) và i<j)
Trang 81 Nếu A và B là 2 giao tác ở cùng 1 trạm và A xãy ra trước B thì AB.
2 Nếu giao tác A có gửi một thông điệp và giao tác B có nhận cùng thôngđiệp thì AB
3 Nếu AB và BC thì AC
Quan hệ là quan hệ thứ tự bộ phận, ta gọi 2 giao tác A và B là đồng thời, nếu nhưkhông có cả A B lẫn BA
Với lưu ý, nếu 2 giao tác A và B là đồng thời thì có thể TS(A) < TS(B) hoặcTS(B)<TS(A) Tuy nhiên, sau khi chúng ta đã gán thời gian cho các giao tác thì phải địnhnghĩa thứ tự tổng thể ngay cả các giao tác đồng thời
Trong 1 hệ thống phân tán, yêu cầu tính duy nhất của nhãn thời gian có thể dễ dàngđược thoả mãn bằng cách xác định nhãn thời gian là một bộ 2 thành phần:
- Nhãn thời gian cục bộ, định danh của trạm
Định danh của trạm được đưa vào vị trí có trọng số thấp nhất, để tránh khả năng tất
cả các nhãn thời gian do cùng một trạm sinh ra đều lớn hơn tất cả các nhãn thời gian domột trạm khác sinh ra
- Yêu cầu thứ 2 của nhãn thời gian thì phức tạp hơn Tại mỗi trạm ta dùng một bộ đếm đểđảm bảo các giao tác cùng một trạm sẽ có thứ tự đúng Bộ đếm này sẽ tự động tăng giá trịkhi có một nhãn thời gian mới được sinh ra
Điều cần lưu ý: là việc đồng bộ hoá giữa các bộ đếm ở các trạm khác nhau sẽ rất khó
khăn Có thể một bộ đếm ở một trạm sẽ được dùng để phát sinh nhãn thời gian nhiều hơn
bộ đếm ở trạm khác, do đó sẽ tăng nhanh hơn
Các bộ đếm ở hai trạm có thể gần xấp xỉ nhau, chỉ đơn giản bằng cách bao gồmtrong mỗi thông điệp giá trị bộ đếm của trạm đã gởi thông điệp đó Nếu một trạm nhậnđược thông điệp với giá trị nhãn thời gian TS lớn hơn giá trị bộ đếm hiện hành của nó thì
nó sẽ tăng lên thành TS + 1 Bằng cách này, các bộ đếm của các trạm điều phối sẽ giữ chođồng bộ hoá một cách xấp xỉ Nếu 2 trạm không phải là điều phối, việc các bộ đếm củachúng sai biệt nhau không là vấn đề quan trọng Việc sử dụng bộ đếm là thường dùng hơnđồng bộ hệ thống
Ta đưa ra giải thuật thực hiện thao tác Pre_Write trên cơ sở dấu
Trang 9* GIẢI THUẬT PRE_WRITE (1.1)
Begin
Ti cố gắng pre_write lên khoản mục dữ liệu x
If x đã được đọc và ghi bởi giao tác mới hơn có nghĩa là
Trang 10* GIẢI THUẬT WRITE (1.2)
Begin
Ti cố gắng cập nhật (ghi) lên khoản mục dữ liệu x
If có một cập nhật chưa được giải quyết trên x bởi giao tác cũ hơn Ti có nghĩa làTS(Tj)<TS(Ti)
Then Ti đợi cho đến khi Tj chuyển giao hay khởi động lại
có thao tác ghi chưa giải quyết trong bộ đệm đối với dữ liệu bởi các giao tác cũ hơn Ti
Nếu thao tác đọc bởi Ti được thừa nhận, thì TS(read(x)) sẽ được cập nhật thànhTS(Ti) và thao tác ghi của Tj sẽ không có giá trị khi khoản mục dữ liệu x được đọc bởigiao tác mới Ti Do đó, như trường hợp thao tác ghi, Ti phải chờ cho đến khi Tj chuyểngiao hay được khởi động lại Điều này tương đương với việc ứng dụng khoá tranh chấptrên các khoản mục dữ liệu giữa các thao tác pre_write và write giải thuật cho thao tácđọc được nêu ra như sau:
* GIẢI THUẬT READ (1.3)
Begin
Ti cố gắng thực hiện đọc trên khoản mục dữ liệu x
If <x đã được cập nhật bởi một giao tác mới hơn có nghĩa là TS(Ti)<TS(write(x))>
Then bỏ qua thao tác đọc hay khởi động lại Ti
Trang 11thừa nhận thao tác đọc và thiết lậpTS(read(x)) = max(TS(read(x)), TS(Ti))
Endif Endif
End.
1.6.2 Phương pháp đánh nhãn thời gian bảo toàn
- Nhược điểm chính của phương pháp đánh nhãn thời gian cơ bản là số lượng cáclần khởi động lại lớn Phương pháp đánh dấu thời gian bảo toàn là phương pháp làm giảmthiểu việc khởi động lại bằng cách chứa trong bộ đệm những thao tác mới hơn cho đếnkhi tất cả các tranh chấp đã được thực thi
- Phương pháp này là: Mỗi trạm duy trì nhiều cặp queue (hàng đợi), một queue đọc
và một queue ghi cho tất cả các trạm trên mạng mỗi queue đọc chứa các yêu cầu cho cácthao tác đọc trên dữ liệu cục bộ từ các giao tác có nguồn gốc tại một trạm từ xa, trong khimỗi queue ghi duy trì các thông tin tương tự cho các yêu cầu cập nhật Các yêu cầu cậpnhật và đọc được đánh nhãn với nhãn thời gian của các giao tác đã đưa ra chúng Hơn thế,các queue được duy trì với thứ tự các nhãn thời gian gia tăng (có nghĩa là giao tác cũ nhấtluôn luôn nằm ở đầu mỗi queue)
- Các quy tắt sau đây được áp dụng:
1) Tất cả các trạm đảm bảo sự chuyển giao (kết thúc) các giao tác tại các trạm riêng của
nó theo thứ tự nhãn thời gian
2) Các giao tác không gọi các tác nhân tại các trạm từ xa, chúng chỉ thực hiện các thao tácđọc, ghi từ xa
3) Các yêu cầu đọc và ghi từ trạm M đến trạm N phải đến theo tứ tự nhãn thời gian: Điềunày có thể thực hiện bằng cách các giao tác hoàn thành tất cả các gia tác đọc trước cácthao tác ghi Vì vậy các giao tác cũ hơn sẽ thực hiện các giao tác đọc (ghi) trước các giaotác mới hơn, các giao tác mới hơn tại trạm M sẽ đợi cho đến khi tất cả các thao tác đọc(ghi) cũ hơn đã được gởi đến trạm M
Trang 12Trạm B thực hiện 1 yêu cầu đọc r B
A đối với một khoản mục dữ liệu được lưu trữ ởtrạm A
Chèn r B
A vào vị trí thích hợp phù hợp nhãn thời gian của nó TS (r B
A), trong queueđọc RQB
A.Kiểm tra tất cả yêu cầu cập nhật được xếp hàng từ tất cả các trạm j là mới hơn r B
A ,nếu khác thì chờ
For tất cả các trạm i
Do while TS(UQ B
A) <TS(r B
A )Chờ
End doEnd for
thực hiện đọc r B
A
End.
Trang 13* GIẢI THUẬT WRITE (2.2)
Begin
Trạm B thực hiện 1 yêu cầu ghi u B
A đối với một khoản mục dữ liệu được lưu trữ ởtrạm A
Chèn u B
A vào vị trí thích hợp phù hợp nhãn thời gian của nó (TS (u B
A)), trongqueue đọc UQB
A.Kiểm tra tất cả yêu cầu cập nhật được xếp hàng từ tất cả các trạm i là khác rỗng
For tất cả các trạm i
Do while (UQ i
A) = 0ChờEnd do
End for
thực hiện cập nhật cũ nhất (có nghĩa là cập nhật ở đầu queue trong UQB
A ) không cần thiếtbằng u B
A
End.
Trang 14Bắt đầu
Có server khởi động
Thông báoTrue
False
Trang 15Sơ đồ khối
2.3 RMI (Remote Method Invoke) và lập trình phân tán đối tượng
Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hay hàmgọi Mã lệnh của hàm hay thủ tục được nạp thẳng vào ký ức và thực thi ngay trên máy cục
bộ Đối với các hàm (hoặc đối tượng) thư viện như System.out.println() chẳng hạn bạnthường không cần phải quan tâm đến cách thức mà hàm thư viện được cài đặt Điều màhầu hết các lập trình viên quan tâm là đối số truyền cho hàm và kết quả trả về Vậy thì cócách nào tập nội dung của hàm hay đối tượng ở một máy nào đó và gọi chúng từ mộtmáy khác hay không? Đây chính là nội dung của lập trình phân tán mã lệnh RMI
(Remote Method Invoke) – mang ý nghĩa triệu gọi phương thức từ xa – là cách thức giao
tiếp giữa các đối tượng Java có mã lệnh cài đặt (bao gồm phương thức và thuộc tính) nằmtrên các máy khác nhau có thể triệu gọi lẫn nhau
False
Trang 16Trên máy A các đối tượng A1, A2 gọi phương thức của nhau được gọi là triệu gọiphương thức cục bộ (local method Invoke) đây là cách mà lập trình hướng đối tượngtruyền thống vẫn sử dụng Tương tự, tương tác giữa C1, C2, C3 là tương tác cục bộ.Tuy nhiên, đối tượng Java có thể gọi phương thức của đối tượng nằm trên một máy khácdựa vào giao thức triệu gọi từ xa RMI (như A1 gọi C1, A2 gọi B1, C3 gọi B1)
2.3.1 Gọi phương thức từ xa và các vấn đề phát sinh
Việc gọi phương thức của đối tượng từ xa thoạt nhìn có vẻ đơn giản nhưng thực tếlại phức tạp hơn triệu gọi phương thức cục bộ Các đối tượng trên hai máy khác nhau hoạtđộng trên hai tiến trình (hay không gian địa chỉ) khác nhau cho nên việc tham chiếu biến,địa chỉ đối tượng là hoàn toàn khác nhau Ví dụ, khi bạn truyền con trỏ cho một phươngthức ở xa, trên máy bạn con trỏ này tồn tại nhưng trên máy khác (nơi có đối tượng thựcthi phương thức) sẽ không có bất kỳ vùng nhớ nào được cấp phát dành cho con trỏ Lờigọi các phương thức cục bộ thường luôn trả về kết quả trong khi lời gọi các phương thức
từ xa phải thông qua kết nối mạng và luôn có thể bị ngắt ngang do mạng gặp sự cố
Trang 17Đối với lời gọi hàm trên máy cục bộ, các tham số truyền cho hàm thường được đặt vàongăn xếp (stack) trong khi tham số truyền cho phương thức của các đối tượng ở xa phảiđược đóng gói và chuyển qua mạng để đến đươc với phương thức thực sự
2.3.2 Vai trò các lớp trung gian (Stub và Skeletion)
Để giải quyết các vấn đề trên, đối tượng Java trên hai máy khác nhau không gọinhau trực tiếp mà thông qua lớp trung gian Lớp trung gian này tồn tại ở cả hai phía máykhách (Client - nơi gọi phương thức của đối tượng ở xa) và máy chủ (Server – nơi đốitượng thực sự được cài đặt để thực thi mã lệnh của phương thức) Phía máy khách lớptrung gian này được gọi là Stub (lớp móc), phía máy chủ lớp trung gian này được gọi làSkeletion (lớp nối)
(Gọi phương thức của các đối tượng thông qua lớp trung gian)
Ví dụ, đối tượng C1 được cài đặt chạy trên máy C Trình Java sẽ tạo ra hai lớptrung gian C1_Skel và C1_Stub Lớp C1_Stub sẽ được đem về máy Computer A Khi A1trên máy computer A gọi C1 nó sẽ chuyển lời gọi đến lớp C1_Stub C1_Stub chịu tráchnhiệm đóng gói tham số, chuyển tham số qua mạng đến máy Computer C Trên máyComputer C lớp nối C1_Skel sẽ nhận tham số chuyển vào vùng không gian địa chỉ tương
Trang 18thức của đối tượng C1 trả về sẽ được lớp C1_Skel đóng gói trả ngược về cho C1_Stub.C1_Stub chuyển giao kết quả cuối cùng lại cho A1 Bằng cơ chế này, A1 luôn nghĩ rằng
nó đang hoạt động trực tiếp với đối tượng C1 ngay trên máy cục bộ Hơn nữa, nhờ sựgiúp đỡ của lớp trung gian C1_Stub, khi kết nối mạng gặp sự cố lớp trung gian stub sẽluôn biết cách thông báo lỗi đến đối tượng A1
Thực tế làm thế nào A1 tham chiếu đươc đến C1, một khi không có lớp C1 nàođược cài đặt ở máy A? C1_Stub trên máy A chỉ làm lớp nền trung gian chuyển đổi tham
số và thực hiện các giao thức mạng, nó không phải là hình ảnh của đối tượng C1 Để làmđược điều này, đối tượng C1 cần cung cấp một giao tiếp interface tương ứng với cácphương thức cho phép đối tượng A1 gọi nó trên máy A
Stub thường trực trên máy khách, không ở trên máy chủ Nó có vai trò đóng gói
các thông tin bao gồm:
Định danh đối tượng từ xa cần sử dụng
Mô tả về phương thức cần triệu gọi
Mã hoá các tham số và truyền cho Skel
Stub sẽ chuyển những thông tin trên cho máy chủ Ở phía máy chủ, đối tượng Skelnhận thực hiện những công việc sau để gọi phương thức từ xa:
Giải mã các tham số
Xác định đối tượng để thực hiện lời gọi hàm tương ứng
Thực hiện lời gọi phương thức theo yêu cầu
Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ
Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách
Trang 192.3.3 Cài đặt ứng dụng phân tán RMI
Sau đây là một ví dụ về cách làm việc của các đối tượng RMI Chương trình là một
hệ đối tượng phân tán Đối tượng Calculator chạy trên máy tính Computer 2 sẽ được gọibởi đối tượng CalculatorClient chạy trên máy tính Computer 1
(Triệu gọi đối tượng RMI giữa trình khách (Client) và đối tượng chủ (Server) ở xa)
Muốn Calculator có khả năng giao tiếp được với các đối tượng ở xa thì phải báocho Java biết Calculator là một đối tượng có khả năng Remote Tất cả các phương thứctrong giao tiếp Calculator muốn được gọi từ xa đều phải có khả năng ném ra ngoại lệRemoteException vì khi triệu gọi từ xa có rất nhiều nguyên nhân làm nó thất bại, ví
dụ, máy chủ, kết nối mạng không sẵn sàng và nhiều vấn đề không bình thường, ngoại lệkhác gặp phải trên mạng Mã nguồn đầy đủ của giao tiếp Calculator như sau:
Calculator.java
import java.rmi.*;
public interface Calculator extends Remote {
public int addNumber (int x, int y)throws RemoteException;
}
Lớp giao tiếp Remote thật ra chỉ là một interface rỗng, được dùng để đánh dấu chomáy ảo Java biết được đặc tính có khả năng “nói chuyện” với các đối tượng ở xa củaCalculator