1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thử nghiệm và đánh giá hiệu năng một số phương pháp truy nhập cơ sở dữ liệu WEB

128 825 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 128
Dung lượng 2,04 MB

Nội dung

Các phương pháp truy nhập cơ sở dữ liệu Web dựa trên ngôn ngữ lập trình Java như Java socket, servlet, RMI và Java CORBA [21] đều hoạt động theo mô hình truyền thông báo và kiến trúc cli

Trang 1

MỤC LỤC

LỜI CẢM ƠN 1

MỤC LỤC 2

TÓM TẮT NỘI DUNG Error! Bookmark not defined MỞ ĐẦU 4

Chương 1 : Lập trình phân tán truyền thống bằng Java 15

1.1 Sơ lược về ngôn ngữ Java 15

1.2 Khái niệm lập trình phân tán 17

1.3 Các phương pháp lập trình phân tán phi thủ tục 18

1.3.1 Phương pháp lập trình socket trong Java 18

1.3.2 Phương pháp lập trình servlet 25

1.4 Các phương pháp lập trình phân tán hướng thủ tục 32

1.4.1 Lập trình RMI 32

1.4.2 Lập trình CORBA trong Java 38

1.5 Kết luận 48

Chương 2 : Tác tử di động 49

2.1 Tổng quan về tác tử di động 49

2.2 Các khái niệm cơ bản về tác tử di động 50

2.2.1 Tác tử và môi trường 50

2.2.2 Khởi tạo và hủy bỏ tác tử 51

2.2.3 Di chuyển tác tử 52

2.2.4 Giao tiếp giữa các tác tử 54

2.3 Lập trình tác tử di động Java với Aglets 55

2.3.1 Tác tử di động với Java 55

2.3.2 Kiến trúc Aglet 57

2.4 Lập trình tác tử di động Java với JADE 61

2.4.1 Giới thiệu sơ lược về JADE 61

2.4.2 Tạo tác tử 63

2.4.3 Xử lý sự kiện 67

2.4.4 Truyền thông tác tử 70

2.4.5 Di chuyển tác tử 72

2.5 So sánh giữa Aglets và JADE 79

2.6 Kết luận 80

Chương 3 : Các phương pháp truy nhập cơ sở dữ liệu Web 82

3.1 Sơ lược về truy nhập cơ sở dữ liệu Web 82

3.2 Các phương pháp truy nhập cơ sở dữ liệu Web truyền thống 84

3.2.1 Phương pháp Java Socket 84

3.2.2 Phương pháp servlet 85

3.2.3 Phương pháp RMI 87

3.2.4 Phương pháp Java CORBA 88

3.3 Phương pháp sử dụng tác tử di động 91

3.3.1 Sử dụng một tác tử di động truy nhập một cơ sở dữ liệu Web 91

3.3.2 Sử dụng một tác tử di động truy nhập nhiều cơ sở dữ liệu Web 93

3.3.3 Sử dụng hai tác tử di động truy nhập nhiều cơ sở dữ liệu Web 94

3.4 Kết luận 96

Chương 4 : Thử nghiệm và đánh giá hiệu năng 98

4.1 Tiêu chí, môi trường và phương pháp đánh giá 98

Trang 2

4.2 Thực hiện đánh giá 98

4.2.1 Thao tác với kích cỡ dữ liệu nhỏ 98

4.2.2 Thao tác với kích cỡ dữ liệu lớn 100

4.3 So sánh phương pháp sử dụng một tác tử và nhiều tác tử di động truy nhập nhiều cơ sở dữ liệu Web 104

4.4 Kết luận 106

KẾT LUẬN 107

1 Kết quả luận văn đã đạt được 107

2 Phương hướng tiếp theo 108

Tài liệu tham khảo 109

Phụ lục 1 : Các cổng giao tiếp 111

Phụ lục 2 : Một số giao diện chính của chương trình 112

Phụ lục 3 : Một số đoạn mã nguồn chương trình 120

Trang 3

MỞ ĐẦU

Công nghệ Web đã mang lại cho xã hội nhiều lợi ích to lớn trên nhiều lĩnh vực ngay từ khi nó ra đời, trong đó phải kể đến sự cung cấp thông tin của những trang Web trên mạng, thông qua các trang Web người ta tìm kiếm được các thông tin mong muốn một cách thuận lợi, nhanh chóng, chính xác mà không phải lo lắng đến các trở ngại về khoảng cách không gian và thời gian

Trong thời đại bùng nổ thông tin hiện nay thì các trang Web tĩnh không còn đáp ứng được nhu cầu cập nhật thông tin ngày càng cao của con người, vì vậy chúng đã dần được thay thế bởi các trang Web động Sự hoạt động của các trang Web động thường được kết hợp với một cơ sở dữ liệu mà ta thường gọi là cơ sở dữ liệu Web

Các phương pháp truy nhập cơ sở dữ liệu Web dựa trên ngôn ngữ lập trình Java như Java socket, servlet, RMI và Java CORBA [21] đều hoạt động theo mô hình truyền thông báo và kiến trúc clients/server, chúng có nhược điểm chung phải duy trì kết nối giữa máy client và máy server trong quá trình truy nhập cơ sở dữ liệu, dẫn đến chiếm dụng đường truyền và làm lãng phí băng thông

Những năm gần đây, một công nghệ mới đã ra đời và có những bước phát triển mạnh mẽ, đó là công nghệ tác tử Riêng tác tử di động trong nhiều trường hợp

đã chứng tỏ là giải pháp cực kỳ hữu hiệu cho các vấn đề xử lý phân tán Một trong các vấn đề về xử lý phân tán được đề cập và giải quyết trong luận văn này là sử dụng tác tử di động để truy nhập nhiều cơ sở dữ liệu Web

Tác tử di động là những chương trình có khả năng tự di chuyển cùng với mã lệnh, dữ liệu và trạng thái hiện thời từ một nơi này đến một nơi khác trên mạng, khi

di chuyển tới đích tác tử di động được khôi phục và hoạt động trở lại Tác tử di động không cần duy trì thường xuyên kết nối giữa nó và máy đã gửi tác tử di động

Trang 4

đi, do đó tiết kiệm băng thông mạng một cách đáng kể (nhất là đối với các mạng tốc

độ thấp và đắt tiền như mạng không dây)

Công nghệ tác tử di động đã được áp dụng và giải quyết tốt nhiều vấn đề thuộc nhiều lĩnh vực khác nhau:

Tác tử di động trong tìm kiếm thông tin trực tuyến [4]: Tác tử di động giúp

cho việc tìm kiếm tài liệu trực tuyến được thực hiện từ một máy tính không có quyền truy nhập để tìm kiếm tài liệu một cách trực tiếp, phải thông qua một máy tính trung gian nhưng không cần có sự can thiệp của dùng trên máy tính trung gian

Tác tử di động trong truy nhập cơ sở dữ liệu từ trình duyệt Web [21]:

Phương pháp truy nhập cơ sở dữ liệu từ trình duyệt Web giúp đơn giản hóa thao tác

sử dụng cho người dùng, mọi thao tác cài đặt phức tạp được thực hiện tại phía server và trong suốt đối với người dùng Người dùng chỉ cần biết địa chỉ của trang chủ Web và truy nhập vào, một tiểu dụng Java đặc biệt được tải từ máy server về máy client, sau đó tiểu dụng được người dùng kích hoạt để tạo ra tác tử di động, tác

tử di động được gửi đến nơi có dữ liệu để lấy dữ liệu mang về Việc sử dụng tác tử

di động sẽ mang lại một số lợi ích:

- Tiết kiệm tài nguyên bộ xử lý

- Tiết kiệm không gian do tác tử di động chỉ hoạt động tại một nơi trong mỗi thời điểm nhất định

- Giảm được lưu lượng trên mạng do các đoạn mã của tác tử thường nhỏ hơn rất nhiều so với khối lượng dữ liệu mà nó xử lý

Tác tử di động trong xử lý phân tán [5]: Các tài nguyên trong mạng máy tính

trong đó có dữ liệu được lưu trữ trên nhiều máy khác nhau Việc xử lý dữ liệu cục

bộ tại một máy có thể không thực hiện được bởi vì chương trình xử lý và dữ liệu cần xử lý không thuộc cùng một máy Một phương pháp xử lý mới được đề xuất là

xử lý phân tán Có nhiều phương pháp xử lý phân tán truyền thống như:

Trang 5

- Mã lệnh có thể tham chiếu : Một tiến trình đang hoạt động trên máy này

gửi thông báo đến một máy khác kích hoạt việc thực hiện một mã lệnh nào đó nằm sẵn trên máy đó Các mô hình truyền thông báo, gọi thủ tục từ xa và gọi phương thức từ xa đều thực hiện theo cơ chế này

- Mã lệnh có thể dịch chuyển : Một tiến trình đang hoạt động trên máy nguồn

gửi thông báo đến máy đích để máy đích thực hiện một mã lệnh nào đó do máy nguồn chuyển tới

- Mã lệnh theo yêu cầu : Một tiến trình đang chạy trên máy A gửi một thông

báo đến máy B yêu cầu lấy về để thực hiện trên máy A một mã lệnh nào đó nằm trên máy B

- Mã lệnh di động : Một tiến trình đang hoạt động trên máy nguồn di chuyển

đến máy đích và tiếp tục thực hiện ở đó

Tác tử di động có cái gì đó giống với mã lệnh di động nhưng các khái niệm này không hoàn toàn đồng nhất với nhau Mã lệnh di động là một cơ chế thực hiện phân tán, còn thuật ngữ tác tử di động lại dùng để chỉ các tác tử hoạt động theo chính cơ chế này Tác tử di động là những chương trình không bị ràng buộc với nơi chúng bắt đầu thực hiện Chúng có thể di chuyển từ nơi này sang nơi khác trên mạng Tính di động cho phép chúng đến được những nơi thích hợp nhất cho việc thực hiện nhiệm vụ Tác tử có thể được xem như là đối tượng chứa dữ liệu và mã lệnh, đồng thời có mục đích và tính chủ động nhất định trong hoạt động

Tác tử di động trong quản trị mạng Internet [2]: Với tốc độ phát triển như vũ

bão của mạng Internet, hệ thống quản lý mạng trở nên rất phức tạp Các sự cố trên mạng luôn luôn có nguy cơ xảy ra: việc tràn dữ liệu trên mạng đòi hỏi người quản

lý giám sát cần đưa ra giải pháp xử lý hữu hiệu Lỗi cần phải được chẩn đoán một cách nhanh chóng, chính xác và được tự động sửa hoặc thông báo đến người điều hành và đưa ra một số khuyến nghị về cách giải quyết Trong mạng Internet, người điều hành mạng thường phải làm việc từ xa với rất nhiều thiết bị (thường là ngồi ở trạm điều hành), để có thể nắm bắt được tính đa dạng của các thành phần mạng thì

Trang 6

các ứng dụng quản lý cần làm việc với nhiều giao diện hoặc các công cụ Các hệ thống quản lý mạng Internet thường là rất lớn và rất khó để duy trì hoạt động, sau

đây trình bầy một số lĩnh vực trong quản lý mạng Internet sử dụng tác tử di động:

- Quản lý lỗi

Phân tích chuẩn đoán hiện trạng mạng Các phương thức được sử dụng để mô

hình hoá mạng đều có thể được sử dụng để phân tích chẩn đoán lỗi trong mạng Việc phát hiện các lỗi cũng là một quá trình xây dựng một mô hình đặc biệt của mạng Nếu các ràng buộc cho sự tìm kiếm phát hiện mô tả các xung đột được coi là bình thường của các thành phần mạng, thì các tác tử kiểm tra các ràng buộc đó rồi mới thực hiện chức nǎng phát hiện lỗi Deglet có thể được sử dụng để phản ứng lại kết quả phát hiện hoặc đưa ra các vấn đề nghi vấn Chúng cố gắng thu thập thêm các thông tin, thực hiện các bài kiểm tra mở rộng hoặc thi hành các tác vụ khôi phục

Các ràng buộc không hạn chế cho một thiết bị mạng đơn lẻ nào Chúng có thể

mã hoá các thuật toán phức tạp với chức nǎng tìm kiếm phát hiện lỗi, và chỉ có giới hạn về kích cỡ của netlet là liên quan trực tiếp đến khả nǎng di chuyển và khả thông của mạng Vấn đề đó có thể được giảm thiểu bằng cách tận dụng các ưu điểm của Java, các kĩ thuật nén mã, và các phương thức thông minh Các cơ sở về lý thuyết

hỗ trợ kĩ thuật cho hoạt động tác tử di động cũng đang được các tổ chức quan tâm xúc tiến nghiên cứu

Với sự phân bố tác tử, chúng ta có một "xã hội" các tác tử có mối quan hệ với nhau mà nhu cầu cần thiết là phối hợp để phân chia mức độ thông minh cần thiết cho việc phân tích và phát hiện lỗi trong mạng Một số lượng nhất định các loại tác

tử tí hon được đưa vào mạng, mỗi một loại có thể nghiên cứu giải quyết một vấn đề nào đó, và được giải quyết bằng cách tǎng cường giả thuyết theo sự quan sát của một số lượng lớn các tác tử cùng loại Như vậy để có giải pháp giải quyết vấn đề trong mạng cần kết hợp các giả thuyết được đưa ra bởi mỗi loại tác tử

Cả hai loại tác tử netlet và deglet cùng tuân theo một cách bảo mật cung cấp

Trang 7

trước nào đó có thể được cho phép thực hiện các hoạt động trên các thiết bị mạng Mỗi một netlet "tích cực" có thể được sử dụng để giải quyết một vấn đề nào đó một cách tự động theo cách khôi phục ngay tức thì khi có thể Người quản lí mạng sẽ được thông báo về sự kiện xảy ra hoặc được cảnh báo nếu như sự khôi phục tự động của tác tử không thực hiện được hoặc yêu cầu sự trợ giúp từ phía người điều hành Mức độ kĩ thuật của mạng sẽ giảm được phần nào các lỗi xuất hiện trên mạng Trong khi với các deglet, mà các tác vụ được uỷ quyền khi cần thiết thông qua sự giao tiếp của tác tử với thực thể uỷ quyền thì với netlet, chúng có thể được gán cho các tác vụ dựa theo quyền ưu tiên do người thiết kế tự đặt hoặc được khởi động tự động như là một phần trong mạng, kết cấu tổ chức và mật độ các netlet được điều khiển bởi các kĩ thuật bảo mật nào đó (ví dụ, tần suất di chuyển đến các nút mạng

có thể được đo và sử dụng để tái tạo hoặc kết thúc các netlet)

Sự bảo dướng duy trì từ xa với các thành phần mạng hỗn hợp Các tác tử di

động cần phải tương tác với các nút mạng thông qua một giao diện mà tại đó cung cấp đầy đủ các phương tiện: bảo mật, truy nhập gián tiếp đến tài nguyên của nút mạng và một số dịch vụ đi kèm khác Giao diện này được gọi là thành phần quản lý

ảo (VMC-Virtual Managed Component): được thiết kế bởi nhà cung cấp thiết bị

Nó có thể nằm ngay trong thiết bị hoặc trên proxy trong trường hợp thiết bị không

có khả nǎng chấp nhận tác tử di động Trong thực tế, nhà cung cấp thiết bị mạng thường trang bị một phương tiên cho VMC là khả nǎng tải được các dữ liệu về trình điều khiển thiết bị (driver), và điều này làm cho việc quản lý các thiết bị được dễ dàng hơn Khi thiết bị được nối mạng, nó sẽ biết được các phương tiện có sẵn được quảng bá trong mạng Ví dụ, một tác tử làm nhiệm vụ tìm kiếm có thể sẽ yêu cầu một danh sách các thiết bị được hỗ trợ trong mạng, người sử dụng dựa vào danh sách các thiết bị này để kiểm tra một thiết bị cụ thể, nếu như thiết bị có trong danh sách thì nó được cài đặt ngay trạm Nó có thể thi hành trên trình duyệt Web hoặc như một chương trình độc lập Applet cung cấp dữ liệu và các chức nǎng thành phần mà nhà cung cấp đã trang bị phù hợp với thiết bị: có thể đơn giản chỉ là danh sách thiết bị đơn giản hoặc đồ hoạ của thiết bị phần cứng hoặc các dịch vụ

Trang 8

Nếu thiết bị không cung cấp một applet đại diện, thì người điều hành phải điều khiển thiết bị hoặc một thiết bị chung nhất (thường gọi là mặc định) được sử dung thay thế Đây cũng là giải pháp mà hiện nay các hệ thống quản lý mạng đang áp dụng trong các tác tử Một thiết bị không chỉ có phần đại diện được thực thi mà chúng còn phải thực thi một giao thức truyền thông chẳng hạn như SNMP với người quản lí, để có thể nhận được hoặc truyền đi các thông số về thiết bị Chính điều này một lần nữa đã góp phần làm cho việc quản lí mạng càng thêm lớn, phức tạp và bất tiện hơn Chúng ta có thể kết luận giải pháp các applet có thể tải về được không bị những ràng buộc trên

Một khía cạnh hấp dẫn nữa cho xu hướng trên được cung cấp bởi các kho chứa các applet trên máy chủ, ví dụ như máy chủ của nhà cung cấp thiết bị Và giao diện VMC được đóng gói cùng thiết bị sẽ chứa một con trỏ trỏ đến applet trên máy chủ Một điều hiển nhiên là nhà cung cấp có thể duy trì kho chứa applet, cập nhật và làm cho nó thuận tiện hơn, ví dụ bằng cách sử dụng các phần mềm Đó cũng là một trong những xu hướng hiện nay với các thiết bị plug-n-play

Một ví dụ khác sử dụng tác tử di động để duy trì bảo dưỡng thiết bị từ xa: cung cấp dịch vụ video theo yêu cầu Cùng với sự phát triển của mạng trong tương lai, mà không phát triển về việc quản lí mạng thì một điều không thể giải quyết được đó là việc phải gửi các nhà kĩ thuật để giải quyết các lỗi về thiết bị, do có nhiều các thiết bị được cài đặt nằm rải rác nhiều vùng địa lý-> gây khó khǎn cho việc quản lí mạng Để giải quyết vấn đề này chúng ta chỉ cần gửi đi các tác tử, nó sẽ thực hiện các bài kiểm tra phù hợp và sẽ cố gắng đưa ra các phương án giải quyết vấn đề nếu có thể, nếu không nó sẽ thông báo để con người can thiệp Với khả nǎng

tự học thì tác tử có thể tự bồi đắp, làm giàu thêm thư viện kiến thức của mình với các tác vụ đã thực hiện

- Quản lí cấu hình

Trang 9

Các dịch vụ Việc cung cấp dịch vụ (tất nhiên ở đây ta không xét khía cạnh

cấp dịch vụ đến người sử dụng) trong mạng viễn thông cũng như mạng Internet hiện nay tương đối phức tạp và liên quan đến nhiều thành phần Công việc này sẽ được giảm nhẹ khi sử dụng các tác tử di động Ví dụ, cung cấp PVC trong mạng ATM (giả sử có mạng IPoATM) Người điều hành sẽ mất rất nhiều thời gian với các khái niệm phức tạp của PVC để có thể thiết lập được kết nối giữa hai tổng đài ATM, đặc biệt là hai tổng đài do hai hãng khác nhau cung cấp Một hệ thống tác tử (hình vẽ [4]) có thể làm nhiệm vụ này một cách tự động: yêu cầu thiết lập PVC được gán cho deglet Các dữ liệu cần thiết được trao đổi giữa các EP (endpoint) deglet lấy thông tin đó qua VMC sử dụng một loại ontology xác định trứơc Deglet khác lại thông tin với người điều hành, các dữ liệu cần thiết được thu gom và hoàn thành kết nối

Các thành phần mạng Cấu hình một thiết bị yêu cầu một số các thuộc tính

trong mạng và ở thiết bị phải được đặt tương tự như các thành phần mềm được cài đặt Ví dụ, một máy in cần có trình điều khiển nằm trên các trạm làm việc để các trạm này sử dụng chúng Hiện nay, người quản lý mạng phải thực hiện tất cả các tác

vụ trên một cách thủ công Với sự phát triển của công nghệ tác tử thì việc sử dụng các tác tử di động sẽ đem lại một viễn cảnh các thành phần mạng được thực thi theo

xu hướng cắm và chạy (plug-n-play)

Bây giờ ta phân tích kĩ hơn ví dụ nêu ở trên, cài đặt máy in trong mạng Tác

vụ này liên quan đến mạng doanh nghiệp gồm một số các trạm làm việc với các yêu cầu khác nhau: các trình điều khiển cần thiết cho máy in sẽ khác nhau giữa các máy tính sử dụng Windows và OS/2, giữa các máy Maccintosh và Unix Bây giờ ta lại giả sử rằng mạng này lại được nối đến Internet Để sử dụng được máy in thì các trạm làm việc cần được cung cấp các trình điều khiển hợp lý Nếu như máy in có đi kèm tất cả các trình điều khiển yêu cầu hoặc hệ điều hành đã chứa các trình điều khiển đó thì công việc cài đặt máy in trên mạng không có gì đáng nói cả, và hoán toàn có thể quản lí được Còn trong trường hợp không có các trình điều khiển máy

in phù hợp, thì toàn bộ quá trình cài đặt sẽ gặp nhiều khó khǎn Sự biến đổi về topo mạng cần được quản lí ngay cả khi các máy in và các trạm làm việc được thêm vào:

Trang 10

các máy in phải được cho cấp phép dịch vụ, các hệ điều hành được cập nhật

Ta có thể mô hình hoá hệ thống quản lí cấu hình sử dụng tác tử như hình Trong đó: Execution Agent: tác tử thực thi Monitoring Agent: tác tử giảm sát chỉ huy.Reasoning Agent: tác tử phân tích suy luận DBMS: hệ thống dữ liệu Trong hình, chúng ta mô tả việc sử dụng các tác tử động và các tác tử tĩnh VMC của thiết bị mới, ở đây là máy in, bao gồm cả tác tử làm nhiệm vụ cung cấp dịch vụ Trên kết nối tới mạng, một số các deglet hoặc netlet được gửi đi để tìm kiếm phát hiện các thiết bị mạng đang cần trình điều khiển máy in, sau đó nó liên hệ với trang Web của nhà cung cấp máy in và phiên bản mới nhất của máy in sẽ được tải về VMC của máy in có thể chứa danh sách các thiết bị sử dụng máy in, vì vậy nó có thể kết hợp để cài đặt các trình điều khiển mới khi cần Máy in sẽ đǎng kí với nhà cung cấp, khi có trình điều khiển mới, nó sẽ được tự động gửi cho tác tử cung cấp dịch vụ cho máy in Cũng giống như các tác tử làm nhiệm vụ phân tích lỗi, việc quản lí cấu hình cũng cần sự kết hợp của nhiều loại tác tử đơn giản

- Quản lí hoạt động mạng

Chúng ta đều biết rằng, các khái niệm về đo kiểm đánh giá chất lượng mạng là rất khó khǎn khi mà sử dụng một máy chủ tập trung Trễ trên mạng là một vấn đề đối với việc đưa ra các quyết định đo kiểm mạng Thay vì dùng các thành phần thǎm dò từ xa, một tác tử di động được gửi đi để thực thi sự phân tích ngay tại thành phần được đo Các thông tin theo cách này sẽ đúng và chính xác hơn, bởi vì chúng không chịu ảnh hưởng của trễ trên mạng Một kết quả tương tự có thể nhận được khi mà tiến trình điều khiển là một phần của thành phần kiểm tra và cũng là một phần tĩnh nằm ngay trong thành phần kiểm tra Song giải pháp với tác tử di động là đáng quan tâm hơn cả, do nó không đòi hỏi một tài nguyên cố định trên trạm cần

đo Và tất nhiên việc quản lí sẽ càng đơn giản, do chúng ta hoàn toàn dễ dàng sử dụng các tác tử tiên tiến nhất mà không mất mấy công sức, trong khi chúng ta sẽ phải rất khó khǎn để cập nhật cho các tác tử tĩnh nằm ngay tại nơi cần đo

Trang 11

Các công nghệ hot-swapping (trao đổi thông tin nóng) cũng có thể dựa trên các đoạn mã di động Các bảng trao đổi đựoc áp dụng để cập nhật cho các tác tử quản lí giám sát mạng tĩnh Nếu các tác tử này là các ứng dụng có thể mở rộng, thì các module chứa các đoạn mã động (extlet) được sử dụng để cập nhật mà không tạm ngưng các dịch vụ mà ứng dụng đang cung cấp Các module di động này không nhất thiết phải nằm ở thành phần cập nhật, mà chỉ tải về khi cần, không giồng như việc sử dụng các applet trong các trình duyệt Web Một lần nữa, tác tử di động lại chứng tỏ ưu điểm: yêu cầu ít tài nguyên hơn, thêm nữa là quá trình xử lí phân tán, cách xử lí thông minh phối hợp từ các nguồn tài nguyên khác nhau trong quá trình

đo kiểm, đánh giá

Một ví dụ cho công nghệ trên, đó là khi server được di chuyển đến môi trường thực thi tốt hơn, việc quyết định di chuyển sẽ yêu cầu một loạt các phân tích thông minh của nhiều nhân tố như: yêu cầu dịch vụ, tải trên mạng, tỉ lệ lỗi, chẳng hạn người điều hành có thể di rời dịch vụ khi nhận thấy tỉ lệ lỗi xuất hiện khi truy nhập dịch vụ của nó là không chấp nhận được Một trường hợp khác, server cung cấp các dịch vụ truyền thông trong một hệ thống phân tán có thể được di chuyển nếu như các yêu cầu dịch vụ tǎng trong một vùng nào đó Trong tất cả các trường hợp đó, server là một tác tử di động không có ràng buộc về kích cỡ, có thể là rất lớn

Tuy nhiên, khi sử dụng tác tử di động trong việc quản lí hoạt động của mạng, chúng ta sẽ gặp phải một số vấn đề Khi sử dụng tràn lan các tác tử di động, mà không được điều khiển, sẽ gây hiện tượng đầy tràn mạng, chiếm một tỉ lệ lớn trong tài nguyên mạng Chính vì thế phần nền cho các tác tử di động hoạt động cần có một số qui tắc ràng buộc về mật độ tác tử

- Mạng plug-n-play

Việc sử dụng tác tử di động mở ra một hướng mới cho một mạng thống nhất: mạng plug-n-play, nó có thể tự động xác định được các thiết bị, các thành phần trong mạng và các yêu cầu của người sử dụng Như chúng ta đã phân tích ở trên, các tác

tử di động hoàn toàn có thể can thiệp vào các quá trình cấu hình thiết bị mạng, cung

Trang 12

cấp dịch vụ Nếu xet một ví dụ thực tế, các applet được sử dụng để lấy các dữ liệu trên mạng về thông tin lưu trữ của thiết bị và của người sử dụng, và khi mạng phát triển hơn (thêm các dịch vụ, các thiết bị), thì mạng có thể phát hiện và thay đổi dữ liệu cấu hình Sử dụng các tác tử di động với tác vụ uỷ quyền: cấu hình và cung cấp dịch vụ, ta hoàn toàn có thể thực hiện được điều này Ngoài ra mạng plug-n-play còn có khả nǎng phát hiện ra lỗi, hoặc các khả nǎng xảy ra ảnh hưởng tới chất lượng dịch vụ hoặc vấn đề bảo mật, nó có thể tự động sửa chữa

Luận văn này cài đặt thêm ba phương pháp ứng dụng tác tử di động truy nhập nhiều cơ sở dữ liệu Web: Sử dụng một tác tử di động truy nhập một sơ sở dữ liệu Web, sử dụng một tác tử di động truy nhập nhiều cơ sở dữ liệu Web và sử dụng nhiều tác tử di đông truy nhập nhiều cơ sở dữ liệu Web

Bố cục của luận văn

Luận văn được trình bầy trong 4 chương Chương 1 giới thiệu sơ lược về ngôn ngữ lập trình Java và khái niệm lập trình phân tán truyền thống bằng Java Trong chương này trình bầy một số đặc trưng tiêu biểu của ngôn ngữ lập trình Java, các phương pháp lập trình phân tán trong Java là lập trình hướng thủ tục và phi thủ tục Chương 2 trình bầy một số đặc trưng cơ bản nhất của tác tử di động, làm rõ nguyên

lý hoạt động của tác tử di động và các vấn đề liên quan Chương 3 trình bầy các phương pháp truy nhập cơ sở dữ liệu Web truyền thống và phương pháp sử dụng tác

tử di động dựa trên Java Chương 4 thử nghiệm và đánh giá sự thực thi của các phương pháp truy nhập cơ sở dữ liệu Web đã trình bầy, bằng việc đo thời gian đáp ứng yêu cầu truy vấn dữ liệu cho phía client của mỗi phương pháp So sánh thực thi của hai phương truy nhập nhiều cơ sở dữ liệu Web sử dụng một tác tử và nhiều tác

tử Tiếp theo chương 4 là kết luận, tổng kết lại các vấn đề đã nghiên cứu và thử nghiệm, đồng thời đưa ra phương hướng phát triển tiếp theo của luận văn Phần cuối cùng trong luận văn là tài liệu tham khảo và phụ lục Phụ lục 1 trình bầy khái niệm cổng truyền thông Phụ lục 2 trình bầy một số giao diện chính của các chương trình

Trang 13

sử dụng tác tử di động truy nhập cơ sở dữ liệu Web Phụ lục 3 trình bầy một số đoạn mã lệnh trong các phần chính của luận văn

Trang 14

Chương 1 : Lập trình phân tán truyền thống bằng Java

1.1 Sơ lược về ngôn ngữ Java

Java là ngôn ngữ lập trình do hãng Sun Microsystems phát triển và công bố chính thức vào quý hai năm 1995 [1] Từ đó, nó đã trở thành một công cụ mạnh mẽ

để phát triển các ứng dụng trên mạng Internet Ngôn ngữ Java có một số đặc trưng điển hình sau:

 Tính đơn giản : Ngôn ngữ Java được phát triển từ ngôn ngữ C/C++ và loại bỏ

đi những gì phức tạp của ngôn ngữ này Ví dụ như trong Java không có khái niệm đa kế thừa như trong C++ Trình biên dịch và các lớp thư viện có kích thước rất nhỏ gọn so với các ngôn ngữ lập trình khác

 Tính hướng đối tượng : Java là ngôn ngữ lập trình thuần hướng đối tượng, do

đó mọi ứng dụng viết trên Java đều phải xây dựng lớp Trong ngôn ngữ C/C++ ta

có thể xây dựng được hàm dùng chung, không gắn với một lớp thì trong Java chỉ

có thể xây dựng được hàm, gắn với một lớp cụ thể Việc cho phép đa kế thừa trong C++ (một lớp con có nhiều lớp cha) gây ra sự khó khăn trong quản lý các lớp, đã được Java giải quyết bằng khái niệm giao diện

 Tính phân tán : Trong Java đã thiết kế sẵn hỗ trợ lập trình các ứng dụng phân

tán bằng gói java.net Ví dụ như với lớp URL của Java, một ứng dụng của Java có thể dễ dàng được truy xuất từ một máy ở xa Ngoài ra trong Java còn xây dựng các lớp thư viện phục vụ cho việc thiết lập kết nối ở mức socket

 Tính thông dịch : Khác với C/C++, Java là ngôn ngữ lập trình vừa biên dịch

và vừa thông dịch tức là biên dịch mã nguồn và thông dịch để chạy chương trình Việc thực hiện chương trình bằng thông dịch giúp tiết kiệm tài nguyên của hệ thống Tính chất thông dịch của Java rất có lợi cho việc phát triển các ứng dụng trên mạng Internet, đó là tiểu dụng Java

Trang 15

 Tính rõ ràng : Ngôn ngữ Java không cho phép khai báo các biến một cách tùy

tiện trong chương trình Java Biến khai báo trong chương trình Java luôn phải tường minh Ví dụ trong C/C++ để khai báo một mảng động chứa số nguyên chỉ cần khai báo một biến con trỏ số nguyên nhưng trong Java phải khai báo nó là một mảng số nguyên ngay từ đầu

 Tính an toàn và bảo mật : Java được thiết kế có khả năng tạo ra một hệ thống

không virus, không bị phá rối nhờ kỹ thuật xác minh mã hóa theo khóa công khai Java không hỗ trợ biến con trỏ Bộ thông dịch - JVM (Java Virtual Machine) sẽ kiểm soát chặt chẽ các mã byte không cho bất kỳ hành vi truy nhập trái phép nào được thực hiện

 Tính độc lập phần cứng : Khi biên dịch file mã nguồn (.java), trình biên

dịch của Java không dịch từ file mã nguồn sang file mã máy mà nó chỉ dịch sang file mã trung gian (.class) của Java dưới dạng mã byte (bytecode), sau đó tệp

mã byte được thực thi bởi bộ thông dịch được viết riêng cho mỗi hệ thống Các ứng dụng của Java chạy trên nền trung tính của máy ảo Java và không phụ thuộc vào bộ xử lý và hệ điều hành Máy ảo Java có kích thước rất nhỏ, do đó có thể cài đặt trên mọi máy mà không chiếm dụng nhiều tài nguyên của hệ thống, điều này làm cho các hệ thống dễ dàng chấp nhận nó

 Tính khả chuyển : Do cấu trúc độc lập với phần cứng nên các chương trình

ứng dụng Java chỉ cần viết sao cho chạy được trên máy ảo Java là có thể cài đặt

và chạy tốt trên mọi hệ thống Mặt khác, các kiểu dữ liệu của Java được định nghĩa không phụ thuộc vào bộ xử lý hay hệ điều hành mà các ứng dụng được cài đặt

 Hiệu quả cao : Về tốc độ thực thi chương trình thì Java chậm hơn một số

ngôn ngữ khác như C/C++ do dùng bộ thông dịch, bù lại với giao diện đồ họa, sự đơn giản, nhỏ gọn, tính khả chuyển thì có thể nói rằng hiệu quả chung cuộc của các chương trình Java là đáng khích lệ hơn so với tính phức tạp của C/C++

Trang 16

 Tính đa luồng : Ngôn ngữ Java hỗ trợ lập trình ứng dụng đa luồng, cho phép

thực hiện nhiều tiến trình song song và tương tác với nhau, tránh được tính tuần

tự nhàm chán và lãng phí thời gian do phải chờ đợi

 Tính linh động : Java là ngôn ngữ động, được thiết kế để thích ứng với một

môi trường đang phát triển, các chương trình Java mang nhiều thông tin thực thi

do đó nó có thể tự mở rộng để liên kết với các lớp mới trên một máy chủ ở xa qua mạng Internet

Với các đặc trưng tiêu biểu đã nêu ở trên, ngôn ngữ lập trình Java xứng đáng là một công cụ lý tưởng để các lập trình viên chọn lựa cho việc phát triển các ứng dụng phân tán

1.2 Khái niệm lập trình phân tán

Trước khi các máy tính được kết nối mạng, chúng hoạt động một cách độc lập với nhau Các chương trình và dữ liệu cần chương trình xử lý phải đặt trên cùng một máy, có nghĩa là thông thường người ta phải đem các khối dữ liệu cần xử lý đến nơi có chương trình để xử lý

Khi mạng máy tính ra đời các máy tính được kết nối với nhau bởi đường truyền dữ liệu Các máy tính trong mạng có thể chia sẻ tài nguyên và thiết bị cho nhau Hoạt động của các máy tính trong mạng theo hai mô hình chủ yếu là : peer to peer và clients/server

Trong mô hình mạng peer to peer, các máy tính trong mạng có thể cho phép các máy tính khác trong mạng truy nhập vào tài nguyên của mình nhưng chính nó cũng có thể có nhu cầu truy nhập tài nguyên của các máy tính khác, tức là nó vừa đóng vai trò của người cung cấp tài nguyên mạng và cũng là người cần sử dụng tài nguyên mạng

Trong mô hình mạng clients/server có một hoặc nhiều máy (tùy thuộc vào nhu cầu quản trị mạng) làm nhiệm vụ cung cấp một số dịch vụ mạng cho các máy tính

Trang 17

khác trong mạng Việc quản trị tài nguyên mạng tập trung hơn và tính bảo mật tài nguyên mạng cao hơn trong mạng peer to peer

Mạng máy tính phát triển mạnh tạo ra một môi trường tốt, thúc đẩy phát triển lập trình phân tán và xây dựng các ứng dụng phân tán có tính mềm dẻo, linh hoạt, loại bỏ việc di chuyển các khối dữ liệu cần xử lý một cách thủ công đến nơi xử lý

do việc truy nhập vào dữ liệu từ chương trình xử lý được thực hiện qua mạng

Các ứng dụng phân tán thường được xây dựng theo mô hình clients/server Ngôn ngữ lập trình Java hỗ trợ hai dạng lập trình phân tán: lập trình hướng thủ tục

và phi thủ tục Lập trình hướng thủ tục trong Java thực chất là các lời gọi phương thức từ xa còn lập trình phi thủ tục trong Java không sử dụng các lời gọi phương thức từ xa

1.3 Các phương pháp lập trình phân tán phi thủ tục

1.3.1 Phương pháp lập trình socket trong Java

1.3.1.1 Lịch sử hình thành socket

Khái niệm socket xuất hiện lần đầu tiên vào năm 1980 tại trường đại học Berkeley Mỹ, đó là một chương trình được thiết kế để giúp máy tính nối mạng ở khắp mọi nơi có thể trao đổi thông tin với nhau, ban đầu nó được sử dụng trên các máy Unix và có tên gọi là Berkeley Socket Interface, tiếp đó cùng với sự phát triển của các ứng dụng mạng socket được hỗ trợ trong nhiều ngôn ngữ lập trình và chạy trên nhiều nền hệ điều hành khác nhau, ví dụ như WinSock dùng cho các ứng dụng của Microsoft, Socket++ dùng cho các lập trình viên sử dụng Unix …

Một câu hỏi đặt ra là vì sao chúng ta lại sử dụng socket trong truyền thông giữa các máy tính Để trả lời câu hỏi này hãy quay lại thời điểm trước khi socket ra đời, thời kì này trên hệ thống Unix việc vào/ra dữ liệu được thực hiện theo mô hình

3 bước Open-Read/Write-Close, để thực hiện việc vào ra dữ liệu trước hết chương trình phải tạo ra một kết nối tới tài nguyên mà nó muốn giao tiếp (tài nguyên có thể

là đĩa, bộ nhớ trong, file ) Sau khi kết nối đã được thực hiện, chương trình có thể trao đổi dữ liệu thông qua các thao tác Read, tức là đưa dữ liệu từ tài nguyên đã kết

Trang 18

nối vào chương trình để xử lý hoặc Write, tức là đưa dữ liệu đã xử lý từ chương trình ra tài nguyên, ví dụ điển hình cho thao tác vào/ra dữ liệu theo mô hình 3 bước

là thao tác với file dữ liệu mà chúng ta khá quen thuộc trong các ngôn ngữ lập trình Khi người lập trình muốn thao tác với một file dữ liệu họ tiến hành như sau:

1 Mở file chứa dữ liệu cần sử dụng với các quyền thích hợp

2 Thực hiện việc đọc dữ liệu từ file ra để xử lý hay đưa dữ liệu đã xử lý ghi vào file

3 Đóng file sau khi đã kết thúc sử dụng

Khi việc trao đổi dữ liệu giữa chương trình với kết nối mạng được đưa vào hệ thống Unix, người ta mong muốn việc trao đổi dữ liệu giữa các chương trình cũng

sẽ được thực hiện theo mô hình 3 bước trên để tránh cho người lập trình những khó khăn khi giao tiếp với các tầng bên dưới tầng ứng dụng, để làm được điều đó socket

đã được chọn lựa để sử dụng Khi hai chương trình muốn giao tiếp với nhau, mỗi phía sẽ tạo ra một socket, chúng đóng vai trò là các điểm cuối trong một kết nối và thực hiện nhiệm vụ trao đổi thông tin giữa hai chương trình

Socket được xem như một tài nguyên hệ thống (dưới góc độ lập trình) mà chương trình cần giao tiếp, nên chương trình có thể thực hiện giao tiếp với socket theo mô hình 3 bước giống như việc vào/ra dữ liệu Như vậy, sự ra đời và phát triển của socket gắn liền với nhu cầu truyền thông máy tính

1.3.1.2 Định nghĩa Socket

Có nhiều định nghĩa khác nhau về socket tùy theo cách nhìn nhận của người

sử dụng Một cách tổng quát nhất có thể định nghĩa Một Socket là một điểm cuối trong kết nối giữa hai chương trình đang chạy trên mạng

Theo quan niệm của người phát triển ứng dụng người ta có thể định nghĩa

Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ và một chương trình cung cấp dịch vụ trên mạng hoặc trên cùng một máy tính

Trang 19

Đối với người lập trình, họ nhìn nhận socket như một giao diện nằm giữa tầng ứng dụng và tầng khác trong mô hình truyền thông tham chiếu OSI có nhiệm vụ thực hiện việc giao tiếp giữa chương trình ứng dụng với các tầng bên dưới của mạng

Hình 1.1 Mô hình OSI rút gọn Các lập trình viên thường gặp khó khăn trong việc tạo ra socket riêng bởi vì cho dù sử dụng servlet, CGI hay PHP,…, rất có thể sẽ không bao giờ mở được cổng một cách tường minh, vì lẽ đó các lập trình viên thường sử dụng thư viện socket được hỗ trợ sẵn bởi các ngôn ngữ lập trình Như vậy các socket vẫn tồn tại để kết nối các ứng dụng của người dùng, nhưng phần chi tiết của socket được ẩn trong những lớp sâu hơn để các lập trình viên không phải bận tâm đến nó

1.3.1.3 Nguyên lý hoạt động của socket

Hai chương trình ứng dụng muốn trao đổi dữ liệu với nhau qua mạng, mỗi ứng dụng sẽ tạo ra một socket và trao đổi dữ liệu với nhau bằng cách đọc và ghi từ socket của mình, để hiểu rõ cách thức trao đổi dữ liệu của các socket chúng ta hãy xem xét nguyên lý hoạt động của chúng

Trước hết, chúng ta xem làm thế nào các socket có thể xác định đựợc nhau Khi một chương trình tạo ra một socket, một thông tin định danh dạng số sẽ được gán cho socket, thông tin định danh này còn được là cổng1 Việc gán số hiệu cổng này cho socket có thể được thực hiện bởi chương trình (bằng tay) hoặc bởi hệ điều

1 phụ lục 1

Trang 20

hành (tự động), tùy thuộc vào loại socket được sử dụng (socket được sử dụng cho phía client hay server) Mỗi gói tin được socket gửi đi có chứa hai thông tin để xác định đích đến của gói tin:

- Một địa chỉ mạng, để xác định hệ thống (thường là máy tính) sẽ nhận gói tin

- Một số hiệu cổng để thông báo cho hệ thống đích biết socket nào trên nó sẽ nhận dữ liệu

Nhờ hai thông tin này mà gói tin được truyền đến đúng máy tính đích (nhờ vào địa chỉ mạng) và được dữ liệu được chuyển đến đúng socket đích (nhờ vào số hiệu cổng của socket)

Các socket thường làm việc theo cặp trong quá trình được các chương trình sử dụng để trao đổi dữ liệu với nhau qua mạng, một socket đóng vai trò là server, socket còn lại đóng vai trò như client Socket phía server được xác định một cổng cho kết nối mạng, sau đó chờ nghe yêu cầu mà client gửi tới nó trên cổng này, do đó các chương trình client phải biết trước số hiệu cổng của socket server mà nó cần kết nối tới Ví dụ dịch vụ FTP server tạo ra một socket để lắng nghe yêu cầu của client tại cổng có số hiệu cố định là 21, vì vậy một chương trình client muốn giao tiếp với FTP server nó cần phải kết nối đến socket có số hiệu cổng 21 Như vậy số hiệu cổng của socket phía server được xác định bởi chương trình, ngược lại cổng cho socket phía client được xác định bởi hệ điều hành Khi một socket phía client gửi một gói tin cho socket phía server thì trong gói tin đó có chứa hai thông tin về địa chỉ mạng của hệ thống client và số hiệu cổng của socket phía client, nên phía server hoàn toàn

có thể gửi thông tin trả lời cho client dựa vào hai thông tin này Quá trình trao đổi

dữ liệu của hai chương trình ứng dụng qua mạng thông qua các socket có thể được

mô tả bằng các bước sau:

1 Chương trình phía server tạo ra một socket, socket này được chương trình gắn với một số hiệu cổng cố định trên server Sau khi đựợc tạo ra , socket server sẽ chờ nghe yêu cầu từ phía client trên số hiệu cổng này

Trang 21

2 Chương trình phía client có nhu cầu kết nối tới chương trình server, nó cũng tạo ra một socket, socket này được hệ điều hành gán cho một số hiệu một cổng2 Chương trình phía client sẽ cung cấp cho socket của nó hai thông tin địa chỉ mạng,

số hiệu cổng của socket phía server và yêu cầu thực hiện kết nối (nếu chương trình

sử dụng socket hỗ trợ giao thức hướng kết nối TCP) hoặc truyền dữ liệu (nếu chương trình sử dụng socket hỗ trợ giao thức không hướng nối UDP)

3 Chương trình phía server và chương trình phía client trao đổi dữ liệu với nhau bằng cách đọc từ socket hoặc ghi vào socket của mình Các socket ở hai đầu kết nối nhận dữ liệu từ chương trình ứng dụng và đóng gói thành gói tin để gửi đi hoặc nhận gói tin gửi đến và chuyển dữ liệu cho chương trình ứng dụng, việc này thực hiện được bởi vì các socket ở hai đầu kết nối biết địa chỉ mạng và số hiệu cổng của nhau

Ở bước thứ hai chúng ta thấy chương trình ứng dụng phải lựa chọn giao thức mạng mà nó sử dụng để trao đổi dữ liệu, tùy theo chúng ta sử dụng giao thức nào (TCP hay UDP) mà cách thức xử lý yêu cầu của client có thể khác nhau Sau đây chúng ta sẽ xem xét chi tiết cách thức trao đổi dữ liệu của socket tương ứng với từng loại giao thức mạng

Socket hỗ trợ giao thức mạng TCP

- Phía Server: Khi một dịch vụ trên máy server hoạt động, nó sẽ tạo ra một

socket, socket này được dịch vụ đăng ký với máy server một số hiệu cổng cố định

và nó lắng nghe yêu cầu kết nối từ phía client trên cổng này

Hình 1.2 Dịch vụ phía server lắng nghe yêu cầu kết nối từ client

2 phụ lục 1

Trang 22

- Phía client: Nó biết địa chỉ mạng của máy server mà dịch vụ đang chạy trên

đó và số hiệu cổng socket server đang chờ nghe yêu cầu, khi muốn kết nối đến server, nó cũng tạo ra một socket chứa địa chỉ mạng của máy client và số hiệu cổng của ứng dụng chạy trên máy client, đồng thời ứng dụng client sẽ cung cấp cho socket của nó địa chỉ mạng của máy server và số hiệu cổng của dịch vụ mà nó cần kết nối tới và yêu cầu socket thực hiện kết nối

Khi server nhận được yêu cầu kết nối từ client, nếu chấp nhận nó sẽ tạo ra một socket mới được gán một số hiệu cổng bởi hệ điều hành nhưng khác với số hiệu cổng mà nó đang chờ nghe yêu cầu từ phía client, sở dĩ server làm như vậy bởi vì

nó cần duy trì số hiệu cổng cũ để tiếp tục lắng nghe yêu cầu từ phía client, trong khi nó cần thêm một socket mới để trả lời yêu cầu của phía client, sau đó dịch vụ phía server sẽ gửi thông báo chấp nhận kết nối cho client cùng thông tin về số hiệu cổng mới của socket mà nó dùng để giao tiếp với phía client

Hình 1.3 Server trả lời yêu cầu của client trên một cổng mới

Với ứng dụng client, nếu kết nối được chấp nhận nghĩa là socket của nó đã được tạo ra thành công và nó có thể sử dụng socket để giao tiếp với dịch vụ trên máy server bằng cách đọc và ghi socket theo cách giao tiếp với một tài nguyên thông thường trên máy tính

Socket hỗ trợ giao thức mạng UDP

- Phía Server: Khi một dịch vụ trên máy server hoạt động nó sẽ tạo ra một

socket, dịch vụ sẽ đăng ký cho socket một số hiệu cổng cố định với máy server và lắng nghe yêu cầu từ phía client trên cổng này

Trang 23

- Phía client: Nó biết địa chỉ mạng của máy server mà dịch vụ đang chạy trên đó và

số hiệu cổng socket server đang chờ nghe yêu cầu từ phía client, khi muốn giao tiếp với dịch vụ trên máy server, ứng dụng phía client cũng tạo ra một socket chứa địa chỉ máy client và số hiệu cổng của ứng dụng chạy trên máy client, đồng thời ứng dụng phía client sẽ cung cấp cho socket của nó địa chỉ mạng của máy server và số hiệu cổng của dịch vụ mà nó cần giao tiếp

Khi ứng dụng phía client muốn truyền tin đến dịch vụ trên server nó sẽ chuyển

dữ liệu cho socket của mình, socket này sẽ chuyển thẳng gói tin mà ứng dụng phía client muốn gửi tới dịch vụ trên server dưới dạng một datagram có chứa địa chỉ máy server và số hiệu cổng mà socket server chờ nghe yêu cầu Như vậy không hề có một kết nối nào được thực hiện giữa ứng dụng phía client với dịch vụ trên server và server cũng không cần tạo ra một socket mới để trả lời client, mà server dùng ngay socket ban đầu của nó để trả lời yêu cầu của phía client

1.3.1.4 Hỗ trợ lập trình socket trong Java

Ngôn ngữ lập trình Java hỗ trợ các lớp thư viện lập trình mạng chứa trong gói java.net, dưới đây là cấu trúc của gói:

Hình 1.4 Cấu trúc của gói java.net

Trang 24

- Lớp InetAddress : Biểu diễn địa chỉ IP của mạng Internet Trong lớp này quan trọng nhất là hai phương thức getHostName() và getAddress() dùng

để ánh xạ giữa địa chỉ IP và tên host

- Lớp ServerSocket : Biểu diễn socket dùng cho phía server

- Lớp Socket: Biểu diễn socket dùng cho cả hai phía server và client, lớp Socket được sử dụng với giao thức mạng TCP

- Lớp DatagramSocket: Biểu diễn socket cho cả hai phía client và server, lớp DatagramSocket được sử dụng với giao thức mạng UDP

Java đã xây dựng sẵn các lớp thư viện hỗ trợ cho cả hai loại socket làm việc với giao thức TCP và UDP, chi tiết xem bảng sau:

Loại giao thức Lớp phía client Lớp phía server

Hướng kết nối (TCP) Socket ServerSocket

Không hướng nối (UDP) DatagramSocket DatagramSocket

Hình 1.5 Các lớp socket trong Java

1.3.2 Phương pháp lập trình servlet

1.3.2.1 Khái niệm servlet

Servlet là một ứng dụng Java chạy phía server Servlet có thể được nhúng trên nhiều server khác nhau Servlet được sử dụng rộng rãi trong các HTTP server Servlet là một thay thế hiệu quả cho CGI scripts, chúng cung cấp một cơ chế dễ dàng tạo ra các tài liệu động và chạy nhanh hơn Đặc trưng của servlet là lập trình phía server với các API đặc thù hệ thống, chúng được viết bằng Servlet API, một chuẩn mở rộng của Java, do đó servlet được dùng để xử lý các yêu cầu HTTP từ phía client

Servlet là đối tượng nhúng trên trình chủ Web, thực hiện xử lý yêu cầu và tạo

ra các trang Web động trả về máy khách Để chạy được servlet cần có các trình chủ Web hiểu Java và hỗ trợ triệu gọi servlet như Tomcat, JRun, Web logic, JWS,

Trang 25

jsdk , mặc dù vậy để biên dịch và tạo ra các lớp servlet (.class) chúng ta chỉ cần đến trình biên dịch của bộ JDK (Java Development Kit), có bổ sung thêm gói servlet.jar của trình Web chủ tương ứng mà không cần đến chính các trình chủ Web

1.3.2.2 Cấu trúc servlet

Các lớp thư viện của servlet nằm trong gói phần mềm servlet.jar, gói phần mềm này không được tích hợp sẵn trong bộ JDK mà nó được cung cấp bởi các trình chủ web như Tomcat, jsdk, , trong đó có các lớp thư viện cần thiết như GenericServlet, HttpServlet hỗ trợ cho người lập trình có thể xây dựng các ứng dụng servlet được kế thừa từ những lớp servlet thư viện hiện có Việc đầu tiên để xây dựng một ứng dụng servlet là chọn một lớp servlet thư viện hiện có để

kế thừa Ví dụ như kế thừa từ lớp GenericServlet, đây là lớp cơ bản nhất và là thủy tổ của các lớp servlet

Hình 1.6 Các lớp suy diễn được từ lớp GenericServlet

Việc khai báo một ứng dụng servlet được kế thừa từ lớp GenericServlet được thực hiện như sau :

public class helloWordServlet extends GenericServlet {

Trang 26

Lớp dẫn xuất từ lớp GenericServlet phải viết đè phương thức service() của lớp cha theo mẫu sau :

public class helloWorldServlet extends GenericServlet {

public void service(ServletRequest req,

ServletResponse res) throws IOException

Có hai việc cần làm để chuẩn bị trả dữ liệu kết quả về trình duyệt Web phía client theo khuôn dạng của tài liệu HTML Đầu tiên đối tượng res gọi phương thức setContentType()xác định khuôn dạng kiểu dữ liệu kết quả để trình duyệt Web phía client biết cách hiển thị Phương thức này được gọi như sau :

public class helloWorldServlet extends GenericServlet {

public void service(ServletRequest req,

ServletResponse res) throws IOException

Trang 27

Việc tiếp theo mà servlet phải làm là tạo ra luồng xuất PrintWriter thông qua phương thức getWriter() của đối tượng res như sau :

public class helloWorldServlet extends GenericServlet {

public void service(ServletRequest req,

ServletResponse res) throws IOException

Một ví dụ đơn giản về một ứng dụng servlet hoàn chỉnh

public class helloWorldServlet extends GenericServlet {

public void service(ServletRequest req,

ServletResponse res) throws IOException

Trang 28

hỗ trợ biên dịch và thực thi servlet như jsdk, Tomcat, , ngoại trừ tệp thư viện servlet.jar, một ứng dụng servlet (.java) có thể biên dịch bằng trình biên dịch javac.exe của bộ JDK mà không cần đến bất kỳ trình chủ Web nào

Một ứng dụng servlet được biên dịch giống như biên dịch một chương trình Java thông thường Trong chế độ thao tác dòng lệnh của hệ diều hành MSDOS, sau khi đã đặt đường dẫn CLASSPATH tới tệp servlet.jar (giả sử thư mục sample có đường dẫn như ví dụ dưới) gọi trình biên dịch javac.exe của bộ JDK như sau :

C:\sample>javac helloWorldServlet.java

Kết quả biên dịch nhận được tệp helloWorldServlet.class Chúng ta

đã có được một ứng dụng servlet ở dạng thực thi (mã byte) và được triệu gọi bởi trình chủ Web

1.3.2.4 Đăng ký và triệu gọi servlet

Một ứng dụng servlet ở dạng thực thi (.class) muốn được trình chủ Web hỗ trợ servlet triệu gọi thì trước tiên phải đăng ký nó với trình chủ Web Việc đăng ký ứng dụng servlet là khác nhau đối với các trình chủ Web khác nhau [2,3] Thư mục chứa tệp tin class của servlet để trình chủ Web tìm thấy và triệu gọi cũng không hoàn toàn giống nhau giữa các trình chủ Web Tuy nhiên, nhìn chung quá trình đăng

ký ứng dụng servlet với trình chủ Web thường có các bước sau :

1 Chép tệp tin class của ứng dụng servlet vào thư mục đã được quy định bởi trình chủ Web

2 Đặt đường dẫn đến file class và đặt cho ứng dụng servlet một bí danh để triệu gọi servlet theo bí danh nếu cần

3 Thiết lập các tham số khởi tạo cho ứng dụng servlet và các yêu cầu bảo mật cho phép servlet được triệu gọi

Trang 29

1.3.2.5 Vòng đời của servlet

Vòng đời của ứng dụng servlet từ khi servlet được triệu gọi cho đến khi bị loại

bỏ khỏi trình chủ Web vì không còn cần đến nữa, quá trình tồn tại của servlet trải qua các giai đoạn sau:

- Nạp servlet

- Khởi tạo servlet

- Thực thi servlet

- Dọn dẹp servlet

Hình 1.7 Sơ đồ vòng đời của servlet

 Nạp servlet : Một ứng dụng servlet có thể được trình chủ Web nạp vào tại ba

thời điểm khác nhau khi servlet khởi động, khi người quản trị yêu cầu hoặc khi trình duyệt Web triệu gọi servlet từ máy client Hầu hết các trình chủ Web hỗ trợ servlet đều cho phép chọn danh sách các ứng dụng servlet đã được ưu tiên nạp từ lúc trình chủ Web khởi động, tuy tốn chút ít thời gian

mã lệnh của servlet

của servlet

Trang 30

ban đầu nhưng sau đó servlet đã trong trạng thái sẵn sàng có thể phục vụ bất

kỳ trình khách nào Ví dụ như ứng dụng servlet cần phải chuẩn bị một số thao tác kết nối tới cơ sở dữ liệu, liên hệ với nguồn tài nguyên khác trước khi

có thể phục vụ, nếu đợi đến khi trình duyệt Web triệu gọi servlet, các thao tác này mới thực hiện thì trình khách sẽ phải mất thời gian chờ đợi Trình chủ Web nạp servlet trước khi có yêu cầu phục vụ sẽ tạo điều kiện cho trình khách có thể gọi ngay servlet mà không phải mất thời gian chờ đợi Trình chủ Web cần biết tên lớp của ứng dụng servlet cần nạp, thông thường tên lớp của servlet cũng là tên được trình duyệt Web dùng triệu gọi servlet, servlet thường được gọi bằng một URL, bắt đầu với tiếp đầu ngữ /servlet Ví dụ http://localhost:8100/servlet/helloWorld Mẹo mà trình chủ Web sử dụng ở đây là khi nhận được chuỗi URL triệu gọi servlet, nó sẽ phân tích chuỗi này

và nhận ra tiếp đầu ngữ /servlet, đây chính là tên ánh xạ dùng để gọi các servlet mặc định Trình chủ Web sẽ truy tìm tiếp các servlet sau tiếp đầu ngữ /servlet (trong ví dụ này là servlet helloWorld) và triệu gọi nó thực thi Khi có một yêu cầu triệu gọi servlet, trình chủ Web sẽ kiểm tra xem servlet

đã được nạp hay chưa? nếu chưa, nó sẽ nạp servlet vào trong trình chủ Web,

khi servlet đã được nạp, trình chủ Web sẽ tiến hành khởi tạo servlet

 Khởi tạo Servlet : Trình chủ web khởi tạo servlet bằng cách gọi phương thức

init() mà ứng dụng servlet đã cài đặt Phương thức này chỉ được gọi một lần duy nhất, do đó có thể tận dụng cơ hội này để khởi tạo các biến toàn cục

mà servlet sẽ sử dụng sau này

 Thực thi Servlet : Khi trình duyệt Web triệu gọi ứng dụng servlet thông qua

địa chỉ URL Trình chủ Web sẽ chính thức triệu gọi servlet thực thi thông qua các phương thức như doGet(), doPost() hoặc service() Ví dụ khi ứng dụng servlet được triệu gọi trực tiếp từ địa chỉ URL, phương thức doGet() của servlet sẽ được gọi Nếu servlet được triệu gọi thông qua thao tác post của thẻ <form> thì phương thức doPost() sẽ được gọi Chú ý

Trang 31

sau khi các phương thức này được triệu gọi và thực thi xong, ứng dụng servlet vẫn được giữ lại trong bộ nhớ để phục vụ cho lần triệu gọi tiếp theo, đây cũng chính là ưu điểm làm cho ứng dụng servlet thực thi nhanh hơn các ứng dụng CGI

 Dọn dẹp Servlet : Ứng dụng servlet không được trình chủ Web lưu giữ trong

bộ nhớ vĩnh viễn, sẽ đến một lúc nào đó cần phải loại bỏ servlet ra khỏi bộ nhớ tương tự như khi nhà quản trị muốn ngừng hệ thống và khởi động lại trình chủ Web để giải phóng rác trong bộ nhớ làm tăng hiệu suất thực hiện Trước khi loại bỏ ứng dụng serlet, trình chủ Web sẽ gọi đến phương thức destroy() của servlet Đây là thời điểm để servlet thực hiện một số thao tác dọn dẹp cần thiết như lưu dữ liệu trong vùng đệm xuống đĩa, ghi nhớ trạng thái của servlet để phục vụ cho lần khởi động sau, đóng kết nối tới cơ

sở dữ liệu Mặc dù Java có thể tự động dọn dẹp rác trong bộ nhớ nhưng nếu ứng dụng servlet đã được cấp phát một lượng lớn bộ nhớ trong quá trình làm việc thì nên giải phóng chúng trong phương thức destroy()

1.4 Các phương pháp lập trình phân tán hướng thủ tục

1.4.1 Lập trình RMI

1.4.1.1 Giới thiệu về RMI

RMI3 là một hệ thống đối tượng phân tán [13] Ứng dụng RMI cho phép từ một máy client có thể gọi đến một phương thức của một đối tượng chạy trên máy server thông qua mạng, giống như gọi phương thức của một đối tượng đang chạy trên máy ảo Java tại máy client Giá trị được phương thức của đối tượng trên server trả lại cho client khi được gọi có thể thuộc kiểu dữ liệu bất kỳ

1.4.1.2 Các bước tạo ứng dụng RMI

1 Tạo giao diện cho đối tượng được gọi từ xa đặt trên server Trong giao diện

này sẽ khai báo các phương thức cho phép các client gọi từ xa

3 Remote Method Invocation

Trang 32

2 Tạo lớp server từ xa thực hiện giao diện vừa tạo ra Lớp thực hiện sẽ xây

dựng cụ thể phần mã lệnh thực thi chức năng của các phương thức đã khai báo trong giao diện và nó sẽ bổ sung thêm một phương thức khởi tạo để tạo

ra các đối tượng từ xa thực thi các phương thức trong giao diện Trong lớp thực hiện giao diện từ xa được phép bổ sung thêm các phương thức mới nhưng chỉ có những phương thức khai báo trong giao diện mới có hiệu lực gọi từ xa

3 Biên dịch giao diện và các lớp thực hiện giao diện bằng cách sử dụng trình

biên dịch rmic.exe đi kèm với bộ JDK phiên bản 1.3, ta sẽ nhận được các lớp stub và skeleton (với các phiên bản JDK mới hơn khi biên dịch chỉ nhận được lớp stub) tương ứng với lớp thực hiện giao diện Lớp stub giúp cho phía client có thể giao tiếp được với tầng tham chiếu từ xa, tương tự lớp skeleton giúp cho server có thể giao tiếp được với tầng tham chiếu từ xa Nói cách khác, nhờ các lớp này mà chương trình phía client và đối tượng từ xa phía server giao tiếp được với nhau

4 Tạo một lớp client dùng để truy nhập đối tượng từ xa và gọi các phương thức cần thiết trên đối tượng từ xa

5 Tạo một lớp đăng ký tên duy nhất cho đối tượng từ xa với dịch vụ đăng ký rmiregistry.exe được cung cấp bởi bộ JDK, dịch vụ này là một ứng dụng chạy nền trên server Thông qua dịch vụ đăng ký tên duy nhất rmiregistry các client có thể định vị được các đối tượng từ xa trên server và gọi các phương thức từ xa của chúng

Trang 33

Hình 1.8 Mô hình hoạt động chương trình RMI

1.4.1.3 Ví dụ minh họa cài đặt ứng dụng RMI

Để hiểu rõ hơn cách xây dựng ứng dụng RMI, sau đây sẽ cài đặt một ví dụ ứng dụng RMI Để cho việc thử nghiệm thuận tiện, ban đầu các file java, class của cả hai ứng dụng phía server và client nên lưu trữ trong cùng một thư mục, khi chương trình hoàn thiện sẽ tách các file của ứng dụng client và server về các máy tương ứng

1 Tạo giao diện chứa các phương thức được gọi từ xa

Tạo giao diện sau và lưu trữ trong một file có tên là checkId.java Biên dịch nó bằng trình javac.exe đi kèm với bộ JDK để nhận được file class tương ứng Câu lệnh biên dịch được thực hiện trong chế độ dòng lệnh theo cú pháp sau javac checkId.java

// Khai báo sử dụng các lớp thư viện

import java.rmi.Remote;

import java.rmi.RemoteException;

// Khai báo giao diện

public interface checkId extends Remote

{

public boolean verifyId(String id) throws

RemoteException;

}

Trang 34

2 Tạo lớp thực hiện giao diện

Tạo lớp thực hiện giao diện sau và ghi trong file văn bản có tên là checkIdImpl.java, sau đó biên dịch để nhận được file class tương ứng Cú pháp thực hiện trong chế độ dòng lệnh là javac checkIdImpl.java

// Thực hiện giao diện checkId

//Phương thức khởi tạo giá trị cho id

public checkIdImpl() throws RemoteException

boolean idOk = false;

// So sánh chuỗi IdToCheck gửi từ ứng dụng client với chuỗi id

// Lưu trữ kết quả so sánh trong đối tượng từ

xa

if (IdToCheck.equals(this.id)) idOk = true;

return idOk;

}

}

3 Tạo các lớp trung gian móc nối giữa ứng dụng client và server

Dùng trình biên dịch rmic.exe của Java đi kèm với bộ JDK để dịch lớp checkIdImpl, cú pháp trong chế độ dòng lệnh là rmic checkIdImpl và nhận được các lớp trung gian tương ứng với ứng dụng phía client và server là checkIdImpl_Stub.class và checkIdImpl_Skel.class Lớp checkIdImpl_Stub.class xử lý giao tiếp từ phía client, nó chuyển tiếp lời gọi phương thức của client tới server và nhận kết quả trả về từ phía server cho

Trang 35

client Lớp checkIdImpl_Skel.class xử lý giao tiếp phía server, nó nhận lời gọi phương thức từ client và trả giá trị kết quả về cho client

4 Tạo ứng dụng client

Viết mã lệnh cho ứng dụng client sau và ghi lại với file văn bản có tên là checkIdClient.java Biên dịch nó để nhận được file checkIdClient.class tương ứng

System.out.println("Result of checking id

is " + check.verifyId("Gopher"));

} catch (Exception e) {

System.out.println("Error while verifying id.");

e.printStackTrace();

} }

}

5 Tạo lớp đăng ký tên duy nhất cho đối tượng từ xa

Lớp này chứa một đối tượng từ xa được đăng ký tên duy nhất với dịch vụ rmiregistry Viết đoạn mã lệnh sau và ghi lại thành file văn bản có tên là RegObject.java Biên dịch nó để nhận được file lớp là RegObject.class theo cú pháp javac RegObject.java trong chế độ dòng lệnh

import java.rmi.Naming;

public class RegObject

Trang 36

6 Khởi động dịch vụ đăng ký RMI

Đối tượng từ xa muốn đăng ký tên duy nhất với dịch vụ đăng ký RMI thì đầu tiên phải khởi động dịch vụ đăng ký trong chế độ dòng lệnh theo cú pháp sau : start rmiregistry

Mặc định dịch vụ đăng ký RMI lắng nghe trên cổng 1099 Nếu cần thay đổi số hiệu cổng của dịch vụ, có thể khởi động dịch vụ đăng ký theo cú pháp sau :

start rmiregistry port_number

Ví dụ start rmiregistry 8080 Khi đó dịch vụ đăng ký sẽ lắng nghe yêu cầu trên cổng 8080 Chú ý rằng dịch vụ đăng ký RMI là một chương trình chạy nền, không có giao diện người dùng đồ họa

7 Đăng ký tên đối tượng từ xa bằng cách chạy lớp RegObject

Việc này được thực hiện đơn giản như chạy một ứng dụng dạng Application của Java trong chế độ dòng lệnh như sau :

java RegObject

Nếu nhận được thông báo "Registered Id Database" trên màn hình

là đăng ký thành công

Trang 37

8 Chạy lớp client để giao tiếp với đối tượng từ xa đã đăng ký

Ví dụ này ứng dụng client sẽ gửi một chuỗi định danh là "Gopher" đến đối tượng từ xa trên server để kiểm tra xem định danh này có khớp với một định danh được lưu trữ trong thuộc tính của đối tượng từ xa là chuỗi "Squirrel" hay không Ứng dụng phía client được thực hiện trong chế độ dòng lệnh như sau :

java checkIdClient

Kết quả thông báo nhận được trên màn hình là "Result of checking

id is false"

1.4.2 Lập trình CORBA trong Java

1.4.2.1 Giới thiệu về CORBA và IDL

CORBA4 là một chuẩn công nghiệp, được đề xuất bởi OMG5, OMG là đại diện cho trên 700 nhà cung cấp và phát triển phần mềm thành lập năm 1989, hỗ trợ cho lập trình các đối tượng phân tán, cho phép gọi phương thức từ xa CORBA được thiết kế từ tầng thấp nhất trở lên để hỗ trợ mạng diện rộng, hệ điều hành và các loại ngôn ngữ lập trình

CORBA là một giải pháp tốt hơn RMI trong lập trình phân tán bởi vì ứng dụng RMI chỉ thực thi được trên nền Java Ứng dụng CORBA cho phép thực hiện lời gọi các đối tượng chạy trong máy ảo Java CORBA không phải là một ngôn ngữ lập trình nhưng nó đặc tả làm thế nào để các đối tượng tương tác được với nhau, do

dó ứng dụng CORBA không bị hạn chế bởi ngôn ngữ lập trình Các dịch vụ CORBA phía server và ứng dụng CORBA phía client có thể được viết bằng nhiều loại ngôn ngữ khác nhau

CORBA không phải là một ngôn ngữ lập trình, do đó nó đã giới thiệu một ngôn ngữ mới IDL6 Các dịch vụ CORBA được mô tả bằng một lược đồ, đó là mẫu

để tạo nhanh các phương thức của đối tượng trong ngôn ngữ IDL Các ngôn ngữ

4 Common Object Brocker Architecture

5 Object Management Group

6 Interface Definition Language

Trang 38

như Java có hỗ trợ CORBA có thể cài đặt lược đồ IDL IDL là một ngôn ngữ trung gian, có thể ánh xạ một lược đồ IDL sang bất kỳ ngôn ngữ lập trình nào hỗ trợ IDL (luận văn này chỉ đề cập xây dựng chương trình ứng dụng CORBA bằng ngôn ngữ lập trình Java)

Hiện tại OMG đặc tả ngôn ngữ IDL có thể ánh xạ sang các ngôn ngữ lập trình sau:

7

Trang 39

Hình 1.9 Đối tượng cục bộ hoạt động như proxy đối với đối tượng ở xa Các đối tượng được xem như cục bộ và gọi các phương thức của chúng như các đối tượng bình thường ORB hoạt động như một đối tượng trung gian giữa client và servant, còn giao tiếp giữa client và servant qua mạng Internet được thực hiện thông qua giao thức IIOP8

Hình 1.10 Giao tiếp qua mạng Internet sử dụng IIOP IIOP là một mô đun phần mềm đã được xây dựng sẵn, nếu phần mềm sử dụng IIOP như là một cơ chế giao vận thì nó sẽ có đầy đủ sự mạnh mẽ cũng như bị hạn chế của giao thức TCP/IP Phần mềm CORBA sẽ bị ảnh hưởng do các hạn chế của mạng bởi các Applets cũng như Firewalls

8 Internet Inter-ORB Protocol

Object Request Broker(ORB)

Trang 40

1 Các dịch vụ CORBA

Ứng dụng CORBA mô tả các dịch vụ phần mềm bằng một lược đồ và thực hiện bằng một phục vụ Servant như là một phần đặc biệt của phần mềm đã đăng ký với một dịch vụ tìm kiếm để phần mềm CORBA khác có thể định vị và truy nhập các dịch vụ của nó Một máy chủ CORBA sẽ tạo ra một servant CORBA, sau đó nó chịu trách nhiệm tạo ra một ORB cho servant và đăng ký dịch vụ để các client có thể truy nhập được dịch vụ

Hình 1.11 Các server đăng ký với dịch vụ tên CORBA

2 Các client CORBA

Các client CORBA không cần đăng ký với một dịch vụ tên nhưng chúng cần

sử dụng dịch vụ tên để tìm kiếm các servant Các servant có thể được định vị trên cùng một máy hoặc có thể di chuyển nhưng dịch vụ tên sẽ hỗ trợ cho client định vị chúng CORBA được thiết kế rất mạnh mẽ, khi servant di chuyển từ máy này đến một máy khác các client vẫn định vị được servant nhờ vào dịch vụ tên, trong lần sau việc tìm kiếm định vị servant, sẽ được tham chiếu đến máy mới, điều này giống như RMI nhưng khả năng dung thứ lỗi và độ linh hoạt của CORBA tốt hơn RMI rất nhiều nhờ vào mã hóa cứng trong mã nguồn hoặc các file cấu hình và sự cho phép của các nhà quản trị mạng để phân tán các dịch vụ mạng sao cho cân bằng tải

Ngày đăng: 25/03/2015, 10:19

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w