TIỂU LUẬN MÔN HỌC LẬP TRÌNH MẠNG LẬP TRÌNH BẰNG CÁC PHƯƠNG PHÁP PHÂN TÁN ĐỂ ĐIỀU KHIỂN BÃI ĐỖ XE MỤC LỤC MỤC LỤC i LỜI NÓI ĐẦU 1 CHƯƠNG 1: KHÁI QUÁT VỀ HỆ TIN HỌC PHÂN TÁN 2 1.1 Định nghĩa 2 1.2 Các thực thể trong hệ phân tán 2 1.3 Đặc điểm của hệ phận tán 2 1.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán: 3 1.5 Các thao tác chuẩn của hệ phân tán 3 CHƯƠNG 2: BÀI TOÁN BÃI ĐỖ XE Ô TÔ 4 2.1 Phát biểu bài toán 4 2.1.1 Tình huống thứ 1 4 2.1.2 Tình huống thứ 2 5 2.2 Hướng giải quyết bài toán 5 2.3 Vấn đề cần giải quyết cho bài toán bãi đỗ xe 6 2.3.1 Giải quyết vấn đề 7 2.3.2 Thuật toán chương trình 9 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH 12 3.1 Giới thiệu ngôn ngữ Java 12 3.1.1 Sơ lược về ngôn ngữ lập trình Java 12 3.1.2 RMI – Remote Method Invoke – và lập trình phân tán đối tượng 13 3.2 Nghiên cứu RMI trong Java 15 3.2.1 Bộ đăng ký (REGISTRY) 15 3.2.2 Trao đổi thông tin giữa các đối tượng 15 3.2.3 Tải xuống các lớp Bytecode cho đối tượng 16 3.3 Tiến trình xây dựng chương trình 17 3.3.1 III.3.1. Xây dựng chương trình Server 18 3.3.2 Xây dựng chương trình Client 23 3.3.3 Tải xuống mã động sử dụng RMI 24 3.3.4 Các lớp và giao diện trong ứng dụng RMI 25 3.4 Triển khai chương trình 31 3.4.1 Triển khai chương trình Server 32 3.4.2 Triển khai chương trình Client 33 3.5 Thực hiện chương trình 34 3.5.1 Khởi động các server 34 3.5.2 Thực hiện các yêu cầu từ các server 35 KẾT LUẬN 36 Kết quả thực tế đạt được 36 Tính khả thi và ưu điểm của chương trình 36 Hạn chế của chương trình 36 Hướng phát triển của đề tài 36 TÀI LIỆU THAM KHẢO 37
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
TÁN ĐỂ ĐIỀU KHIỂN BÃI ĐỖ XE
Giáo viên hướng dẫn: PGS.TS Lê Văn Sơn Học viên thực hiện:
+ Võ Văn Luận + Lê Văn Đông
Lớp: Khoa học máy tính - K11 Niên khoá: 2009- 2011
Trang 3MỤC LỤC i
LỜI NÓI ĐẦU 1
CHƯƠNG 1: KHÁI QUÁT VỀ HỆ TIN HỌC PHÂN TÁN 2
1.1 Định nghĩa 2
1.2 Các thực thể trong hệ phân tán 2
1.3 Đặc điểm của hệ phận tán 2
1.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán: 3
1.5 Các thao tác chuẩn của hệ phân tán 3
CHƯƠNG 2: BÀI TOÁN BÃI ĐỖ XE Ô TÔ 4
2.1 Phát biểu bài toán 4
2.1.1 Tình huống thứ 1 4
2.1.2 Tình huống thứ 2 5
2.2 Hướng giải quyết bài toán 5
2.3 Vấn đề cần giải quyết cho bài toán bãi đỗ xe 6
2.3.1 Giải quyết vấn đề 7
2.3.2 Thuật toán chương trình 9
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH 12
3.1 Giới thiệu ngôn ngữ Java 12
3.1.1 Sơ lược về ngôn ngữ lập trình Java 12
3.1.2 RMI – Remote Method Invoke – và lập trình phân tán đối tượng 13
3.2 Nghiên cứu RMI trong Java 15
3.2.1 Bộ đăng ký (REGISTRY) 15
Trang 43.2.3 Tải xuống các lớp Bytecode cho đối tượng 16
3.3 Tiến trình xây dựng chương trình 17
3.3.1 III.3.1 Xây dựng chương trình Server 18
3.3.2 Xây dựng chương trình Client 23
3.3.3 Tải xuống mã động sử dụng RMI 24
3.3.4 Các lớp và giao diện trong ứng dụng RMI 25
3.4 Triển khai chương trình 31
3.4.1 Triển khai chương trình Server 32
3.4.2 Triển khai chương trình Client 33
3.5 Thực hiện chương trình 34
3.5.1 Khởi động các server 34
3.5.2 Thực hiện các yêu cầu từ các server 35
KẾT LUẬN 36
Kết quả thực tế đạt được 36
Tính khả thi và ưu điểm của chương trình 36
Hạn chế của chương trình 36
Hướng phát triển của đề tài 36
TÀI LIỆU THAM KHẢO 37
Trang 5LỜI NÓI ĐẦU
Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, chophé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ộnglớ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ởicá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ôngtin 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 “Lập trình bằng các phương pháp
phân tán để điều khiển bãi đỗ xe” với các nội dung:
Phân tích bài toán bãi đỗ xe ở mức có thể lập trình được;
Liên hệ với các đặc điểm của hệ phân tán;
Hiện lên màn hình dòng xe vào – ra tại mỗi trạm của người bảo vệ;
Cho phép sử dụng phương án lý tưởng
Mặc dù nhóm chúng em đã cố gắng tìm hiểu, nghiên cứu nhưng do thờigian 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ếusót Kính mong thầy xem xét, góp ý để nhóm chúng em hoàn thiện, hiểu rõ hơnnữ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 6CHƯƠNG 1: KHÁI QUÁT VỀ HỆ TIN HỌC PHÂN
TÁN
1.1 Định nghĩa
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System)
là hệ thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm tại các
vị trí khác nhau được liên kết với nhau thông qua phương tiện viễn thông dưới
sự điều khiển thống nhất của một hệ điều hành
Đặc điểm cần nhấn mạnh của hệ là các hệ xử lý thông tin thành phần:
Không dùng chung hoặc chia sẻ bộ nhớ;
Không sử dụng chung đồng hồ xung nhịp;
Chúng liên lạc với nhau thông qua mạng truyền thông;
Mỗi hệ xử lý có bộ xử lý, bộ nhớ và hệ điều hành riêng của nó
Các hệ thống phần mềm
Các hệ thống phần mềm
Tập hợp phần cứng
Tập hợp phần cứng
Hệ thống truyền thông
Hệ thống truyền thông
Hệ thống
dữ liệu
Hệ thống
dữ liệu
Trang 7Thành phần của hệ phân tán bao gồm các hệ thống cục bộ trong đó mỗimột hay nhiều hệ thống phát các yêu cầu thông tin còn các hệ khác trả lời cácyêu cầu có liên quan đến phần dữ liệu của mình Nói một cách tổng quát là trong
hệ luôn luôn diễn ra việc thực hiện các công việc do các hệ thống yêu cầu Các
hệ thống truyền thống như hệ rời rạc hay tập trung không thể đáp ứng nhanhchóng và chính xác các yêu cầu thông tin từ xa với lưu lượng thông tin lớn
1.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán:
Việc định nghĩa tài nguyên dùng chung mang đến cho hệ phân tán nhữnghiệu năng tốt trong khai thác ứng dụng như:
Tăng tốc độ bình quân trong tính toán xử lý
Cải thiện tình trạng luôn sẵn sàng của các loại tài nguyên
Tăng độ an toàn cho dữ liệu
Đa dạng hóa các loại hình dịch vụ tin học
Bảo đảm tính toàn vẹn của thông tin
Tuy nhiên nó cũng dẫn đến hàng loạt các vấn đề khó khăn trong việc thiếtlập hệ liên quan việc cấp phát tài nguyên dùng chung cho các tiến trình
Điều quan trọng là để đảm bảo các chức năng, yêu cầu nêu ra trên, hệ tinhọc phân tán cần phải có các cơ chế kỹ thuật đủ mạnh nhằm đồng bộ hóa hoạtđộng của các tiến trình và sự trao đổi thông tin với nhau sao cho hệ thống tránhđược các trường hợp có thể dẫn đến bế tắc
1.5 Các thao tác chuẩn của hệ phân tán
Tiếp nhận và ghi yêu cầu chỉ dẫn
Dịch yêu cầu để có các thông tin cần thiết Thực hiện một số công việccủa hệ thống cục bộ như kiểm tra quyền truy cập thông tin, lập hóa đơndịch vụ
Gửi kết quả cho hệ thống đã phát yêu cầu
Trang 8CHƯƠNG 2: BÀI TOÁN BÃI ĐỖ XE Ô TÔ
2.1 Phát biểu bài toán
Bài toán bãi đỗ xe được phát biểu như sau:
Cho một bãi đỗ xe ô tô N chỗ và có ít nhất là hai lối vào Hành vi của ô tôlà: Vào bãi (vao), đỗ (d), Ra (ra)
Hình 2-1 mô phỏng bãi để xe ô tô hiện đại Trong đó BV - người bảo vệ cónhiệm vụ phân phối chỗ cho các xe ô tô, VT - vị trí cho từng xe ôtô cụ thể Cácmũi tên hai chiều được sử dụng để mô tả dòng vào ra của ô tô
2.1.1 Tình huống thứ 1
Ta giả sử rằng bãi đỗ xe ô tô là một bãi lớn có một cổng vào dưới sự kiểmsoát của người bảo vệ (BV) duy nhất Người bảo vệ chỉ biết được một phầntrạng thái của bãi để xe Trong khi anh ta nghĩ rằng bãi xe đã bị đầy, khi đó cónhiều lái xe đang cho xe chạy ra cổng Vì suy nghĩ như vậy, trong trường hợpnày, anh ta không giải quyết cho các xe khác tiếp tục vào bãi nữa, mặc dù lúc
Trang 9này trong bãi đang có chỗ trống Như vậy, người bảo vệ không nắm được trạngthái hiện hành của bãi.
Như vậy, các bảo vệ phải hợp lực với nhau để phân phối chính xác các chỗtrong bãi, đặc biệt số lượng chỗ còn trống càng ít thì vai trò của hợp lực càngquan trọng
2.2 Hướng giải quyết bài toán
Ở đây sử dụng thuật toán loại trừ tương hổ để giải quyết yêu cầu của bàitoán Nguyên lý của phương pháp này được khái quát như sau:
Một tiến trình nào đó gửi thông điệp để yêu cầu sử dụng tài nguyên, mộttiến trình sử dụng xong tài nguyên nào đó truyền một thông tin giảiphóng khi nó ngừng chiếm dụng
Trong các hệ phân tán, chương trình cung cấp nằm trên một trạm và cáctiến trình đề nghị lại ở trên các trạm khác, các yêu cầu và khuyến nghịgiải phóng được truyền cho các chương trình cung cấp thông qua hìnhthức thông điệp, chuyển theo các kênh của hệ thống viễn thông Chính
vì vậy nhu cầu sắp xếp các yêu cầu này theo một trật tự nhất định nào
đó luôn luôn được đặt ra
Trang 10 Nếu chỉ có một thông điệp đến chương trình cung cấp thì trật tự đến thểhiện một trật tự chặt chẽ Ngược lại nếu có nhiều thông điệp đến cùngmột lúc thì việc sắp xếp chúng phải theo kiểu loại trừ trương hỗ tronghàng đợi cục bộ của trạm có chứa chương trình cung cấp Điều đó cũngcho phép ta có được một trật tự chặt chẽ
Trật tự có được tại trạm cung cấp có thể không giống như trật tự phát,nếu thời gian truyền không được cố định Trường hợp này khá phổ biếntrong mạng máy tính Nhưng nếu ta muốn xử lý các thông điệp theotrình tự không tính tới thời gian truyền, thì cần phải tính đến một trật tựtổng quát của các lần truyền thông điệp từ các trạm khác nhau
2.3 Vấn đề cần giải quyết cho bài toán bãi đỗ xe
Không có hai tiến trình truy cập cùng một tài nguyên cùng một thời điểm.Bất kỳ tiến trình nào muốn truy cập tài nguyên thì cuối cùng cũng truy cập đượctài nguyên đó Ngoài ra, chúng ta yêu cầu mỗi tiến trình phải tuân theo thêm haiđặc điểm sau:
Mỗi tiến trình nên yêu cầu tài nguyên theo một trình tự và liên tục, bắtđầu và kết thúc tại một vài tài nguyên duy nhất nào đó mà các tàinguyên này được tiến trình tự chọn
Bất kỳ một tiến trình mà dành được tất cả các tài nguyên mà nó muốn,cuối cùng cũng phải giải phóng tất cả tài nguyên đó
Có hai sự khó khăn đáng kể là bài toán phải giải quyết: Số lượng các tiếntrình tham gia thì không được biết giữa các tiến trình và cũng không biết được
số lượng tài nguyên được chia sẻ
Chúng ta trước hết hãy quan sát tình huống như sau, không có bất kỳ sựràng buộc thêm, bất kỳ tình huống các tiến trình chờ đợi lẫn nhau, bài toán chỉ
có duy nhất một tiến trình đơn ở một thời điểm điều khiển vị trí để xe
Vấn đề đặt ra đó là bài toán không cho phép bất kỳ giải pháp mô hình bấtđồng bộ thuần tuý Điều không thể xuất phát theo một sự suy diễn mà không
Trang 11biết được tập hợp các tiến trình tham gia Thật vậy, trong mô hình bất đồng bộkhi các messages có thể chiếm một thời gian dài tuỳ tiện trước khi phát đi, mộttiến trình không có cách nào biết các tiến trình xung quanh nó.
2.3.1 Giải quyết vấn đề
Cho một bãi đỗ xe ô tô N chỗ và có ít nhất là hai lối vào Hành vi của ô tôlà: vào bãi (vào), đỗ (do), Ra (ra)
Việc quản lý truy cập bao gồm ghi lại số lượng xe vào E, số lượng xe ra S
và kiểm tra X mỗi khi muốn cho xe vào bãi theo công thức:
X = N – E + S > 0Trong hệ thống này, người ta sử dụng bộ điều khiển Ci để có được số lượngvào chính xác là Ei, số lượng ra là Si Cho biết M là số lượng bộ điều khiển cótrong hệ Người ta muốn trang bị cho mỗi Ci một biến Xi - số lượng chỗ còntrống trong bãi nhằm mục đích có thể sử dụng điều kiện cục bộ:
số họ phát đi thông tin như sau :
STT Ký hiệu Thông tin phát đi
2 M2 Đã có 10 chỗ bị chiếm
3 M3 Dành 10% chỗ trống để quét dọn sân bãi
Bảng 2-1: Thông tin phát đi
Bảng trên cho ta thấy, nếu ta không thấy ràng buộc nào đối với trình tự xử
lý các thông điệp nhận được của các người bảo vệ thì các người bảo vệ này sẽ có
Trang 12số lượng chỗ trống khác nhau Để bảo đảm các bảng cập nhật khác nhau thì trình
tự cập nhật nhất thiết phải giống nhau trên tất cả các trạm
Thông điệp
Giá trị
Thông điệp
Giá trị
Thông điệp Giá trị
Bảng 2-2: Trật tự các thông điệp gửi đến từ các trạm
Từ kết quả trên, ta thấy rằng nếu trật tự các thông điệp đến với các ngườibảo vệ không giống nhau thì số lượng chỗ trống của bãi đỗ xe ở mỗi nguời bảo
vệ ở một thời điểm là không giống nhau Vì ta xem một người bảo vệ như là mộtchương trình cung cấp chỗ để xe của bãi, các chương trình này nằm trên cáctrạm khác nhau cách nhau về mặt địa lý Do đó trật tự các thông điệp đến cáctrạm là khác nhau và vì vậy kết quả thể hiện trên các chương trình là khônggiống nhau Điều này thể hiện sự không gắn bó giữa các chương trình Để chocác kết quả trên các trạm là giống nhau thì các thông điệp đến các trạm theo mộttrật tự giống nhau
Điều này xảy ra trên các hệ tập trung Đối với hệ phân tán chúng ta phảixây dựng thuật toán cung cấp cho hệ tin học phân tán
Một sự hoạt động gắn bó của cá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 hay khuyến nghị giải phóng tàinguyên
1 Các bộ cung cấp phải thực hiện cùng một giải thuật
2 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
3 Các thông điệp phải được xử lý cùng một trật tự như nhau trong
Trang 13các chương trình cung cấp
Bảng 2-3: Các quy tắcQuy tắc sau cùng nhấn mạnh đến sự thiết yếu phải có một trật tự duy nhấttrên tập hợp các thông điệp của hệ Trật tự này có thể được thực hiện thông quaviệc hợp lực giữa các tiến trình cung cấp hay giữa các tiến trình phát thông điệp.Chiến lược hợp lực giữa các tiến trình phát nhằm phân phối cho mỗi thông điệp
một dấu nhằm dựa vào đó ta có thể xác lập một trật tự hoàn toàn.
2.3.2 Thuật toán chương trình
Đó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ị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ồ lô gíc cục bộ của chính trạm Các đồng hồ này được lấy lại thông quahội thoại giữa các trạm
Giải thuật Lamport loại trừ tương hỗ trên cơ sở đóng dấu: Thuật toán này
được Lamport (1978) đưa ra, nó sử dụng cơ chế đóng dấu thời gian cho việcđồng bộ các đồng hồ lôgic
a) Các giả định
Chúng ra giả định mô hình mạng kết nối hoàn toàn trong đó các tiến trìnhliên lạc thông qua các kênh FIFO tin cậy Tức là, các thông điệp không thể sắpxếp lại theo trật tự khác
Các giả định được thực thi một cách dễ dàng ở tầng giao vận
b) Các kiểu thông điệp
(REQ, C i , i) : Một yêu cầu cho việc truy cập vào miền găng CS của tiến
trình Pi Yêu cầu này được phát đi cho tất các các tiến trình khác.
(REP, C i , i) : Hồi âm từ tiến trình Pi cho tiến trình Pj khi Pi nhận được yêu
cầu từ Pj.
Trang 14(REL, C i , i) : Thông điệp giải phóng từ Pi thông báo cho biết nó đã rời khỏi
CS Thông điệp này được gửi cho tất cả các tiến trình khác.
c) Các biến tiến trình
C i : Đồng hồ cục bộ của Pi, khởi tạo từ 0.
q i : Hàng đợi [0 … n-1] chứa các thông điệp
d) Thuật toán
Khi một tiến trình tại trạm Si muốn thi hành đoạn găng, nó sẽ gửi thôngđiệp REQ có đánh dấu thời gian cho tất cả các trạm trong hệ thống kể có trạm Si.Mỗi trạm, Si, duy trì một hàng đợi chứa các thông điệp yêu cầu được sắpxếp theo trật tự các dấu thời gian; các đồng hồ logic và quan hệ trật tự toàn bộđược sử dụng để gắn các dấu thời gian
Khi một trạm nhận được yêu cầu, nó sẽ đưa thông điệp đó vào hàng đợiyêu cầu của nó theo thứ tự dấu thời gian và gửi một thông điệp trả lời REP Nếucần, quan hệ trật tự toàn bộ được sử dụng để phá vỡ các sự ràng buộc
Ý tưởng chung là một tiến trình không thể thi hành đoạn găng của nó chođến khi nó nhận được trả lời từ tất cả các trạm khác
Tóm lại, một trạm thi hành miền găng của nó khi:
Nhận được thông điệp trả lời từ tất cả các trạm còn lại và
Yêu cầu REQ của nó là ở trên đỉnh của hàng đợi cục bộ của nó
Khi một trạm hoàn thành miền găng của nó, nó sẽ gửi khuyến nghị giảiphóng REL đến tất cả các trạm Yêu cầu của nó được loại khỏi tất cả các hàngđợi tại thời điểm này Nếu các trạm khác đang chờ để thi hành miền găng củachúng, một trong các trạm đó bây giờ có thể bắt đầu thực hiện miền găng củamình
e) Nhận thấy
Hoạt động: 3(N-1) thông điệp cần thiết cho mỗi miền găng được thi hành.(N-1) thông điệp REQ, (N-1) thông điệp REP và (N-1) thông điệp REL
Trang 15Độ trễ đồng bộ: T (trong đó T thời gian trung bình truyền thông điệp) Khinhận được thông điệp giải phóng, tiến trình tiếp theo có thể bắt đầu thi hành.Loại trừ tương hỗ là đạt được: Các dấu thời gian là duy nhất, vì vậy tất cảcác hàng đợi sẽ giữ các yêu cầu trong cùng một thứ tự Chỉ một tiến trình duynhất sẽ nằm ở đỉnh của các hàng đợi
Không đổi: Các yêu cầu được cấp quyền dựa trên cơ sở của trật tự dấu thờigian và các tiến trình gửi các thông điệp REL
Trang 16CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH
3.1 Giới thiệu ngôn ngữ Java
Ngôn ngữ xây dựng chương trình là ngôn ngữ Java, với việc sử dụng cácđối tượng phân tán bằng kĩ thuật RMI trong Java
3.1.1 Sơ lược về ngôn ngữ lập trình 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ình
tê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ạythố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
Trang 17đượ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)
Tí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
3.1.2 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 viết dưới dạng thủ tục hay hàm gọ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ênmáy cục bộ Đối với các hàm (hoặc đối tượng) thư viện như
Trang 18System.out.println(), bạn không cần quan tâm đến cách thức mà hàm thư việnnày cài đặt Điều quan tâm ở đây là đối số truyền cho hàm và kết quả trả về Vậythì có cách nào nạp nội dung của hàm hay đối tượng ở một máy nào đó và gọichúng từ một máy hay không? Đây chính là nội dung của lập trình phân tán mãlệnh RMI - mang ý nghĩa triệu gọi phương thức từ xa - là cách thức giao tiếpgiữ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ằm trên các máy khác nhau có thể triệu gọi lẫn nhau.
Hình 3-1 cho thấy mô hình triệu gọi đối tượng phân tán Trê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ọi phương thứccục bộ (local method invoke) đây là cách mà lập trình hướng đối tượng truyềnthố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ênmột máy khác dự vào giao thức triệu gọi từ xa RMI thông qua lớp trung gian:stub (lớp móc) - máy khách; skeletion (lớp nối) - máy khách Ví dụ như A1 gọiC1 (Trình biên dịch Java sẽ giúp bạn tạo 2 lớp trung gian C1_Skel và C1_Stub,kết quả trả về sẽ được C1_Skel đóng gói trả ngược lại cho C1_stub C1_Stub sẽchuyển giao kết quả trả về cho A1), tương tự A2 gọi B1
Trang 19Hình 3-1: Gọi phương thức thông qua lớp trung gian
3.2 Nghiên cứu RMI trong Java
Tiến trình thực hiện các ứng dụng phân tán sử dụng kỹ thuật này nói chunggồm các bước sau:
3.2.1 Bộ đăng ký (REGISTRY)
Một Client muốn sử dụng các phương thức và gọi được đối tượng từ xa thìClient đó phải liên lạc với rmiregistry để lấy về tham chiếu đối tượng Dịch vụđăng ký và truy tìm đối tượng được Java quản lý bằng các hàm giao tiếp JNDI(Java Naming Directory Interface) Các hàm JNDI ở máy khách(Naming.lookup()) sẽ liên lạc với rmiregistry để nhận về tham chiếu đối tượng.Trong khi các hàm JNDI ở máy chủ (Naming.bind() hoặc Naming.rebind()) cónhiệm vụ đăng ký tên đối tượng với rmiregistry
Mục đích của các ứng dụng RMI là lập trình phân tán đối tượng trên môhình kết nối mạng
3.2.2 Trao đổi thông tin giữa các đối tượng
Trao đổi thông tin giữa các đối tượng ứng dụng kỹ thuật RMI trên thựcchất là quá trình xây dựng những tham chiếu từ xa giữa các đối tượng, một khiđạt được sự tham chiếu này các đối tượng từ xa có thể gọi ra các phương thứccủa nhau cho dù nội dung đoạn mã có thể phân tán tại các Client hoặc mộtServer nào đó Việc trao đổi thông tin từ xa này đã được xem như một tiêuchuẩn trong việc gọi ra các phương thức trong Java
Việc nạp các lớp thao tác mã (bytecode) cho các đối tượng thực chất làchuyển đi các tham số hoặc giá trị trả về RMI cho phép nơi gọi chuyển hoàntoàn các đối tượng Java đến các đối tượng từ xa, RMI cung cấp các kỹ thuật cầnthiết cho việc nạp mã của các đối tượng từ xa cũng như chuyển dữ liệu của nó.Trong phạm vi ứng dụng này đã sử dụng một trình đăng ký để có được các thamchiếu đến các đối tượng từ xa Server gọi trình đăng ký để liên kết tên với đối
Trang 20tượng từ xa Client tìm kiếm đối tượng từ xa thông qua tên của nó trong trìnhđăng ký của Server và gọi ra phương thức trên đó.
Tiến trình nạp các lớp bytecode sử dụng một trang web Server để trao đổithông tin từ Server đến Client và ngược lại cho các mục đích khác nhau của cácđối tượng
RMI có thể nạp các lớp bytecode bằng cách sử dụng bất kỳ giao thức URLnào (HTTP, FTP, file, v.v.) được hệ thống java cung cấp
3.2.3 Tải xuống các lớp Bytecode cho đối tượng
Bởi vì RMI cho phép một chương trình gọi nhận được các phương thức củađối tượng để phục vụ cho các đối tượng từ xa, để thực hiện được điều đó RMIcung cấp một kỹ thuật cần thiết cho việc nạp mã của các phương thức thuộc đốitượng khá tốt cũng như việc truyền dữ liệu của nó Theo mô hình minh họa bằnghình ảnh của một ứng dụng RMI có sử dụng trình đăng ký (registry) để đạt đượckhả năng tham chiếu đến các đối tượng từ xa Trước Server gọi ra trình đăng kýregistry để liên kết tên của các đối tượng từ xa Sau đó
Client tìm kiếm đối tượng từ xa bằng tên của nó đã đăng ký trên Server vàgọi ra các phương thức trên đối tượng đó Sự minh họa này cũng chỉ ra rằng hệthống RMI sử dụng một Web Server đang hoạt động để nạp các lớp mãbytecode từ Server đến phục vụ cho những yêu cầu của Client và ngược lại chocác đối tượng khi cần
Tất cả các hoạt động nói trên có thể được mô tả như hình sau
Web
Web server
RMI
RMI
URL protocol URL protocol
URL protocol
RMI