LỜI MỞ ĐẦU Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, cho phép chúng ta khai thác các nguồn tài nguyên là những kho tư liệu vô cùng rộng lớn về các lĩnh vực, và được bố trí ở những nơi rất xa nhau. Đối với các hệ thông tin lớn, dữ liệu không chỉ được lưu trữ và quản lý bởi các Server độc lập mà thường được phân tán trên nhiều Server và phân bổ ở các vị trí địa lý khác nhau. Hệ thống cho phép xử lý đa truy cập đồng thời cho phép đăng ký từ xa. Một trong những lợi ích của việc phân tán dữ liệu như vậy là nhằm chia yêu cầu xử lý dữ liệu cho nhiều máy nhằm tăng năng lực xử lý thông tin của hệ thống. Môn học Lập Trình Mạng dưới sự giảng dạy của PGS.TS Lê Văn Sơn, nhóm chúng em đã hiểu thêm được tầm quan trọng, những kiến thức mới của môn học. Vì vậy nhóm em đã chọn tiểu luận: + Xây dựng hệ thống 3 Server thể hiện khả năng phátnhận thông điệp. + Viết chương trình mô phỏng quá trình hoạt động của 3 loại thông điệp cơ bản REQ, ACQ và REL trong hệ tin học phân tán. Mặc dù nhóm chúng em đã cố gắng tìm hiểu, nghiên cứu nhưng do thời gian có hạn, khả năng cũng còn hạn chế nên nhóm không tránh khỏi những thiếu sót. Kính mong thầy xem xét, góp ý để nhóm chúng em hoàn thiện, hiểu rõ hơn nữa về công nghệ lập trình mới và tiên tiến này. Xin chân thành cảm ơn MỤC LỤC LỜI MỞ ĐẦU 1 I. Yêu cầu và Giải thuật 2 1. Yêu cầu 2 2. Giải thuật Loại trừ tương hỗ 2 3. Giải pháp cho vấn đề đoạn găng 4 4. Kiểm nghiệm giải thuật 4 5. Phản ứng với sự cố 5 6. Kết luận 5 II. Xây dựng chương trình 6 1. Giới thiệu ngôn ngữ Java 6 2. Kiến trúc và kỹ thuật RMI 7 2.1 Tổng quan về RMI 7 2.2 Kiến trúc RMI 8 2.3 Kỹ thuật RMI 10 3. Các Modules chương trình 12 4. Chương trình chạy thử 18 KẾT LUẬN 25 TÀI LIỆU THAM KHẢO 26
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA
VÀ REL TRONG HỆ TIN HỌC PHÂN TÁN
Giáo viên hướng dẫn: PGS TS Lê Văn Sơn Học viên thực hiện:
- Đoàn Ngọc Diễm My
- Trần Thị Bích Đào
Trang 2Đà Nẵng, 03/2010
LỜI MỞ ĐẦU
Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, cho phép chúng ta khai thác các nguồn tài nguyên là những kho tư liệu vô cùng rộng lớn về các lĩnh vực, và được bố trí ở những nơi rất xa nhau.
Đối với các hệ thông tin lớn, dữ liệu không chỉ được lưu trữ và quản lý bởi các Server độc lập mà thường được phân tán trên nhiều Server và phân bổ
ở các vị trí địa lý khác nhau Hệ thống cho phép xử lý đa truy cập đồng thời cho phép đăng ký từ xa Một trong những lợi ích của việc phân tán dữ liệu như vậy
là nhằm chia yêu cầu xử lý dữ liệu cho nhiều máy nhằm tăng năng lực xử lý thông tin của hệ thống.
Môn học Lập Trình Mạng dưới sự giảng dạy của PGS.TS Lê Văn Sơn,
nhóm chúng em đã hiểu thêm được tầm quan trọng, những kiến thức mới của môn học Vì vậy nhóm em đã chọn tiểu luận:
+ Xây dựng hệ thống 3 Server thể hiện khả năng phát/nhận thông điệp + Viết chương trình mô phỏng quá trình hoạt động của 3 loại thông điệp
cơ bản REQ, ACQ và REL trong hệ tin học phân tán.
Mặc dù nhóm chúng em đã cố gắng tìm hiểu, nghiên cứu nhưng do thời gian có hạn, khả năng cũng còn hạn chế nên nhóm không tránh khỏi những thiếu sót Kính mong thầy xem xét, góp ý để nhóm chúng em hoàn thiện, hiểu rõ hơn nữa về công nghệ lập trình mới và tiên tiến này.
Xin chân thành cảm ơn !
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 1
I Yêu cầu và Giải thuật 2
1 Yêu cầu 2
2 Giải thuật Loại trừ tương hỗ 2
3 Giải pháp cho vấn đề đoạn găng 4
4 Kiểm nghiệm giải thuật 4
5 Phản ứng với sự cố 5
6 Kết luận 5
II Xây dựng chương trình 6
1 Giới thiệu ngôn ngữ Java 6
2 Kiến trúc và kỹ thuật RMI 7
2.1 Tổng quan về RMI 7
2.2 Kiến trúc RMI 8
2.3 Kỹ thuật RMI 10
3 Các Modules chương trình 12
4 Chương trình chạy thử 18
KẾT LUẬN 25
TÀI LIỆU THAM KHẢO 26
Trang 4I Yêu cầu và Giải thuật:
1 Yêu cầu:
+ Xây dựng hệ thống 3 Server thể hiện khả năng phát/nhận thông điệp.+ Viết chương trình mô phỏng quá trình hoạt động của 3 loại thông điệp
cơ bản REQ, ACQ và REL trong hệ tin học phân tán
2 Giải thuật Loại trừ tương hỗ:
Loại trừ tương hỗ có thể được thực hiện trên một trạm trung tâm có nhiệm
vụ nhận tất cả các thông điệp và khuyến nghị giải phóng Trạm này duy trì mộthàng đợi, sắp xếp các yêu cầu theo trật tự đến và phục vụ cho từng thông điệpmột trong trật tự này
Phân tán giải thuật này kéo theo việc phân tán các chức năng cung cấp màcần phải điều khiển hàng đợi trên trạm Do vậy, một trạm chuyên cho việc nhậncác yêu cầu và khuyến nghị giải phóng trên tất cả các trạm còn lại Một trật tựgiống nhau trên các trạm chỉ đạt được nếu ta áp dụng dấu trong các thông điệpbởi các đồng hồ logic truyền và đánh số các trạm Quan hệ trật tự toàn bộ đượcđịnh nghĩa, thêm vào đó, để cho một trạm có thể ra quyết định bằng việc thamchiếu duy nhất vào hàng đợi của mình, nó còn cần phải nhận một thông điệp củatừng trạm khẳng định rằng không có thông điệp nào trước các thông điệp khác
mà còn đang quá cảnh trên đường
Thuật toán Loại trừ tương hỗ có thể được mô tả như sau:
+ Trạm i của mạng có thể gửi thông điệp cho các trạm khác thông điệp có
dạng (T, H i , i), trong đó H i là dấu của thông điệp có nghĩa là đồng hồ logic của
nó và T có thể nhận một trong 3 giá trị REQ, REL, ACQ.
Ba giá trị này xác định bản chất của ba loại thông điệp khác nhau:
1 REQ Thông điệp REQ được phát đi cho tất cả các trạm, khitrạm i muốn vào trong đoạn găng
2 REL Thông điệp REL được phát đi cho tất cả các trạm, khitrạm i đã rời khỏi đoạn găng
3 ACQ Thông điệp ACQ được gửi bởi trạm j cho trạm i, khi trạm j đã nhận được từ trạm i thông điệp REQ
+ Mỗi trạm quản lý một hàng đợi các thông điệp được sắp xếp theo quan
hệ <thời gian, số> của từng thông điệp Theo cấu trúc, hàng đợi luôn luôn chứa
một thông điệp và chỉ một thường trực trên mỗi trạm, bao gồm trạm cục bộ Khi
có một thông điệp được gửi đi bởi trạm i, đồng thời nó cũng được ghi tronghàng đợi của trạm này
Giả sử rằng mỗi hàng đợi ban đầu chứa các thông điệp:
Mi = (REL, Hinit, i)Trong đó, i, Hinit là thời điểm khởi sự giống nhau cho tất cả các trạm
Trang 5+ Trên mỗi trạm, khi nhận được một thông điệp dạng (REQ, Hi, i) hay(REL, Hi, i), thông điệp này thay thế thông điệp Mi bất chấp nó là gì Khi nhậnthông điệp loại (ACQ, Hi, i), thông điệp này thay thế Mi ngoại trừ Mi là một yêucầu mà trong trường hợp đó ACQ bị bỏ qua Do vậy, ta có thể tiết kiệm việc gửithông điệp ACQ cho trạm i khi trạm này đã gửi một thông điệp REQ và khôngcòn thông điệp REL.
+ Trạm i được quyền vào đoạn găng khi thông điệp REQ của nó đến trướctheo nghĩa của quan hệ <thời gian, số> của tất cả các thông điệp khác trong hàngđợi của nó
3 Giải pháp cho vấn đề đoạn găng:
+ Khái niệm Tài nguyên găng: Những tài nguyên được hệ điều hành chia sẻcho nhiều tiến trình hoạt động đồng thời dùng chung, mà có nguy cơ dẫn đến sựtranh chấp giữa các tiến trình này khi sử dụng chúng được gọi là tài nguyêngăng
+ Tài nguyên găng có thể là tài nguyên phần cứng hoặc tài nguyên phầnmềm, có thể là tài nguyên phân chia được hoặc không phân chia được, nhưng đa
số thường là tài nguyên phân chia được như là: các biến chung, các file chia sẻ.+ Ví dụ sau sẽ cho ta thấy rõ hơn việc sử dụng tài nguyên găng:
Giả sử có một chương trình, trong đó có hai tiến trình P1 và P2 hoạt độngđồng thời với nhau Tiến trình P1 phải tăng biến Count lên 1 đơn vị, tiến trìnhP2 phải tăng biến Count lên 1 đơn vị, với mục đích tăng Count lên được 2 đơn
vị
Chương trình có thể thực hiện như sau:
1 Tiến trình P1 ghi nội dung biến toàn cục Count vào biến cục bộ L1
2 Tiến trình P2 ghi nội dung biến toàn cục Count vào biến cục bộ L2
3 Tiến trình P1 thực hiện L1:= L1 + 1 và Count := L1
4 Tiến trình P2 thực hiện L2:= L2 + 1 và Count := L2
Như vậy thoạt nhìn ta thấy rằng chắc chắn Count đã tăng được 2 đơn vị,nhưng trong thực tế có thể Count chỉ tăng được 1 đơn vị Bởi vì, nếu P1 và P2đồng thời nhận giá trị của Count (giả sử ban đầu Count = 4) vào L1 và L2, sau
đó P1 tăng L1 lên 1 và P2 tăng L2 lên 1 (L1 = 5, L2 = 5), rồi sau đó cả P1 và P2đồng thời ghi giá trị biến L của nó vào lại Count, thì Count chỉ tăng được 1 đơn
vị, Count = 6 Đây là điều mà chương trình không mong muốn nhưng cả chươngtrình và hệ điều hành đều khó có thể phát hiện được Nguyên nhân ở trên là do 2tiến trình P1 và P2 đồng thời truy xuất biến Count, cả khi nhận giá trị của Count,lẫn khi ghi giá trị vào Count Trong trường hợp này tài nguyên găng là biếncount
+ Đoạn tới hạn (Critical Section): Đoạn Code trong các tiến trình đồngthời, có tác động đến các tài nguyên có thể trở thành tài nguyên găng được gọi làđoạn găng hay miền găng
Một giải pháp cho vấn đề đoạn găng phải thỏa mãn 3 yêu cầu:
+ Loại trừ lẫn nhau: nếu tiến trình Pi đang thực hiện trong đoạn găng của
nó thì các tiến trình khác không được thực hiện trong đoạn găng của chúng haynói cách khác tại một thời điểm không thể có hai tiến trình nằm trong đoạn găng
Trang 6+ Chọn tiến trình tiếp theo được vào đoạn găng: nếu không có tiến trình
nào đang trong đoạn găng của nó và một số tiến trình muốn vào đoạn găng củachúng thì chỉ những tiến trình đang không trong đoạn còn lại mới là ứng cửviên
+ Chờ đợi có hạn: tồn tại giới hạn số lần các tiến trình khác được phép
vào đoạn găng của chúng sau khi một tiến trình yêu cầu vào đoạn găng đếntrước khi yêu cầu đó được đáp ứng
4 Kiểm nghiệm giải thuật:
Các yêu cầu vào đoạn găng được xử lý theo trật tự FIFO và theo quan hệ
<thời gian, số> Khi trạm i vào đoạn găng có nghĩa là nó đã nhận thông điệp từtất cả các trạm khác và tất cả các thông điệp đều sau thông điệp REQ của nó
Ta kiểm tra các đặc tính sau đây:
+ Trạm i đang ở trong đoạn găng là trạm duy nhất nằm trong đoạn găng
ấy Thực tế cho thấy thông điệp REQ được phát đi bởi trạm i vẫn tiếp tục tồn tạitrong các hàng đợi cho đến khi nó được thay thế bởi thông điệp REL
+ Trạm đã yêu cầu vào đoạn găng phải đảm bảo thời hạn và phải ra khỏiđoạn găng sau một khoảng thời gian xác định Thuật toán thể hiện tính đồng đều
và tránh được tổn thất
Ví dụ: Xét một mạng gồm 3 trạm, trong số đó trạm 1 và trạm 2 yêu cầu vào
đoạn găng tại thời điểm 2 của đồng hồ Logic của chúng Tập hợp các thông điệpđược truyền đi giữa chúng với nhau được mô tả theo hình vẽ sau và ta cũng cóthể tìm thấy một số trạng thái của các hàng đợi thông điệp:
Đoạn găng của trạm 2
ACQ,6,2
ACQ,4,3 REQ,2,1
REQ,2,2 REQ,2,1 REQ,2,2
3
7
8 9
10
Trạm 2
H 2
1 2
3
7
8 9
10
Trạm 3
H 3
REL,10,1
Trang 7Ta nhận thấy rằng:
+ Trạm 1 vào đoạn găng tại H1 = 7+ Trạm 2 vào đoạn găng tại H2 = 11
5 Phản ứng với sự cố:
Sự cố xảy ra với trạm chưa vào được trong đoạn găng không làm rối loạn
hoạt động của giải thuật với điều kiện nó truyền thông điệp vang_mat cho việc
chuyển tải ở mạng giao vận Do có trang bị như thế, việc vào đoạn găng trở nên
dễ dàng và nhanh chóng cho các trạm khác Nếu trạm có sự cố đã gửi yêu cầu,thì nó kết thúc với lý do trở thành trước đối với tất cả các trạm khác
Khi một trạm lại được đưa vào trong mạng sau khi đã khắc phục sự cố, nócần phải kiến tạo lại trạng thái hiện hành của các yêu cầu Để đảm bảo điều đó,
nó phát đi thông điệp vao_lai và để trả lời, các trạm gửi thời gian cuối cùng của
các yêu cầu cuối cùng của nó REQ không được thoả mãn hoặc một thông điệpREL Mạng cần phải bổ khuyết cho các trạm bị sự cố bằng cách gửi thông điệp
vang_mat Khi nó đã nhận tất cả các trả lời cho thông điệp vao_lai, trạm vừa
đưa vào đó có thể bắt đầu lại bằng các yêu cầu
6 Kết luận:
Các dấu được cung cấp bởi đồng hồ Logic cho phép đánh dấu các sự kiện
và xác định một tổng quát chặt chẽ Nhưng tại đây không có quan hệ nào giữacác sự kiện và các giá trị của dấu
Trên một trạm cho trước, việc nhận một thông điệp có đóng dấu khôngthể cho nó biết còn sự kiện nào trước sự kiện đó đang ở trên đường Như thế, tacòn phải nhận thông điệp từ các trạm khác còn lại
Trang 8II Xây dựng chương trình:
1 Giới thiệu ngôn ngữ Java:
Java khởi thủy tên là Oak- là cây sồi mọc ở phía sau văn phòng của nhà
thiết kế chính ông Jame Gosling, sau này ông thấy rằng đã có ngôn ngữ lập trìnhtên Oak rồi, do vậy nhóm thiết kế quyết định đổi tên, và “Java” là cái tên được
chọn,Java là tên của một quán Cafe mà nhóm thiết kế Java hay đến đó uống
Java là một công nghệ xây dựng các ứng dụng phần mềm có vị trí rất lớntrong những năm cuối thế kỉ 20, đầu thế kỉ 21 Nó được coi là công nghệ mangtính cách mạng và khả thi nhất trong việc tạo ra các ứng dụng có khả năng chạy
thống nhất trên nhiều nền tảng mà chỉ cần biên dịch một lần
Lần đầu tiên xuất hiện vào năm 1992 như là một ngôn ngữ dùng trong nội
bộ tập đoàn Sun Microsystems để xây dựng ứng dụng điều khiển các bộ xử lýbên trong máy điện thoại cầm tay, lò vi sóng, các thiết bị điện tử dân dụng khác.Không chỉ là một ngôn ngữ, Java còn là một nền tảng phát triển và triển khaiứng dụng trong đó máy ảo Java, bộ thông dịch có vai trò trung tâm
Sun, công ty đã phát minh ra ngôn ngữ Java, chính thức ban hành bảnJava Development Kit 1.0 vào năm 1996 hoàn toàn miễn phí để các nhà pháttriển có thể tải về, học Java, xây dựng các ứng dụng Java và triển khai chúngtrên các hệ điều hành có hỗ trợ Java Hiện nay, công nghệ Java được chia làm ba
bộ phận:
J2SE Gồm các đặc tả, công cụ, API của nhân Java giúp phát triển các ứng
dụng trên Desktop và định nghĩa các phần thuộc nhân của Java
J2EE Gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng
dụng qui mô xí nghiệp, chủ yếu để chạy trên máy chủ (server) Bộ phận hayđược nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java
để làm các ứng dụng web
J2ME Gồm các đặc tả, công cụ, API mở rộng để phát triển các ứng dụng
Java chạy trên điện thoại di động, thẻ thông minh, thiết bị điện tử cầm tay, robo
Máy ảo Java: JVM
Bộ công cụ phát triển: J2SDK
Các đặc tả chi tiết kĩ thuật (Specifications)
Ngôn ngữ lập trình (Programming language)
Trang 9Tính uyển chuyển của ngôn ngữ Java thể hiện qua việc chương trình biêndịch Java chuyển đổi chương trình nguồn Java thành mã đối tượng, gọi là mãbyte (bytecodes) - tập tin có tên quy ước với phần mở rộng là class Sau đó,máy ảo Java có trên máy điều khiển để thực thi
Mã máy chỉ thực hiện trên máy tính mà nó được biên dịch, trong khibytecode có thể thực hiện trên bất kỳ hệ thống máy tính nào có trình điều khiểnJava Ngoài ra, tính uyển chuyển làm tăng khả năng tái sử dụng các lớp được tạora; các lớp cho phép thực hiện kỹ thuật kết nối động (Dynamic Binding) khichương trình thực thi
2 Kiến trúc và kỹ thuật RMI:
2.1 Tổng quan về RMI:
Trong một ứng dụng không phân tán của Java, đoạn mã trong một đốitượng có thể gọi phương thức của một đối tượng khác và máy ảo Java phân giảiđịa chỉ và truyền tham số từ đối tượng gọi đến phương thức được gọi, ngoài ra
nó cũng trả về các giá trị cho đối tượng gọi thực thi phương thức
Trong ứng dụng phân tán, mặc dù đoạn mã lập trình phương thức trông có
vẻ giống như trong trường hợp ứng dụng không phân tán, nhưng là một cơ chếhoàn toàn khác nhau được dùng để móc những đối tượng này Khi một đốitượng muốn gọi một phương thức, nó sẽ gọi một đối tượng bè bạn bên phía máykhách, đối tượng này sẽ đại diện cho đối tượng gọi phương thức bên phía máychủ Đối tượng này được gọi là Stub
Stub sẽ gọi kiến trúc RMI bên phía máy khách và di chuyển dữ liệu quamạng đến kiến trúc RMI trên máy chủ, đến lược nó sẽ gọi thực thi một đốitượng bè bạn bên phía máy chủ gọi là Skeleton
Đối tượng Skeleton sẽ gọi phương thức của đối tượng thật sự bên phíamáy chủ Đến khi trả lại kết quả thì một cơ chế giống hệt như trên sẽ được gọithực thi nhưng theo thứ tự ngược lại, khi đó kết quả trả về sẽ được truyền chođối tượng Skeleton trên máy chủ, và được đối tượng này truyền theo đường
x86/Win32
x86/Linux
Source Code Java (*.java)
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
Trang 10mạng sử dụng kiến trúc RMI, tiếp đến nó sẽ gọi đối tượng Stub bên phía máykhách, và trả về giá trị cho đối tượng gọi phương thức.
Cái hay của kiến trúc đối tượng phân tán RMI là người lập trình chỉ cầnlập trình các lời gọi phương thức vì đối tượng được gọi đã hiện diện trong máy
ảo Java của nó
Stub và Skeleton được phát sinh ra từ đối tượng gọi và đối tượng được gọibằng cách sử dụng một công cụ biên dịch của RMI là RMIC Các trình đóng góiứng dụng phải đảm bảo là các Stubs phải được đóng gói kèm theo với các đoạn
mã bên phía máy khách hay các tập tin Jar, và các Skeleton phải đi kèm với cácđoạn mã bên phía máy chủ hoặc các thư viện JAR Các Stub có thể được tựđộng tải về từ máy chủ khi có yêu cầu
Hình dưới đây minh họa luồng dữ liệu giữa Stub và Skeleton trong kiếntrúc của RMI
2.2
Kiến trúc RMI:
Ứng dụng phân tán trong Java thông qua cơ chế RMI (Remote Method
Invocation) thực chất là sự kết hợp nhiều đối tượng đang tồn tại trên các máy
khác nhau để giải quyết vấn đề
Đối tượng này sử dụng hàm của đối tượng khác ở xa để thực thi côngviệc Khi đó việc gọi thực thi đối tượng ở xa cũng giống như gọi đối tượng địaphương
Để làm được điều này, ứng dụng phân tán RMI dùng bộ phận đăng kýdịch vụ (Registry) để quản lý hoạt động của các đối tượng trên mạng Khi đóthông qua bộ phận đăng ký này, máy ảo Java đóng vai trò Server sẽ liên kết vớiđối tượng ở xa (Remote object)
RMI cung cấp khả năng triệu gọi các phương thức của một đối tượng từ
xa thông qua giao thức JRMP Bằng cách này có thể liên lạc và thực thi các ứng
Invocation (RMI), một chuẩn dùng để gọi hàm từ xa dựa trên Java RemoteMessage Protocol (JRMP)
Client tìm đến đối tượng ở xa thông qua tên đã đăng ký với bộ phận đăng
ký Server này Bộ phận đăng ký dịch vụ được thiết lập mặc định ở cổng 1099
thông qua RMIREGISTRY, có trong bộ công cụ phát triển Java (J2SDK)
Trang 11Vị trí của hệ thống RMI trong ứng dụng phân tán được mô tả như hìnhdưới Trong đó các chương trình Client và Server trao đổi với nhau qua cầu nốicủa hệ thống RMI.
Kiến trúc của hệ thống RMI bao gồm các tầng như sau:
+ Tầng ứng dụng: Bao gồm ứng dụng Server và Client
Server:
• Hiện thực giao diện Remote mà Client dùng
• Xuất (Exports) đối tượng mà các phương thức của nó đượctriệu gọi từ xa (bằng cách tạo lớp là UnicastRemoteObject)
• Đăng ký chính nó với độ đăng ký RMI
Client:
• Nhận tham chiếu đến đối tượng
• Chuyển các tham chiếu như những giao diện từ xa
RMI Registry
RMI Client
RMI Server
Trang 12• Triệu gọi các hành vi của đối tượng
+ Tầng ủy quyền: Bao gồm
- Client (gọi là Stub)
- Server (gọi là Skeleton)
+ Tầng truy cập từ xa: Sự trừu tượng hóa giữa tầng ủy quyền và tầng vận
chuyển
+ Tầng vận chuyển: Quản lý sự giao tiếp giữa các Host với nhau trên
mạng, dựa trên kết nối TCP/IP Thực chất thực hiện kết nối giữa các máy ảoJava
Các bước để hiện thực ứng dụng phân tán trên hệ thống RMI:
+ Mô tả giao diện (Interface) của đối tượng cùng với các hành vi cần sửdụng Giao diện này được đặt trên cả Client và Server Giao diện này có thể làRemote hay Serializable
+ Hiện thực nội dung của giao diện ở trên trong một lớp cụ thể đặt ởServer
+ Sử dụng tiện ích Rmic của JDK để tạo các lớp Stub đặt trên Client vàSkeleton trên Server
+ Xây dựng lớp để thực hiện trên Server, trong lớp này có sử dụng hành
vi ExportObject() của lớp UnicastRemoteObject để báo cho máy ảo Java biếtđối tượng được truy cập đến từ xa bởi các đối tượng khác
+ Sử dụng các phương thức trên máy Server từ các lớp trên máy Client.Như vậy, trong quá trình thực hiện có 3 máy ảo Java hoạt động:
+ Quản lý bộ đăng ký (RmiRegistry)
+ Thực thi đối tượng nhằm xuất khẩu đối tượng ra ngoài
+ Thực thi chương trình của Client
2.3
Kỹ thuật RMI:
Cơ chế làm việc của chương trình trên Client và Server khi đã được đăng
ký bởi bộ đăng ký Rmiregistry như sau:
+ Máy ảo Java (JVM) trên máy Server dùng hàm Bind() hoặc Rebind() của lớp Naming để đăng ký với Rmiregistry.
+ Chương trình client dùng hàm Naming.Lookup() để yêu cầu bộ đăng
ký cho biết tham chiếu đến đối tượng
+ Bộ đăng ký Rmiregistry trả về tham chiếu đối tượng tồn tại trên máyServer
+ Trên cơ sở tham chiếu của đối tượng do hàm Lookup() trả về, chương
trình Client sử dụng để triệu gọi hành vi của đối tượng trên máy Server
Trang 13Các gói thông dụng thường được sử dụng:
+ Java.lang: Chứa các lớp quan trọng nhất của ngôn ngữ Java Chúng
bao gồm các kiểu dữ liệu cơ bản như ký tự, số nguyên, Chúng cũng chứa cáclớp làm nhiệm vụ xử lý lỗi và các lớp vào ra chuẩn Một vài lớp quan trọng khácnhư String hay StringBuffer
+ Java.applet: Đây là package nhỏ nhất chứa một mình lớp Applet Các
Applet nhúng trong trang Web hay chạy trong Appletviewer đều thừa kế từ lớpnày
+ Java.awt: Package này đươợc gọi là Abstract Window Toolkit (AWT).
Chúng chứa các lớp dùng để tạo giao diện đồ họa Một số lớp bên trong là:Button, GridBagLayout, Graphics
+ Java.io: Cung cấp thư viện vào ra chuẩn Chúng cho phép tạo và quản
lý dòng dữ liệu theo nhiều cách
+ Java.util: Package này cung cấp một số công cụ hữu ích Một vài lớp
của package này là: Date, Hashtable, Stack, Vector và StringTokenizer
+ Java.net: Cung cấp khả năng giao tiếp với máy từ xa Cho phép tạo và
kết nối tới Socket hoặc URL
+ Java.awt.event: Chứa các lớp, giao diện dùng để xử lý các sự kiện
trong chương trình như chuột, bàn phím
+ Java.rmi: Công cụ để gọi hàm từ xa Chúng cho phép tạo đối tượng
trên máy khác và sử dụng các đối tượng đó trên máy cục bộ