Ý tưởng của vấn đề là trong một mạng tất cả các dịch vụ được đặttập trung tại một máy chuyên trách nào đó, khi có nhu cầu người sử dụng sẽ tải các dịch vụnày về máy cục bộ để sử dụng.. T
Trang 1LỜI CẢM ƠN
“Cơm cha áo mẹ chữ thầy”, câu nói từ xưa đã thấm nhuần vào tâm tư tình cảm của mỗi người Việt Nam, mà tôi đã được học ngay từ thuở bé Hôm nay, được vinh dự hoàn thành một đề tài tốt nghiệp, tôi vui sướng nhường nào! Lúc này tôi lại càng trân trọng câu nói ấy hơn bao giờ hết.
Đúng vậy, nếu không có cha mẹ, không có thầy cô chắc chắn tôi sẽ không có được ngày hôm nay.
Trước tiên con xin thành kính cảm ơn cha mẹ, cha mẹ đã cho con tất cả để vững bước trên đường đời.
Tôi xin chân thành cảm ơn các thầy cô đã giúp đỡ, truyền đạt cho tôi những kiến thức quí báu trong suốt quá trình học tập tại trường.
Tôi xin chân thành cảm ơn thầy, đã tận tình chỉ bảo, cho tôi nhiều ý kiến quí giá để tôi có thể hoàn thành tốt đồ án tốt nghiệp này.
Cuối cùng, tôi xin cảm ơn tất cả mọi người, đã ủng hộ, giúp đỡ tôi trong thời gian qua.
Đà Nẵng 20/5/2003
Trang 2Lời Cam Đoan.
Tôi xin cam đoan những điều dưới đây là sự thật, và sẽ chịu mọi trách nhiệm nếukhông đúng sự thật :
1- Đồ án được hoàn thành trên cơ sở kiến thức học được của bản thân, những
ý kiến định hướng của thầy hướng dẫn Nguyễn Tấn Khôi và sự nghiên cứu, lao động của tôi Không có sự sao chép, lắp ráp từ những dự án khác 2- Những vấn đề lý thuyết tham khảo, trong tất cả các tài liệu đã nêu ra trong
phần tài liệu tham khảo Những lý thuyết này là đúng, đã được triển khai ứng dụng và kiểm tra trong thực tế.
3- Những vấn đề kỹ thuật giải quyết vấn đề trong đề tài đã được kiểm tra,
chạy được như đã trình bày trong đồ án.
4- Đảm bảo chương trình chạy đúng, và chịu trách nhiệm về toàn bộ những gì
đã trình bày.
Đà Nẵng 20/5/2003.
Trang 3MỤC LỤC
Chương 1 TỔNG QUAN VỀ ĐỀ TÀI 8
1 GIỚI THIỆU ĐỀ TÀI 8
2 HƯỚNG NGHIÊN CỨU 8
Chương 2 CƠ SỞ LÝ THUYẾT 10
1 LẬP TRÌNH MẠNG VỚI JAVA 10
1.1 Liên lạc trên internet 10
1.2 Dịch vụ từ phía máy chủ và khái niệm cổng 10
1.3 Mô hình khách chủ và khái niệm Socket 10
1.4 Các lớp cần thiết trong lập trình mạng với Java 11
1.5 Giới thiệu webserver và giao thức http 11
2 MÔ HÌNH PHÂN TÁN ĐỐI TƯỢNG RMI 11
2.1 Tìm hiểu cơ chế hoạt động của ứng dụng JavaRMI 13
2.2 Các vấn đề cần chú ý trong JavaRMI 13
2.3 Tìm hiểu tầng _Stub và _Skel 14
2.4 Tìm hiểu bộ đăng ký Rmiregistry và các hàm đăng kí 15
3 KỸ THUẬT LẬP TRÌNH PHÂN TÁN JAVARMI 16
3.1 Tổng quan một ứng dụng JavaRMI 16
3.2 Trình tự xây dựng ứng dụng JavaRMI 16
3.3 Các cách đăng ký đối tượng với rmiregistry 18
3.4 Truyền tham số khi gọi phương thức từ xa 18
3.4.1 Các giao tiếp Remote, Serializable và tham số 18
3.4.2 Chuyển đối tượng theo tham chiếu và kỹ thuật callback 19
3.5 Các kỹ thuật gọi đối tượng ở xa trong JavaRMI 21
3.5.1 Gọi bằng phương thức động, với kĩ thuật phản chiếu 21
Trang 43.5.2 Cơ chế tự kích hoạt với rmid.exe 22
3.5.3 Trình mồi nạp ứng dụng từ xa với bộ nạp lớp JavaRMI 23
3.6 Vấn đề bảo mật và kĩ thuật xuyên hầm trong JavaRMI 25
Chương 3 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 27
1 PHÂN TÍCH HỆ THỐNG THÔNG TIN 27
2 THIẾT KẾ VÀ TỔ CHỨC CƠ SỞ DỮ LIỆU 31
Chương 4 XÂY DỰNG CHƯƠNG TRÌNH 33
1 PHÂN TÍCH YÊU CẦU & KHÁI QUÁT MÔ HÌNH 33
2 THIẾT KẾ CHƯƠNG TRÌNH 35
2.1 Module RootServer 35
2.1.1 Kỹ thuật 35
2.1.3 Các lớp 37
2.2 Module ClientAgent 41
2.2.1 Kỹ thuật 41
2.2.2 Thuật toán 41
2.2.3 Các lớp 42
2.3 Module Client 44
2.3.1 Kỹ thuật 44
2.3.2 Thuật toán 45
2.3.3 Các lớp 45
3 XÂY DỰNG DỊCH VỤ ĐỂ TRIỂN KHAI TRÊN HỆ THỐNG 46
3.1 Các yêu cầu chung 46
3.2 Kĩ thuật 46
4 KẾT QUẢ CHƯƠNG TRÌNH 51
4.1 Chương trình Server 51
4.2 Chương trình Agent 52
4.3 Chương trình Client 53
Trang 54.4 Service 54
Chương 5 ĐÁNH GIÁ KẾT QUẢ 55
1 KẾT QUẢ ĐẠT ĐƯỢC 55
2 NHẬN XÉT 55
3 HƯỚNG PHÁT TRIỂN 55
4 KẾT LUẬN 56
Chương 6 Phụ Lục 57
Trang 6DANH MỤC CÁC HÌNH VẼ & BẢNG BIỂU.
H1 Sự độc lập giữa khai báo và thực thi hành vi
H2 Các lớp sử dụng giao tiếp trong JavaRMI
H3 Kiến trúc JavaRMI
H4 Hoạt động của ứng dụng JavaRMI
H5 Mô hình ủy nhiệm (proxy pattern)
H6 Vai trò _stub và _skel
H7 Cơ chế đăng kí & truy tìm dịch vụ JavaRMI
H8 Hoạt động của hệ thống callback
H9 Kỹ thuật trình nạp mồi từ xa
H16 Biểu đồ hoạt động (Sơ đồ khối của hệ thống)
H17 Sơ đồ hoạt động của hệ thống
Trang 7Lời Mở Đầu
Sự phát triển của khoa học kỹ thuật, Công nghệ thông tin ngày càng đặt ra nhiều vấn
đề cần giải quyết Trong đó vấn đề thời gian và hiệu quả sử dụng các tài nguyên trongmạng để đáp ứng các yêu cầu của con người là rất quan trọng Chúng ta phải tìm cách khaithác tối đa khả năng của tài nguyên trong mạng, sao cho đáp ứng tốt nhất về nhu cầuthông tin của con người Như chúng ta đã biết, nhu cầu thông tin là vô hạn, nó đa dạng vềlĩnh vực phong phú về lượng, tuy nhiên tài nguyên lại rất hạn chế và không thể đáp ứng tốtmọi yêu cầu của con người Một môi trường tài nguyên cụ thể chỉ có thể đáp ứng tốt trongmột vài lĩnh vực thông tin nhất định Như vậy, vấn đề làm thế nào để trên cùng một nền tàinguyên như thế ta có thể nâng cao khả năng phục vụ cho nhiều đối tượng
Mặc khác, trong thực tế có không ít những bài toán yêu cầu một khối lượng tính toánrất lớn, cũng có những ứng dụng bắt buộc triển khai trên mạng và dữ liệu xử lí của nókhông tập trung mà phân tán trên các tài nguyên trong mạng
Ngày nay, lập trình và ứng dụng phân tán đã có những bước tiến đáng kể Mục tiêucủa nó là tận dụng tài nguyên, chia sẻ tài nguyên nhằm đáp ứng tốt hơn nhu cầu thông tincủa con người trên cơ sở nguồn tài nguyên cố định
Với những phân tích như trên ta thấy vấn đề cập nhật, tải các dịch vụ động trongmạng là rất quan trọng Ý tưởng của vấn đề là trong một mạng tất cả các dịch vụ được đặttập trung tại một máy chuyên trách nào đó, khi có nhu cầu người sử dụng sẽ tải các dịch vụnày về máy cục bộ để sử dụng Khi kết thúc dịch vụ thì tất cả các tài nguyên được giảiphóng, bỡi vì dịch vụ không được lưu cố định trên đĩa của máy cục bộ Như vậy, việc tảicác dịch vụ động đem lại các lợi ích sau:
- Cho phép tiết kiệm, chia sẻ được tài nguyên trong mạng
- Nâng cao tính đa dạng, phong phú và phân tán của dịch vụ
- Quản lý dịch vụ sẽ tập trung hơn, khi có thay đổi về dịch vụ sẽ tiết kiệm côngsức, chi phí xử lý
- Dịch vụ có tính cập nhật, tương thích cao
Với những kiến thức đã học được và sự định hướng của thầy hướng dẫn, tôi đã chọn
đề tài “Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán” nhằm giải quyết những vấn đề đã phân tích ở trên
Qua thời gian thực hiện đề tài tôi đã thu được những kết quả nhất định, tuy nhiên chắc còn nhiều thiếu sót Rất mong những ý kiến đóng góp quí giá của thầy cô, của các bạn
để đề tài được hoàn thiện và có thể triển khai ứng dụng trong thực tế
Trang 8Chương 1 TỔNG QUAN VỀ ĐỀ TÀI
1 GIỚI THIỆU ĐỀ TÀI
“Tính toán phân tán” có nghĩa là việc tính toán không tập trung trên một máy
mà phải phân tán ở nhiều máy trên mạng, nhằm nâng cao tốc độ tính toán, tận dụngtốt các tài nguyên trên mạng Như vậy, nhiệm vụ của đề tài nhằm tìm hiểu các côngnghệ hỗ trợ lập trình mạng, hỗ trợ triển khai các ứng dụng phân tán và bước đầuthiết kế một hệ thống có thể hỗ trợ các tính toán phân tán ở một mức độ nào đó Trên tinh thần đó và trong quá trình thực hiện đồ án tốt nghiệp, tôi tiến hànhtìm hiểu và thiết kế một hệ thống đơn giản, trên đó ta có thể triển khai các dịch vụtính toán, các tính toán đó được phân phối tới các máy trong mạng để thực hiện saocho đạt hiệu quả tốt trong tính toán cũng như việc sử dụng tài nguyên trong mạng
Hệ thống được triển khai trên mạng và được triển khai những dịch vụ trên nó,khi hệ thống tiếp nhận yêu cầu tính toán căn cứ vào dịch vụ, tình trạng của hệ thốngmạng hiện tại, hệ thống sẽ phân phối công việc cho các máy chức năng và đóng vaitrò trung gian nhận gởi các yêu cầu cũng như kết quả Mọi tác động đến hệ thốngđều thực hiện tập trung tại một máy, các máy trong mạng tự động cập nhật lại
hệ thống
Vấn đề nảy sinh ở đây là, làm thế nào để đặt toàn bộ một ứng dụng hoàn chỉnhtrên một máy Sau đó phân phối các thành phần của ứng dụng đến các máy khác vàgọi thực thi các phần đó ngay tại các máy được phân phối rồi nhận kết quả trả về,nghĩa là phải triệu gọi các module chương trình thực thi tại một máy ở xa trongmạng
2 HƯỚNG NGHIÊN CỨU
Từ khái quát của đề tài ta thấy, đây là một ứng dụng để triển khai trên mạngmáy tính Đòi hỏi những kỹ thuật lập trình trên môi trường mạng, ứng dụng phảigọn, tính toán nhanh, đặc biệt là yêu cầu tương thích với một mạng hỗn tạp nhiềunền tảng phần cứng và hệ điều hành khác nhau
Ngày nay có nhiều công cụ sử dụng trong lập trình mạng Tuy nhiên căn cứchức năng và yêu cầu của hệ thống cần xây dựng, thì ngôn ngữ JAVA và các côngnghệ của nó là tốt hơn cả Đặc biệt ngay từ phiên bản 1.1 của bộ JDK hãng Sun đãđưa ra một công nghệ mới gọi là triệu gọi phương thức từ xa- Remote Method
Trang 9invocation (JavaRMI) Đúng như tên gọi của nó, công nghệ này cho phép xây dựngcác ứng dụng có thể gọi các phương thức trên một máy khác Và đây cũng chính làchìa khóa để xây dựng hệ thống trong đề tài nêu ra Do đó trong đề tài đã chọnhướng nghiên cứu là kỹ thuật lập trình mạng với ngôn ngữ Java, công nghệJavaRMI Công nghệ này được tìm hiểu và ứng dụng xuyên suốt trong đề tài vàcũng là “trái tim” của hệ thống.
Dựa trên kỹ thuật lập trình mạng với Java và công nghệ JavaRMI , ta xâydựng một ứng dụng gồm ba thành phần chính để triển khai trên mạng, tương ứngvới các máy đóng vai trò là Client, Server và Agent Trong đó, Client là máy kháchyêu cầu các dịch vụ; Server là máy chủ chịu trách nhiệm điều khiển cả hệ thống,phân phối công việc và làm trung gian vận chuyển giữa máy khách và máy trạmchức năng; Agent là các máy trạm chức năng, nó được phân phối công việc từServer và thực thi các công việc đó
Tuy nhiên, để hệ thống có tính nhất quán thì hầu như toàn bộ hệ thống đượcđặt trên Server, ở Client và Agent chỉ là một mẫu chương trình đơn giản có nhiệm
vụ kết nối Server để tải về các thành phần tương ứng trên Server
Trong phần tiếp theo của đồ án trình bày về lý thuyết lập trình mạng với Java
và kỹ thuật lập trình phân tán với công nghệ JavaRMI
Trang 10Chương 2 CƠ SỞ LÝ THUYẾT
1 LẬP TRÌNH MẠNG VỚI JAVA.
Ngôn ngữ lập trình Java được công ty Sun Microsystem đưa ra vào năm 1990
Là ngôn ngữ lập trình mạnh mẽ, đặc biệt trong lĩnh vực phát triển các ứng dụng trênmạng Những đặc điểm của Java có thể mô tả ngắn gọn như sau: ”Java là ngôn ngữđơn giản, hướng đối tượng, phân tán, thông dịch, mạnh mẽ , bảo mật, cấu trúc độc lập, khả chuyển, hiệu quả cao và linh động”
1.1 Liên lạc trên internet.
Họ giao thức TCP/IP được xem là ngôn ngữ chung để các máy trên mạng cóthể “nói chuyện” với nhau Đây là những quy ước chung và là giao thức cốt lõi củagiao tiếp trong mạng Theo giao thức này, mỗi máy được đặt cho một tên riêng biệtgọi là địa chỉ IP, địa chỉ IP là duy nhất Các máy sẽ giao tiếp với nhau thông qua địachỉ IP này
Có hai cách chuyển dữ liệu trên mạng theo giao thức TCP và UDP Giao thứcTCP gởi từng gói dữ liệu đi, nơi nhận phải thông báo và kiểm tra xem dữ liệu đãđến đủ hay chưa, lỗi hay không lỗi Trước khi chuyển dữ liệu bao giờ cũng có sựkết nối giữa máy gởi , máy nhận và duy trì một tuyến kết nối trong quá trình truyền.Trái lại, giao thức UDP không có sự kết nối trước khi truyền, thông tin được đónggói gởi đi, mặc định bên nhận đang sẵn sàng và không có thông tin phản hồi từ bên nhận
1.2 Dịch vụ từ phía máy chủ và khái niệm cổng.
Khi kết nối vào máy chủ, ta có thể yêu cầu nhiều dịch vụ khác nhau; mỗi dịch
vụ đều có cách gởi nhận riêng TCP và UDP chỉ truyền dữ liệu giữa các máy còn dữliệu truyền tới dịch vụ nào thì thông qua khái niệm cổng (port) Mỗi dịch vụ sửdụng một cổng qui ước để trao đổi dữ liệu
1.3 Mô hình khách chủ và khái niệm Socket.
Có nhiều dịch vụ được kiến trúc theo mô hình khách chủ-Client/Server Theo mô hình này chương trình ở máy khách gởi yêu cầu tới Server và chương trìnhphía Server tiếp nhận, xử lý yêu cầu, sau đó gởi kết quả về Client Quá trình kết nối
và gởi dữ liệu thực hiện thông qua một cơ chế trừu tượng gọi là Socket Để tạo mộtkết nối qua Socket cần biết hai yếu tố là địa chỉ IP và cổng dịch vụ port
Trang 111.4 Các lớp cần thiết trong lập trình mạng với Java.
InetAddress dùng cho việc quản lý địa chỉ của máy theo tên và theo
số IP Cung cấp các phương thức để chuyển đổi và truy xuất địa chỉ IPSocket dùng tạo cổng để kết nối từ phía máy khách với máy chủ
ServerSocket dùng tạo cổng kết nối từ phía máy chủ với máy khách
DatagramSocket dùng chuyển đi một gói dữ liệu theo giao thức UDP
DatagramPacket dùng cho một gói chứa dữ liệu đi trên mạng theo UDP
URL là địa chỉ định vị tài nguyên trên mạng
1.5 Giới thiệu webserver và giao thức http.
Trình chủ Webserver là chương trình chạy trên máy chủ, có chức năng tươngtác với trình khách, xử lí dữ liệu, tìm kiếm thông tin và gởi kết quả về trình kháchtheo giao thức http
Giao thức http cung cấp cách thức giao tiếp giữa trình khách (thường là trình duyệt) và trình chủ Webserver Qua đó trình khách có thể gởi yêu cầu và nhận
về kết quả từ Webserver
2 MÔ HÌNH PHÂN TÁN ĐỐI TƯỢNG RMI.
Công nghệ JavaRMI(Remote Method invocation)-triệu gọi phương thức từ xa,lần đầu tiên được đề cập trong phiên bản 1.1 của bộ JDK đã đưa lập trình mạng lênmột mức cao hơn JavaRMI dễ sử dụng và là một công nghệ mạnh để phát triển cácứng dụng phân tán Muc tiêu của JavaRMI là cho phép xây dựng các chương trìnhJava có tích chất phân tán có mã lệnh hoàn toàn tương tự với các chương trình bình thường
Ý tưởng tạo ra các đối tượng phân tán ở xa của JavaRMI được tích hợp vàongôn ngữ Java và mô hình đối tượng cục bộ tạo ra một hệ thống thừa kế tính
an toàn, mạnh mẽ của Java trong vấn đề xử lí phân tán
So sánh đối tượng cục bộ và đối tượng ở xa
Vấn đề Đối tượng cục bộ Đối tượng từ xa
Định nghĩa Bằng một lớp Java Bằng giao tiếp interface được mở rộng từ
giao tiếp Remote
Thực thi Bằng lớp Java của nó Bằng những lớp trong giao tiếp
Khởi tao Toán tử new Không thể trực tiếp với new
Truy cập Trực tiếp qua biến đối
Trang 12Giao tiếp interafce.
Kiến trúc JavaRMI dựa trên nguyên lý cơ bản là: Việc định nghĩa các hành vi
và thực thi các hành vi đó là độc lập với nhau
JavaRMI cho phép phần mã lệnh định nghĩa các hành vi và phần mã lệnh gọithực hiện các hành vi đó có thể đặt trên những máy khác nhau, tạo nên những hệthống phân tán trên mạng Trong các hệ thống đó ở phía máy khách chỉ quan tâmđến các khai báo hành vi của dịch vụ và máy chủ chịu trách nhiệm thực thi các hành
vi đó
Giao tiếp interface là phần định nghĩa các hành vi trong JavaRMI còn phầnthực hiện các hành vi này được khai báo trong các lớp thực thi implementation
H1.Sự độc lập giữa khai báo và thực thi hành vi.
Giao tiếp interface được sử dụng ở hai lớp phía client và server
H2.Các lớp sử dụng giao tiếp trong JavaRMI.
Các tầng trong kiến trúc JavaRMI.
Kiến trúc JavaRMI được chia ra làm 3 tầng:
- Tầng Stub và Skel: Là tầng thấp nhất trong kiến trúc JavaRMI, làm trung giancho sự giao tiếp giữa client và server
- Tầng tham chiếu từ xa- Remote Reference: Chịu trách nhiệm diễn dịch và quản
lý các tham chiếu từ xa, tầng này kết nối client với một đối tượng từ xa trênserver bằng đối tượng Remoteref
Trang 13- Tầng giao vận Transport: Tạo ra kết nối vật lý giữa các máy trên mạng, chuyểnthông tin dựa trên giao thức TCP/IP.
H3.Kiến trúc JavaRMI
2.1 Tìm hiểu cơ chế hoạt động của ứng dụng JavaRMI.
Một ứng dụng JavaRMI, được thiết kế thành hai phần: trên client và server.Cho phép đặt nội dung của hàm hay đối tượng ở một máy và gọi thực hiện từ mộtmáy khác Máy chứa mã lệnh và thực thi mã lệnh đó gọi là server còn máy thựchiện gọi là client Ở client chỉ cài đặt các khai báo của phương thức thông qua giaotiếp interface mà không cài đặt chi tiết phần thân phương thức
Sau khi xây dựng hoàn chỉnh một ứng dụng JavaRMI, ta tiến hành các thao tácsau để kích hoạt ứng dụng đó:
- Biên dịch các file java nguồn ra các file class
- Tạo các file trung gian sub và skel bằng trình rmic
- Đăng kí đối tượng trên server với bộ đăng ký rmiregistry
- Chạy chương trình trên client
Chương trình client tham chiếu đến đối tượng đã đăng ký trên server thôngqua giao tiếp trên client và giao thức JavaRMI để gởi triệu gọi đến server, servernhận lời triệu gọi đó và thực thi các phương thức rồi gởi kết quả về client Tất cảcác công việc tiếp nhận, gởi yêu cầu hoặc kết quả giữa hai bên được thực hiện thôngqua các lớp trung gian là stub ở client và skel ở server
H4.Hoạt động của ứng dụng JavaRMI.
2.2 Các vấn đề cần chú ý trong JavaRMI.
Các đối tượng trên các máy khác nhau hoạt động trên các tiến trình khác nhaunên việc tham chiếu biến, địa chỉ đối tượng là hoàn toàn khác nhau
Computer B implement
Computer B implement
Computer A interface
Computer A interface
request
result
RMI
Trang 14Tham số, kết quả phải truyền qua mạng nên phải có cơ chế quản lý chặt chẽ dữliệu giữa các tiến trình.
2.3 Tìm hiểu tầng _Stub và _Skel.
Đây là tầng thấp nhất trong kiến trúc JavaRMI, trong tầng này Java sử dụng
mô hình thiết kế ủy nhiệm Trong mô hình này một đối tượng trong một môi trường có thể được đại diện bỡi một đối tượng khác trong môi trường khác, gọi
là đối tượng ủy nhiệm Đối tượng này biết cách lắng nghe các triệu gọi phươngthức giữa các đối tượng riêng biệt
H5.Mô hình ủy nhiệm (proxy pattern).
Trong mô hình này lớp _stub đóng vai trò là proxy, còn lớp implement củadịch vụ là RealSubject
Lớp _skel là lớp đóng vai trò trợ giúp, nó được tạo ra để JavaRMI sử dụng.Lớp _skel biết cách giao tiếp với lớp proxy _stub qua kết nối JavaRMI
Hai lớp _stub và _skel đóng vai trò trung gian trong giao thức JavaRMI Hailớp này luôn giữ một cuộc thoại với nhau, _stub tiếp nhận lời gọi đối tượng từ xasau đó đóng gói các tham số chuyển tới lớp _skel, lớp _skel nhận dữ liệu tháo gói
và thực hiện lời gọi tới đối tượng implement của dịch vụ, tiếp theo đóng gói kết quả
gởi về cho _stub, _stub nhận kết quả trả về cho đối tượng gọi.
6.Vai trò _stub và _skel
_skel class
Object B Computer B
_skel class
Object B Computer B
Computer A _stub class Object A
Computer A _stub class
Object A RMI
Trang 152.4 Tìm hiểu bộ đăng ký Rmiregistry và các hàm đăng kí.
Một câu hỏi đặt ra khi mới bắt đầu tìm hiểu JavaRMI là làm sao chương trình
ở client có thể tham chiếu đến đối tượng trên server và đăng kí đối tượng trên serverbằng cách nào? Tất cả nhờ vào bộ đăng ký rmiregistry của Java Đây là chươngtrình rmiregistry.exe trong bộ jdk, nó có trách nhiệm quản lý các đối tượng có khảnăng triệu gọi từ xa ở máy server và lắng nghe các triệu gọi từ client, tại một cổngdịch vụ nhất định, măc định rmiregistry hoạt động trên cổng 1099
Để một đối tượng có thể được triệu gọi từ xa, trước tiên nó phải đăng kí vớirmiregistry Trước khi máy khách muốn sử dụng đối tượng ở máy chủ, nó phải liênlạc với bộ đăng kí rmiregistry để lấy về tham chiếu đến đối tượng trên máy chủ.Quá trình đăng ký, truy tìm tên đối tượng được thực hiện bỡi các hàm giao tiếp API JNDI (Java naming directory interface)
Phương thức đăng ký ở server Đối tượng trên server dùng hàmNaming.bind();
Naming.bind(“rmi://IP address/registryName/”,objectName);
- registryName: tên khi đăng kí, client sẽ tham chiếu đến tên này
- ObjectName: tên đối tượng cần đăng ký
- IP address địa chỉ máy chạy rmiregistry
Phương thức truy tìm ở client Đối tượng trên client dùng hàmNaming.lookup ();
Naming.lookup( rmi://IP address/registryName );“rmi://IP address/registryName”); ”);
- registryName: tên đối tượng đã đăng ký trên server
H7.Cơ chế đăng kí & truy tìm dịch vụ JavaRMI.
Jvm server rmiregistry.exe
Jvm client client
Jvm server server
2.Naming.lookup()
1 Naming.bind() 3
4
Trang 161 Đăng ký đối tượng với rmiregistry.
2 Client truy tìm tham chiếu trên rmiregistry
3 Tham chiếu đối tượng trả về phía client
4 Thực hiện triệu gọi phương thức
3 KỸ THUẬT LẬP TRÌNH PHÂN TÁN JAVARMI
3.1 Tổng quan một ứng dụng JavaRMI
Một ứng dụng JavaRMI hoàn chỉnh gồm hai thành phần ở client và server:
Phía client gồm có:
- Lớp giao tiếp interface Lớp cài đặt khai báo của các phương thức
- Lớp thực hiện triệu gọi đối tượng từ xa
- Lớp _stub là lớp trung gian phía client, nó được tạo tự động bỡi rmic
Phía server:
- Lớp implement cài đặt cụ thể phần thân của các phương thức
- Lớp cài đặt để thực hiện đăng ký đối tượng với rmiregistr
- Lớp giao tiếp interface Lớp cài đặt khai báo của các phương thức
- Lớp _skel là lớp trung gian phía server, dược tạo tự động bỡi rmic
Đây chỉ là mô hình mẫu, trong khi cài đặt các ứng dụng cụ thể chúng ta có thểthay đổi các thành phần của ứng dụng Sao cho phù hợp với yêu cầu của ứng dụngđặt ra nhưng dù sao thì các thành phần này không thể thiếu được, nó chỉ có thể đổidạng, đổi vị trí, còn chức năng của nó vẫn tồn tại trong hệ thống
3.2 Trình tự xây dựng ứng dụng JavaRMI
Bước 1 Xây dựng đối tượng đặc tả giao tiếp interface.
Muốn đối tượng có khả năng giao tiếp được với các đối tượng ở xa ta phảikhai báo khả năng Remote, bằng cách cho lớp thừa kế lớp Remote và tất cả cácphương thức phải có khả năng ném ra ngoại lệ với RemoteException
Ví dụ khai báo:
public interface interfaceName extends Remote {
public type methodName(parameters)throws RemoteException;
}
Trang 17Lớp giao tiếp Remote là một interface rỗng dùng đánh dấu cho máy ảo Javabiết được khả năng giao tiếp từ xa.
Bước 2 Xây dựng lớp thực thi implement
Trong lớp này phần thân của các phương thức được cài đặt đầy đủ, và đây chính là
mã nguồn sẽ thi hành khi gọi các phương thức từ xa Lớp này phải sử dụng giao tiếp
ta đã xây dựng trước
Ví dụ:
public class implementName implements interfaceName{
public type methodName(parameter)throws RemotException{
// method body;
} }
Bước 3 Xây dựng lớp đăng ký đối tượng trên server
Trong lớp này sẽ tạo ra một đối tượng implementName, sau đó dùng các hàm đểđăng ký đối tượng đó với rmiregistry
Các phần lệnh chính trong lớp này là:
+ Tạo đối tượng Object=new implementName();
+ Thông báo sự hiện diện của đối tượng có khả năng truy xuất từ xa
Bước 4 Xây dựng chương trình triệu gọi đối tượng từ xa trên máy khách.
Để truy tìm đối tượng từ xa, chương trình máy khách gọi phương thức tĩnhNaming.lookup(), phương thức này cần hai đối số là chuỗi định dạng địa chỉ máychủ và tên đối tượng đã đăng kí
interfaceName object=(interfaceName)Naming.lookup(url);
Chuỗi url có dạng rmi://hostname/registryName
Tóm lại: Các bước thiết kế ứng dụng JavaRMI như sau:
- Đặc tả lớp giao tiếp của đối tượng
- Dự vào đặc tả cài đặt đối tượng chi tiết
- Tạo các lớp trung gian nhờ trình rmic
- Cài đặt đối tượng trên máy server
- xây dựng lớp triệu gọi
Trang 183.3 Các cách đăng ký đối tượng với rmiregistry.
Để đối tượng sẵn sàng cho triệu gọi từ xa thì đối tượng phải đăng kí vớirmiregistry Bộ đăng kí này mở socket và lắng nghe kết nối ở một cổng nào đó
Ta có thể thay đổi cổng của rmiregistry bằng lệnh như sau: >_ rmiregistry.exe port Nhưng phải khởi động trình đăng ký ở bên ngoài ứng dụng
Tuy nhiên, Java cũng cho phép ứng dụng tự tạo bộ đăng ký riêng bằng mãlệnh ngay trong chương trình, bằng cách gọi phương thức tĩnh createRegistry() củalớp LocateRegistry
Ví dụ: LocateRegistry.createRegistry (số cổng); tuy nhiên hạn chế là khi đốitượng tự tạo bộ đăng ký trên cổng nào thì nó sẽ độc chiếm trên cổng đó và khôngcho phép các đối tượng khác đăng kí cùng cổng với nó
Một bộ đăng kí có thể quản lý nhiều đối tượng Người sử dụng có thể liên hệvới bộ rmiregistry để lấy về danh sách các dịch vụ đang đăng ký, điều này rất tiệndụng cho việc kiểm tra, lựa chọn các dịch vụ đang hoạt động
3.4 Truyền tham số khi gọi phương thức từ xa.
Truyền tham số là một trong những vấn đề quan trọng nhất khi gọi phươngthức vì tham số là yếu tố chủ yếu để ta có thể tác động vào bên trong phương thức.Tham số mang thông tin truyền vào phương thức và tải thông tin ra bên ngoài Khitriệu gọi phương thức từ xa tham số phải được đóng gói chuyển qua mạng, nên dữliệu đến có lỗi hay không quyết định sự thất bại hay thành công của việc gọi phươngthức Mặc khác truyền dữ liệu giữa hai tiến trình trên hai máy độc lập là vấn đềkhông đơn giản, cần có sự trợ giúp của các kỹ thuật tiện ích Hai nguyên tắc truyềntham số qua mạng như sau:
+ Tất cả các kiểu dữ liệu cơ bản chuyển theo tham trị
+ Những đối tượng truyền qua mạng cần phải cài đặt một trong haigiao thức sau: Remote truyền theo tham chiếu và Serializable truyền theo tham trị
3.4.1 Các giao tiếp Remote, Serializable và tham số.
Lớp giao tiếp Serializable chỉ là một lớp rỗng, dùng cho mục đích báo hiệu.Tất cả các đối tượng cài đặt giao tiếp Serializable đều được Java xem như có khảnăng tuần tự hóa Nghĩa là có thể yêu cầu Java lưu toàn bộ đối tượng xuống một tậptin, sau đó truyền tập tin đi trên mạng đến nơi cần sau đó có thể khôi phục đối tượng
về trạng thái ban đầu (lúc chuyển đi) để sử dụng mà không cần phải khởi tạo lại Với cơ chế truyền tham số theo tham trị, khi lời gọi hàm ở xa có tham số là
Trang 19đối tượng thì đối tượng được đóng gói chuyển đến máy chủ Tại máy chủ đối tượngđược tháo gói để sử dụng như ban đầu Quá trình đóng gói đối tượng chuyển đi
được thực hiện nhờ lớp trung gian _stub; ngược lại, quá trình phục hồi đối tượng trên máy chủ được thực hiện nhờ lớp _skel Trong lập trình phân tán gọi qui trình
chuyển tham số là mashaling data
Tương tự lớp serializable, lớp giao tiếp Remote cũng dùng để đánh dấu khảnăng đối tượng được dùng làm tham số truyền trên mạng nhưng theo tham chiếu.Khi chuyển theo tham chiếu đối tượng không được đóng gói chuyển trực tiếp trênmạng mà chỉ truyền tham chiếu của nó cho trình chủ Như thế, tăng tốc độ thực thicủa chương trình, nâng cao xác suất thành công của việc gọi phương thức vì đốitượng được xử lý trực tiếp tại máy khách
3.4.2 Chuyển đối tượng theo tham chiếu và kỹ thuật callback.
Khi một đối tượng truyền theo tham chiếu thì thực sự bản thân đối tượngkhông chuyển đi mà chỉ truyền tham chiếu của nó tới trình chủ Việc xử lí đối tượngnày thực hiện ngay trên máy khách Do đó, phải có sự triệu gọi qua lại giữa trìnhkhách và trình chủ Từ vấn đề này nảy sinh kỹ thuật “gọi ngược” là callback rất hữudụng trong một số trường hợp khắc phục nhược điểm của vấn đề tryuền tham số quamạng Với kỹ thuật Callback trình chủ cũng có thể gọi ngược từ xa đến trình khách.Đây là một kỹ thuật tương đối khó mô tả nên để trình bày có hiệu quả ta tiếnhành xây dựng mô phỏng một ứng dụng đơn giản dựa trên kỹ thuật này
Chúng ta sẽ tạo ra hai đối tượng trên máy khách và máy chủ có thể triệu gọilẫn nhau Đầu tiên trình khách liên hệ bộ đăng ký rmiregistry để tham chiếu đến đốitượng trên máy chủ, tiếp đó trình khách tạo ra một đối tượng của máy khách đồngthời gọi phương thức của đối tượng chủ để đăng ký đối tượng khách đó với đốitượng chủ Bằng cách này, trình chủ không cần dùng hàm Naming.lookup() để truytìm đối tượng khách trên rmiregistry nữa mà có thể triệu gọi phương thức của đốitượng khách Ứng dụng được mô tả như sau:
1 Giao tiếp interface cho đối tượng trên máy khách AtClient
public interface AtClient extends Remote {
//phương thức thực thi trên máy khách
public type clientMethod(args)throws RemoteException;
}
2 Giao tiếp interface cho dối tượng trên máy chủ AtServer
public interface AtServer extends Remote {
// hàm này để đăng ký đối tượng khách với trình chủ
public void registerClient(AtClient c)throws RemoteException;
Trang 20//phương thức thực thi trên máy chủ
public type callServerMethod(args)throws RemoteException;
}
3 Lớp cài đặt trên máy khách
public class AtClientimpl implements AtClient {
public type callClientMethod(args)throws RemoteException{ }
}
4 Lớp cài đặt trên máy chủ
public class AtServerimpl implements AtServer {
AtClient client;// để đăng ký với trình chủ
public void registerClient(AtClient c)throws RemoteException{
5 Chương trình triệu gọi trên máy khách
public class Client {
public static void main(String args[]) throws Exception{
AtClient client=new AtClientimpl();
6 Chương trình đăng ký đối tượng chủ với rmiregistry
public class Setup {
public static void main(String args[]) throws Exception{
AtServer server=new AtServerimpl();
H8 Hoạt động của hệ thống callback.
1 Đối tượng chủ đăng lý với rmiregistry
2 Đối tượng khách truy tìm đối tượng chủ
3 rmiregistry trả về tham chiếu đến đối tượng chủ
4 Đối tượng khách đăng ký với đối tượng chủ
Client clientObject
Server serverObject
Trang 213.5 Các kỹ thuật gọi đối tượng ở xa trong JavaRMI.
Trong các phần trước đã trình bày cách thức xây dựng, thực hiện một ứngdụng JavaRMI Tuy nhiên đó chỉ là những kỹ thuật hết sức cơ bản, còn không ítnhững hạn chế trong việc triển khai các ứng dụng Nhất là yêu cầu về tính đồng nhấtcủa dịch vụ, tính độc lập giữa bên cung cấp và bên sử dụng dịch vụ…Sau đây sẽtrình bày một số kỹ thuật rất tiện ích của JavaRMI trong việc xây dựng các dịch vụphân tán
3.5.1 Gọi bằng phương thức động, với kĩ thuật phản chiếu.
Trong nguyên lý cơ bản của JavaRMI để trình khách gọi được các phươngthức của đối tượng chủ thì ít nhất phải được cung cấp lớp giao tiếp interface của đốitượng Trình khách sẽ giựa vào giao tiếp này để chuyển kiểu khi lấy về được thamchiếu đối tượng chủ bằng hàm Naming.lookup(); Tuy nhiên nếu phía khách không
có lớp giao tiếp này thì sao? Nghĩa là, bằng cách nào đó lấy về tham chiếu và khôngcần lớp giao tiếp để chuyển kiểu Trong trường hợp này có thể sử dụng kỹ thuậtphản chiếu (reflect) của Java để thực hiện triệu gọi
Trước tiên lấy tham chiếu về ở dạng đối tượng tổng quát Sau đó dùng hàmgetMethod() để lấy về các phương thức của đối tượng đang có Cuối cùng dùng hàminvoke() để thực thi các phương thức bên trong đối tượng
Các phương thức cơ bản trong kỹ thuật này như sau:
+Tham chiếu đến đối tượng chủ ở dạng tổng quát
Object object=Naming.lookup(“rmi://hostname:port/registryName”);
+Truy tìm xuất xứ của đối tương
Class class=object.getClass(); hàm này trả về lớp của đối tượng
+Lấy về các phương thức của lớp
Method method=class.getMethod(“methodName”,parameterType);
Phương thức này trả về một đối tượng của lớp Method, là một phương thức cótên là methodName và các kiểu tham số được chỉ ra trong parameterType
+Gọi phương thức từ xa
Thông qua đối tượng phương thức mà ta đã truy tìm ra trước đó
method.invoke(object, arguments); phương thức này thực thi phương thứcđược miêu tả trong đối tượng method, với đối tượng object và danh sách các tham
số truyền vào phương thức là arguments
Trang 223.5.2 Cơ chế tự kích hoạt với rmid.exe.
Qui trình mà ta thực hiện để cài đặt một đối tượng JavaRMI là: Khởi động bộđăng ký rmiregistry, tạo đối tượng, đăng ký đối tượng và lắng nghe triệu gọi từ máy khách Nghĩa là các đối tượng đã cài đặt thì luôn ở trạng thái sẵn sàng Giả sử
có rất nhiều đối tượng cần phục vụ thì sẽ cấp phát bộ nhớ cho tất cả các đối tượngnày, điều này gây hao tốn tài nguyên, giảm tốc độ tính toán Vì không phải tất cảcác đối tượng đều được triệu gọi một lúc Tuy nhiên Java cung cấp cơ chế tự độngkích hoạt(activation) đối tượng trên máy chủ chỉ khi nào có yêu cầu từ máy kháchthì mới được kích hoạt để sử dụng Java cung cấp chương trình rmid.exe chịu tráchnhiệm tiếp nhận sự hiện diện của đối tượng và tự động khởi tao đối tượng khi cóyêu cầu Quá trình xây dựng ứng dụng theo cơ chế này khá phức tap và khác biệt sovới các cơ chế khác Cơ chế này có một số vấn đề trong cài đặt :
Trong cài đặt đối tượng chủ, đối tượng phải là lớp thừa kế lớp Activatable vìtất cả các lớp hỗ trợ cho kĩ thuật tự kích hoạt đều nằm trong gói thư việnJava.rmi.activation.*;
public class objectimplement extends Activable implements interfaceName
Phương thức khởi dựng của đối tượng chủ dùng kích hoạt đối tượng Khi dịch
vụ rmid kích hoạt đối tượng nó sẽ gọi phương thức Activationinstance.newinstance
và gián tiếp gọi đến phương thức khởi dựng
public objectimplement(ActivationiD id,arshalledObject data)
throws RemoteException{
Super(id,0);
}
Phương thức này nhận hai đối số, định danh kích hoạt(ActivationiD) do dịch
vụ rmid truyền vào, và data có kiểu đối tượng là MarshalledObject là đối tượng tổngquát có thể truyền qua mạng
Ta phải chuyển những thông tin này cho lớp cha bằng cách gọi hàmsuper(id,0); Lớp cha sẽ thông báo và đăng ký sự hiện diện của đối tượng với dịch vụrmid và máy ảo Java Các bước chính đăng kí đối tượng :
Đầu tiên tạo bảng thuộc tính chứa các giá trị cần thiết lập cho chính sách bảomật:
Properties prop=new Properties();
chỉ định tập tin bảo mật: prop.put(“Java.security.policy”,path);
Tạo môi trường chứa các đối tượng kích hoạt:
ActivationGroupDesc.CommandEnvironment ace=null;
Tạo thông tin về nhóm đối tượng kích hoạt:
Trang 23ActivationGroupDesc exampleGroup= new ActivationGroupDesc(prop,ace);
Dựa vào thông tin của nhóm, ta yêu cầu hệ thống cung cấp một định danh kíchhoạt cho nhóm
ActivationGroupiD agi= ActivationGroupiD.getSystem().registerGroup(
ActivationDesc desc=new ActivationDesc(“implementName”,location,data);
Cuối cùng đăng ký đối tượng với dịch vụ kích hoạt rmid:
3.5.3 Trình mồi nạp ứng dụng từ xa với bộ nạp lớp JavaRMI.
Trong hệ thống mạng cho phép kết nối và điều khiển từ xa Java cung cấp một
kỹ thuật rất tiện ích, cho phép viết một ứng dụng hoàn chỉnh đặt toàn bộ ứng dụngtrên server sau đó có thể triệu gọi thực thi ứng dụng từ một máy client khác Trênmáy client hoàn toàn không cài đặt gì hết về ứng dụng đó
Thực hiện được kỹ thuật này chính là nhờ cơ chế JavaRMI của Java TrongJava bộ nạp lớp RMIClassLoader cho phép máy khách nạp các lớp về từ máy chủthông qua giao thức http RMIClassLoader chịu trách nhiệm tải về tất cả các lớpcon, các thư viện mà lớp nạp về cần đến Nên ta chỉ quan tâm tới mỗi một lớp cầntải về, không cần để ý tới các lớp liên quan khác
Một số vấn đề kỹ thuật cần chú ý:
1 Để một lớp có thể được tải về và chạy trên một máy khác lớp đó phảiđược cài đặt giao tiếp Runnable
Trang 242 Chính giao tiếp Runnable cho phép thực thi chương trình khi gọiphương thức run() của giao tiếp này JavaRMI chỉ có trách nhiệm tải
về các lớp còn việc gọi thực hiện các lớp là do giao tiếp Runnablequyết định
Cài đặt lớp tải về như sau:
public lass ClassName implements Runnable{
public void run(){
cài đặt tất cả các công việc tại đây;
}
}
Phương thức run() là bắt buộc phải có, ta có thể đặt tất cả mã lệnh cần thực thitrong phương thức này, để khởi động lớp ta gọi phương thức run của nó
Như vậy, toàn bộ ứng dụng được đặt trên một máy và không nhằm mục đích
là thi hành ứng dụng ngay trên máy đó, cho nên cần phải có một chương trình nào
đó chịu trách nhiệm tải ứng dụng về từ máy ở xa và kích hoạt ứng dụng đó, và đâycũng chính là một phần chính của kỹ thuật này Xây dựng chương trình này để chạytrên máy khách Chương trình này gọi là trình mồi nạp ứng dụng từ xa
Trong chương trình ở phía máy khách ta không cần bất cứ lớp nào của ứngdụng cần gọi, tất cả ở trên webserver Do đó điều cần nhất là địa chỉ URL trỏ tới lớpdịch vụ trên máy chủ, và tên lớp cần tải về thì ta phải cung cấp Các câu lệnh quantrọng phải có như sau:
Lệnh nạp lớp ứng dụng về từ webserver qua giao thức http bằng bộ nạp lớpRMIClassLoader
Class ClassName=RMIClassLoader.loadClass(URL,ClassName);
URL là chuỗi chỉ định đường dẫn tới webserver, ClassName là tên lớp cần tải
về Khi đã tải được lớp về ta phải tạo một thể hiện cuả lớp đó thông qua giao tiếpRunnable
Runnable RunClass=(Runnable) ClassName.newinstance();
Cuối cùng là chạy lớp ứng dụng ngay trên máy khách
RunCalss.run();
Khi dùng kỹ thuật này để xây dựng ứng dụng cần chú ý:
- Phải có trình webserver chạy trên máy chủ
- Khi xây dựng xong ứng dụng phải biên dịch tất cả các tập tin liên quan ra fileclass sau đó đặt hết lên webserver
- Xây dựng chương trình riêng cho máy khách
Trang 25H9:Kỹ thuật trình nạp mồi từ xa.
3.6 Vấn đề bảo mật và kĩ thuật xuyên hầm trong JavaRMI.
Trong cơ chế kết nối theo giao thức TCP/IP bằng socket, có dùng đến kháiniệm cổng Mỗi trình chủ phải hoạt động trên một cổng để lắng nghe yêu cầu từmáy khách
Khi dịch vụ hoạt động trên mạng cục bộ, điều này không có vấn đề gì vì có thể
tự do chỉ định số cổng cho socket(tất nhiên là không trùng các cổng nổi tiếng đãcó) Tuy nhiên ở mạng diện rộng internet luôn bị kiểm soát chặt chẽ các dịch vụ bỡitường lửa(firewal) Firewal là chương trình kiểm soát cách thức truyền dữ liệu vàkết nối mạng cục bộ với mạng internet, nhằm hạn chế sự truy cập từ mạng cục bộ rainternet
Vấn đề phát sinh là việc sử dụng cổng kết nối, khi các ứng dụng triển khai ramạng internet Hầu hết các firewal rất hạn chế số cổng cho phép kết nối Cổng 80kết nối theo giao thức http cho phép kết nối webserver được hầu hết các firewal chophép sử dụng Như vậy nếu các ứng dụng theo mô hình khách chủ triển khai trênmạng sử dụng cổng kết nối khác cổng 80 thì bị ngăn chặn bỡi tường lửa TrongJavaRMI sử dụng cổng mặc định 1099 để kết nối thì khi ứng dụng được triển khai
ra mạng internet sẽ dễ bị ngăn cấm bỡi tường lửa và không hoạt động được trêninternet
ClientService http
Client RMIclient
Server RMIserver Firewal
1099
80
Trang 26Như vậy ta phải làm việc với webserver, ý tưởng của kỹ thuật này là lợi dụng tính
ưu tiên của cổng 80 để thưc hiện các kết nối và truyền dữ liệu qua mạng
Trước hết ta làm quen với khái niệm về một dạng chương trình làm việc vớiwebserver rất tiện ích gọi là servlet Servlet là một chương trình Java phía máy chủ,được trình chủ triệu gọi để xử lý các thông tin trên máy chủ trước khi trả kết quả vềcho máy khách Chính serverlet giúp khắc phục vấn đề firewal trong JavaRMI.Nguyên lý của tunnel là từ trình JavaRMI ở phía client có thể gởi yêu cầu đếnmáy chủ thông qua giao thức http qua cổng 80 Ở máy chủ thiết kế một servlet cókhả năng triệu gọi phương thức của đối tượng JavaRMI ở phía server Khi trình chủwebserver nhận yêu cầu từ máy khách, trình chủ sẽ gọi servlet để xử lý yêu cầu Sau đó trình chủ nhận kết quả thực thi JavaRMI phía server từ servlet và trả về chomáy khách thông qua http
H11.Cơ chế xuyên hầm.
Kết luận: Phần trên đã trình bày các lý thuyết cơ bản về công nghệ JavaRMI.Các kỹ thuật chính để xây dựng ứng dụng phân tán với JavaRMI, ứng với mỗi ứngdụng cụ thể mà chọn một kỹ thuật tốt nhất để áp dụng Tuy nhiên mỗi kỹ thuật đều
có những ưu khuyết điểm riêng của nó, do đó để xây dựng tốt các ứng dụng và pháthuy tối đa tính ưu việt của công nghệ thì kỹ thuật tốt nhất là “kỹ thuật tổng hợp”-trong một đề án phải biết kết hợp hợp lý các kỹ thuật vào trong các module của
đề án Mỗi module cần so sánh ưu nhược khi dùng các kỹ thuật khác nhau, để chọn
kỹ thuật tốt nhất
Trong phần tiếp theo của đồ án, tiến hành phân tích, xây dựng chương trìnhtheo yêu cầu của đề tài đặt ra, dựa trên “kỹ thuật tổng hợp” của công nghệJavaRMI
Client RMIclient
Server Webserver
RMIserver
Firewal
80 http
http
servlet
intranet internet
Trang 27Chương 3 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
1 PHÂN TÍCH HỆ THỐNG THÔNG TIN.
Phần này thực hiện phân tích, mô hình hóa hệ thống nhằm cung cấp một môhình trừu tượng về hệ thống Qua đó đặt những nền tảng cho quá trình xây dựngchương trình về sau Sau đây là các mô hình được xây dựng dựa trên ngôn ngữchuẩn UML
H12 Biểu đồ trường hợp sử dụng (UC) của hệ thồng
Biểu đồ UC cho thấy các trường hợp hành động của hệ thống thực hiện nhằmđáp ứng các tác động của tác nhân bên ngoài Trong trường hợp này người sử dụngtác động vào hệ thống thực hiện ba công việc là:
- Sử dụng các dịch vụ trên hệ thống
- Thêm dịch vụ hoặc các máy chức năng agent
- Sửa đổi thông tin về các Agent hoặc dịch vụ
Trang 28H13.Biểu đồ trình tự của UC sử dụng dịch vụ.
Biểu đồ trình tự mô tả tương tác giữa người sử dụng và các phần của hệ thốngtrong một trường hợp sử dụng nào đó Biểu đồ trình tự tập trung miêu tả trật tự cácthông điệp theo thời gian
Biểu đồ trên miêu tả các thông điệp trong UC sử dụng dịch vụ Khi người sửdụng muốn dùng dịch vụ phải thực hiện trình tự các bước sau:
1 Khởi động hệ thống
2 Agent login server
3 Server kiểm tra thông tin
4 Cài đặt các dịch vụ tương ứng với Agent đăng nhập
5 Gởi hồi đáp
6 Agent lấy về danh sách dịch vụ tương ứng
7 Agent tải các lớp của dịch vụ về từ Webserver
8 Agent cài đặt các dịch vụ
9 Client kết nối Server lấy về danh sách các dịch vụ hiện hành trên server
10 Người sử dụng chọn dịch vụ, client tải giao diện dịch vụ tương ứng
11 Client gởi yêu cầu của người sử dụng đến server
12 Server phân phối công việc cho Agent
13 Agent thực hiện công việc
14 Agent gởi kết quả về Server
15 Server trả kết quả về client
Trang 29H14.Biểu đồ cộng tác của UC sử dụng dịch vụ.
Biểu đồ cộng tác của UC sử dụng dịch vụ, nó miêu tả tổ chức cấu trúc của cácđối tượng gởi nhận thông điệp, trình tự và chức năng của các thông điệp giữa cácđối tượng được mô tả trong biểu đồ trên
H15.Biểu đồ lớp
Trang 30H16.Biểu đồ hoạt động (Sơ đồ khối của UC sử dụng dịch vụ).
Server Database+Service
Server Database+Service Webserver+Rmiregistry
Trang 31H18.Biểu đồ triển khai của hệ thống.
Biểu đồ triển khai cho thấy kiến trúc hệ thống của phần cứng như các bộ xử lý,các thiết bị và các thành phần phần mềm thực hiện trên hệ thống Biểu đồ triển khaichỉ ra toàn bộ các thành phần, kết nối giữa chúng và các tiến trình chạy trên chúng.Biểu đồ trên miêu tả hệ thống triển khai trên ba nút là server, client và agent Trên server chứa các dịch vụ, cơ sở dữ liệu, trình webserveer và bộ đăng kýrmiregistry Trên client và agent chứa hai module chương trình tương ứng vớIchúng trong hệ thống Client giao tiếp với server thông qua hai giao tiếp http vàRMI Tương tự, agent giao tiếp với server bằng ba giao thức http, TCP/IP và RMI
2 THIẾT KẾ VÀ TỔ CHỨC CƠ SỞ DỮ LIỆU
Như đã thấy trong các phần trước, cơ sở dữ liệu của hệ thống đặt toàn bộ trênmáy server, bao gồm hai phần chính: Dữ liệu về các lớp của dịch vụ và dữ liệu vềthông tin quản lý các dịch vụ và các máy trạm chức năng
Mỗi dịch vụ ứng với một thư mục trên webserver, có tên trùng với tên dịch vụ, trong thư mục này đặt các file class biên dịch từ các lớp của dịch vụ Dữliệu một dịch vụ bao gồm các file sau:
- Atagentinterface , giao tiếp phía agent
- Atrootserverinterface, giao tiếp phía server
- Atagentimplement, lớp thi hành ở agent
- Atrootserverimplement, lớp thi hành ở server
- AtagentSetup, đăng ký dịch vụ phía agent
- Atrootserver Setup, đăng ký dịch vụ phía server
- MethodDescrIPtor, miêu tả phương thức
- GUI, giao diện người dùng của dịch vụ