Tải bản đầy đủ (.docx) (26 trang)

tiểu luận môn lập trình mạng hãy vận dụng các thuật toán để xây dựng giải pháp cho hệ thống ngân hàng với n=2 server quản lý m đủ lớn các tài khoản của khách hàng với yêu cầu hệ phải

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (349.15 KB, 26 trang )

1
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN

TIỂU LUẬN
Môn:
LẬP TRÌNH MẠNG NÂNG CAO
Đề tài:
Hãy vận dụng các thuật toán để xây dựng giải
pháp cho hệ thống ngân hàng với n server (n ≥2)
quản lý m đủ lớn các tài khoản của khách hàng
với yêu cầu hệ phải đảm bảo gắn bó mạnh.

GVHD: PGS. TS. Lê Văn Sơn
HVTH: Nguyễn Thanh Trung
LỚP : Khoa học máy tính-K24
(T9/2011)
Đà Nẵng, tháng 05/2012
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
MỤC LỤC
HVTH: Nguyễn Thanh Trung Trang 2
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Với môn học “Hệ tin học phân tán” vừa qua, tôi đã được sự hướng dẫn của Thầy giáo
PGS.TS Lê Văn Sơn, tôi đã lĩnh hội được những kiến thức căn bản của hệ tin học phân tán. Qua
đó, tôi đã thấy rõ được tầm quan trọng của nó, đó là một xu hướng kỹ thuật mới, xu hướng phân
tán các thành phần tạo nên hệ tin học theo hướng tiếp cận mới sử dụng và sản xuất thông tin.
Cũng qua môn học này nó cũng đặt ra cho chúng ta khá nhiều vấn đề cần giải quyết để đi đến một
hệ thống hoàn chỉnh, tối ưu. Có thể nói đến đó là vấn đề về tài nguyên dùng chung, đặc biệt là tài
nguyên thông tin và chiến lược khai thác chúng.
Và đến với môn học “Lập trình mạng máy tính nâng cao”, tôi được tìm hiểu các vấn đề


về lập trình các ứng dụng trên mạng cục bộ và mạng Internet, đặc biệt là kỹ thuật lập trình mạng
phân tán đối tượng trong Java, các cách để giải quyết một bài toán tin học cụ thể. Để hiểu rõ hơn
vấn đề xử lý thông tin và đảm bảo sự gắn bó dữ liệu trên hệ phân tán, tôi đã chọn đề tài:
Hãy vận dụng các thuật toán để xây dựng giải pháp cho hệ thống ngân hàng với n
server (n

2) quản lý m đủ lớn các tài khoản của khách hàng với yêu cầu hệ phải đảm bảo gắn
bó mạnh.
Trong phạm vi tiểu luận của mình, tôi thực hiện những vấn đề sau:
Chương I: Các khái niệm cơ bản về hệ phân tán, lập trình mạng và cơ sở dữ liệu phân tán.
Chương 2: Kỹ thuật lập trình hướng đối tượng trong Java kết nối cơ sở dữ liệu với JDBC.
Chương 3: Chương trình đảm bảo gắn bó dữ liệu khi cập nhật trong các cơ sở dữ liệu phân tán tại
các ngân hàng.
Tôi xin chân thành cám ơn Thầy PGS.TS Lê Văn Sơn đã hướng dẫn tôi hoàn thành đề tài
này. Mặc dù đã nghiên cứu kỹ phần lý thuyết để có được cách giải quyết bài tập đúng đắn, phù
hợp với yêu cầu đề tài, nhưng tôi không thể tránh khỏi những sai sót, kính mong được sự đóng
góp ý của thầy giáo hướng dẫn và các anh chị trong lớp để bài tiểu luận được hoàn thiện tốt hơn.
Đà Nẵng, Tháng 05 năm 2012
Học viên thực hiện
Nguyễn Thanh Trung
HVTH: Nguyễn Thanh Trung Trang 3
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
CHƯƠNG I: CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ PHÂN TÁN

LẬP
TRÌNH MẠNG VÀ CƠ SỞ DỮ LIỆU PHÂN TÁN
1. HỆ PHÂN TÁN
1.1 Tổng quan về hệ tin học
Một cách tổng quát, hệ tin học có thể bao gồm các thành phần cơ bản như phần cứng, hệ
điều hành, các chương trình ứng dụng và người sử dụng (NSD) … và có thể được mô tả như hình

I.1. sau:
Các thiết bị phần cứng bao gồm các thiết bị xử lý trung tâm, bộ nhớ và các thiết bị ngoại vi
đóng vai trò là một trong hai loại tài nguyên cơ sở của hệ thống tin học. Các chương trình ứng
dụng là thành phần tiếp theo sau hệ điều hành được hiểu như là các phần mềm cơ sở phục vụ cho
việc triển khai các ứng dụng cụ thể như chương trình dịch, hệ quản trị cơ sở dữ liệu, các chương
trình trợ giúp sử dụng các thiết bị chuyên dụng, các trò chơi điện tử
Người sử dụng (NSD) ở đây được hiểu theo nghĩa rộng, dưới góc độ của hệ điều hành, có
thể là các nhà chuyên môn, các máy tính, các hệ tự động vận hành, gắn với máy tính đang khai
thác hệ thông qua lệnh điều khiển theo một thuật toán nào đó nhằm đạt được mục tiêu xác định từ
trước.
Hệ điều hành các máy tính và mạng máy tính gọi tắt là hệ điều hành được đặt sát phần cứng,
nó gắn kết chặt chẽ với phần thiết bị bởi một hệ thống các chương trình, điều khiển và sắp xếp
nhằm khai thác phần cứng phục vụ cho các chương trình ứng dụng khác nhau của NSD khác nhau
với kết quả và hiệu năng chấp nhận được.
Như vậy, hệ tin học bao gồm ba thực thể: phần cứng, phần mềm và dữ liệu, được mô tả ở
hình I-2.
HVTH: Nguyễn Thanh Trung Trang 4
Các
hệ thống phần mềm
Hệ thống
dữ liệu
Tập hợp
phần cứng
Hệ thống truyền thông
Hình I-3: Các thực thể của hệ tin học phân tán
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Vậy hệ thống tin học (Informatic System) là một hệ thống bao gồm hai thành phần cơ bản
phần cứng (hardware) và phần mềm (software) gắn bó hữu cơ với nhau và có khả năng xử lý
thông tin.
1.2 Hệ tin học phân tán

1.2.1 Định nghĩa
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là hệ thống xử lý
thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm tại các vị trí khác nhau được liên kết với
nhau thông qua phương tiện viễn thông dưới sự điều khiển thống nhất của một hệ điều hành.
1.2.2 Các thực thể trong hệ phân tán
Hệ phân tán gồm 4 thực thể:
1.2.3 Đặc điểm của hệ phân tán
Đặc điểm cần nhấn mạnh của hệ là các hệ xử lý thông tin thành phần:
Không dùng chung hoặc chia sẻ bộ nhớ
HVTH: Nguyễn Thanh Trung Trang 5
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Không sử dụng chung đồng hồ xung nhịp
Chúng liên lạc với nhau thông qua mạng truyền thông
Mỗi hệ xử lý có bộ xử lý, bộ nhớ và hệ điều hành riêng của nó.
Thành phần của hệ phân tán bao gồm các hệ thống cục bộ trong đó mỗi một hay nhiều hệ
thống phát các yêu cầu thông tin còn các hệ khác trả lời các yêu cầu có liên quan đến phần dữ liệu
của mình. Nói một cách tổng quát là trong hệ luôn luôn diễn ra việc thực hiện các công việc do
các hệ thống yêu cầu. Các hệ thống truyền thống như hệ rời rạc hay tập trung không thể đáp ứng
nhanh chóng và chính xác các yêu cầu thông tin từ xa với lưu lượng thông tin lớn.
1.2.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán
Hệ tin học phân tán thực hiện hàng loạt các chức năng phức tạp nhưng chức năng cơ bản
nhất là đảm bảo cung cấp cho người sử dụng khả năng truy cập có kết quả đến các tài nguyên vốn
có và rất đa dạng của hệ thống như tài nguyên dùng chung.
Việc định nghĩa các tài nguyên của hệ như tài nguyên dùng chung sẽ mang đến cho hệ
những hiệu năng tốt trong khai thác ứng dụng:
- Tăng tốc độ bình quân trong tính toán xử lý.
- Cải thiện tình trạng luôn sẵn sàng của các loại tài nguyên.
- Tăng độ an toàn cho dữ liệu.
- Đa dạng hóa các loại hình dịch vụ tin học.
- Bảo đảm tính toàn vẹn của thông tin.

Tuy nhiên nó cũng dẫn đến hàng loạt các vấn đề khó khăn trong việc thiết lập hệ liên quan
việc cấp phát tài nguyên dùng chung cho các tiến trình.
Điều quan trọng là để đảm bảo các chức năng, yêu cầu nêu ra trên, hệ tin học phân tán cần
phải có các cơ chế kỹ thuật đủ mạnh nhằm đồng bộ hóa hoạt động của các tiến trình và sự trao đổi
thông tin với nhau sao cho hệ thống tránh được các trường hợp có thể dẫn đến bế tắc.
1.2.5 Các thao tác chuẩn của hệ phân tán
- Tiếp nhận và ghi yêu cầu chỉ dẫn.
- Dịch yêu cầu để có các thông tin cần thiết. Thực hiện một số công việc của hệ thống cục bộ
như kiểm tra quyền truy cập thông tin, lập hóa đơn dịch vụ.
- Gửi kết quả cho hệ thống đã phát yêu cầu.
HVTH: Nguyễn Thanh Trung Trang 6
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
2. LẬP TRÌNH MẠNG
2.1 Địa chỉ IP
Để hai hay nhiều máy tính kết nối được với nhau thì chúng phải có chung giao thức
(protocol). Trên Internet, việc hai máy có thể trao đổi được với nhau đa số đều dựa vào giao thức
TCP/IP, theo giao thức này mỗi máy sẽ được đặt cho một số riêng biệt được gọi là địa chỉ IP, các
số IP này là duy nhất và không máy nào được trùng nhau, khi muốn máy của mình có địa chỉ IP
để tham gia vào hệ thống Internet toàn cầu như một máy chủ ta phải đăng ký với tổ chức InterNIC
(Internet Network Information Center) để nhận một số IP riêng biệt. Tuy nhiên, để gần gũi với
con người và có ý nghĩa hơn người ta hay dùng tên thay cho địa chỉ IP, với mỗi hệ thống đều có
sự chuyển đổi trực tiếp từ tên thành địa chỉ IP thích hợp trước khi dữ liệu được gửi đi.
2.2 Giao thức TCP và giao thức UDP
Giao thức TCP (Transmission Control Protocol) gửi từng gói dữ liệu đi, nơi nhận theo giao
thức này phải có trách nhiệm thông báo và kiểm ra xem dữ liệu đã đến đủ hay chưa hoặc có lỗi
hay không có 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 và máy nhận.
Do phải đảm bảo dữ liệu được truyền chính xác và luôn duy trì kết nối nên sử dụng giao thức TCP
cần phải mất thêm một số tài nguyên của hệ thống.
Ngược lại giao thức UDP (User Datagram Prorocol) không đáng tin cậy lắm, không có sự
kết nối trước giữa máy gửi và máy nhận, giao thức này cho rằng máy nhận luôn ở trạng thái sẵn

sàng để tiếp nhận dữ liệu gửi đến. Nếu dữ liệu gửi đến bị lỗi trong quá trình truyền hay không
nhận được đầy đủ thì giao thức UDP không có thông tin phải hồi cho máy gửi. Tuy nhiên, giao
thức UDP không đòi hỏi nhiều tài nguyên của hệ thống
Do đặc tính của hai giao thức như vậy, nên giao thức TCP thường được sử dụng cho các
dịch vụ như truyền tập tin, các dịch vụ trực tuyến trên Internet đòi hỏi độ tin cậy cao… Giao thức
UDP thường được dùng trong các ứng dụng không đòi hỏi sự chính xác cao như: dịch vụ báo giờ,
dịch vụ báo thông tin…
2.3 Dịch vụ từ máy chủ (server) và khái niệm cổng (port)
Khi kết nối vào máy chủ, ta có thể yêu cầu máy chủ cung cấp nhiều dịch vụ khác nhau như:
tìm kiếm thông tin, gửi nhận E-mail… Mỗi dịch vụ đều có qui ước riêng cho các cách gửi/ nhận
dữ liệu. Giao thức TCP hay UDP chỉ chịu trách nhiệm đưa dữ liệu từ một máy tính này đến máy
tính khác, còn dữ liệu đó sẽ được gửi cho dịch vụ nào thì phải thông qua một qui định nữa là cổng
(port). Mỗi chương trình dịch vụ sẽ sử dụng một cổng khác nhau để truy xuất thông tin. Cổng là
một số nguyên từ 1 đến 16383. Máy chủ sẽ qui định cổng cho mỗi dịch vụ, thông tin giữa máy
HVTH: Nguyễn Thanh Trung Trang 7
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
khách và máy chủ phải sử dụng cổng tương ứng thì mới trao đổi thông tin được, hầu hết các
chương trình dịch vụ nổi tiếng đều có qui định cổng chuẩn riêng:
Dịch vụ Cổng
FTP 21
HTTP 80
Telnet 23
… …
Khi xây dựng một ứng dụng làm dịch vụ trên máy chủ ta phải chọn cho mình một cổng có
giá trị khác với những giá trị cổng mà những dịch vụ nổi tiếng đã sử dụng.
2.4 Giao tiếp theo mô hình client/server
2.4.1 Giao tiếp theo mô hình client/server
Có rất nhiều dịch vụ hỗ trợ trên Internet như E-mail, nhóm tin (newsgroup), chuyển tập tin
(file transfer), đăng nhập từ xa (remote login), truy tìm thông tin trên Web… Những mô hình này
được kiến trúc theo mô hình khách/chủ (client/server). Các chương trình ở máy khách (client) như

trình duyệt Web (web browser), chương trình gửi nhận E-mail…; các chương trình dịch vụ trên
máy chủ (server) như web server, mail server… sẽ xử lý những yêu cầu này và gửi kết quả ngược
về cho máy khách, thông thường một dịch vụ trên máy chủ phục vụ cho rất nhiều yêu cầu của
máy khách.
2.4.2 Các chương trình thường chạy trên máy client
Nhìn chung, các chương trình trên máy khách thực hiện những nhiệm vụ sau:
- Kết nối máy chủ.
- Nhận dữ liệu hay yêu cầu của người sử dụng.
- Gửi dữ liệu hoặc yêu cầu của người sử dụng đến máy chủ để lưu trữ hoặc xử lý.
- Trình bày kết quả trả về từ máy chủ cho người sử dụng.
2.4.3 Các chương trình thường chạy trên máy server
Các chương trình được thiết kế chạy trên máy chủ thực hiện những nhiệm vụ sau:
- Lắng nghe các kết nối từ máy khách gửi đến.
- Tiếp nhận những yêu cầu từ phía máy khách.
- Xử lý những yêu cầu từ phía máy khách.
- Gửi trả kết quả về cho máy khách.
HVTH: Nguyễn Thanh Trung Trang 8
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Như vậy, một chương trình ở trên máy chủ đóng vai trò như một dịch vụ (service) phục vụ
cho máy khách.
2.5 Lập trình đối tượng phân tán
Lập trình đối tượng phân tán là một trong những vấn đề nóng bỏng của công nghệ phần
mềm hiện nay, cộng đồng những người lập trình bắt đầu nghĩ rằng đối tượng có ở mọi nơi. Những
đối tượng này được hỗ trợ trao đổi với nhau theo những giao thức chuẩn trên mạng. Java là một
trong những ngôn ngữ đi tiên phong trong việc giải quyết vấn đề lập trình phân tán. Ví dụ, có một
đối tượng ở máy khách (client), ở đó người sử dụng cần phải điền dữ liệu vào mẫu báo cáo. Đối
tượng này có thể gửi một thông điệp cho đối tượng trên máy chủ (server) trên mạng để yêu cầu
cung cấp các thông tin cần thiết, đối tượng trên máy chủ truy cập vào các cơ sở dự liệu để có được
những thông tin mà máy khách yêu cầu và gửi lại cho đối tượng trên máy khách.
2.5.1 Thiết lập môi trường triệu gọi từ xa

Để thực hiện được việc triệu gọi từ xa thì ta phải chạy chương trình ở trên cả máy khách và
máy chủ.
Những thông tin cần thiết cũng phải được cài đặt tách biệt ở máy khách và máy chủ. Tuy
nhiên không nhất thiết phải có hai máy tính riêng biệt. Nhờ có máy ảo Java, khi mở cửa sổ DOS-
Prompt (môi trường DOS dưới Window) để chạy chương trình Java, chương trình này được xem
như chạy trên một máy (ảo) độc lập. Do đó, nếu hai chương trình Java chạy ở trong hai cửa sổ
riêng thì có thể xem như là chúng thực hiện trên hai máy khác nhau.
2.5.2 Mô hình tính toán Client/Server
Khi nói tới lập trình mạng ta thường nghĩ đến cách trao đổi giữa chương trình phục vụ
(Server) với chương trình khách (Client). Chương trình khách gửi một yêu cầu tới cho chương
trình phục vụ, và chương trình này xử lý dữ liệu để trả lời cho chương trình khách. Như vậy,
chương trình khách muốn gửi được yêu cầu thì trước hết phải tìm cách kết nối với Server. Server
có thể chấp nhận hay từ chối sự kết nối này. Một khi sự kết nối đã được thiết lập thì Client và
Server trao đổi với nhau thông qua Sockets. Các lớp trong gói java.net cung cấp các phương thức
để kết nối mạng và trao đổi tin giữa các máy với nhau theo mô hình Client/Server.
Socket chính là lớp (trừu tượng) thực hiện sự trao đổi giữa Server và Client. Java xem sự
trao đổi giữa Server và Client dựa trên Socket gần giống như các thao tác vào/ra, nghĩa là các
chương trình có thể đọc, ghi vào Socket dễ dàng như chúng đọc, ghi lên tệp dữ liệu. Lớp Server
tạo ra sự kết nối từ máy Client tới Server thông qua các phương thức tạo lập đối tượng.
Lớp ServerSocket dùng để tạo kết nối từ máy Server tới máy Client. Đối tượng của lớp này
được tạo ra trên Server và lắng nghe những kết nối từ máy Client theo cổng xác định. Server phải
HVTH: Nguyễn Thanh Trung Trang 9
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
chạy thường trực trước khi Client bắt đầu thực hiện. Server chờ sự yêu cầu kết nối của Client. Để
thiết lập được một Server, ta phải tạo ra một đối tượng, ví dụ ServerSocket của lớp Server, gắn nó
với một cổng nào đó và lắng nghe xem có Client nào cần kết nối hay không. Các Socket được xác
định tương ứng với địa chỉ của máy và cổng.
serverSock = new ServerSocket(Integer.parseInt(txtPort.getText()));
Trong đó port là số hiệu của cổng nằm giữa 0 và 1023. Cổng cho phép trao đổi tin giữa hai
chương trình.

Tất cả các lớp cơ bản cho việc giao tiếp và làm việc với mạng đều nằm trong gói Java.net,
như lớp socket API (Application Program Interface).
Socket API của Java cung cấp các công cụ để truy cập đến các giao thức mạng chuẩn được
sử dụng để giao tiếp giữa các Host trên mạng Internet. Socket API là công cụ mức thấp nhất,
chúng ta có thể sử dụng socket cho bất kỳ kiểu giao tiếp Client/Server nào và các ứng dụng ngang
hàng trên mạng nhưng chúng ta phải cài đặt các giao thức ứng dụng mức thấp để điều khiển và
thông dịch dữ liệu.
Socket là giao diện lập trình mức thấp cho các giao tiếp hướng mạng. Chúng gửi các dòng
dữ liệu giữa các ứng dụng có thể hoặc không nằm trên cùng một host. Gói java.net hỗ trợ một
giao diện hướng đối tượng, đơn giản hóa socket nên việc giao tiếp mạng trở nên dễ dàng hơn.
Java cung cấp các socket để hỗ trợ cho 3 lớp phân biệt của các giao thức bên dưới: Socket,
DatagramSocket, MulticastSocket.
Lớp Socket sử dụng giao thức hướng kết nối TCP/IP, đảm bảo dữ liệu không bị mất trong
quá trình truyền.
Lớp ServerSocket được sử dụng để thu nhận các kết nối từ client của server. ServerSocket
chỉ được tạo một lần và nhận các kết nối đến từ các client. Phương thức accept của ServerSocket
sẽ đợi cho đến khi có kết nối đến và trả về một đối tượng Socket.
3. CƠ SỞ DỮ LIỆU PHÂN TÁN
Một cơ sở dữ liệu phân tán là tập hợp nhiều cơ sở dữ liệu có liên đới logic và được phân bố
trên một mạng máy tính. Từ đó ta định nghĩa: Hệ quản trị cơ sở dữ liệu phân tán (DDMS) là một
hệ thống phần mềm cho phép quản lý các cơ sở dữ liệu phân tán và làm cho việc phân tán trở nên
“vô hình” đối với người sử dụng.
Môi trường của hệ quản trị cơ sở dữ liệu phân tán được mô tả qua hình I-4.
HVTH: Nguyễn Thanh Trung Trang 10
Trạm 5
Mạng truyền
dữ liệu
Trạm 5
Trạm 5
Trạm 5

Trạm 5
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Hình I-4: Môi trường của hệ cơ sở dữ liệu phân tán
HVTH: Nguyễn Thanh Trung Trang 11
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
CHƯƠNG II: KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
TRONG JAVA KẾT NỐI CƠ SỞ DỮ LIỆU VỚI JDBC
1. SƠ LƯỢC VỀ JAVA
Java là một ngôn ngữ lập trình đơn giản, hướng đối tượng, hỗ trợ lập trình phân tán, thông
dịch và biên dịch, mạnh mẽ bảo mật, cấu trúc độc lập, khả chuyển, hiệu quả và linh động.
Sự hỗ trợ lập trình hướng đối tượng là cốt lõi của Java. Mọi câu lệnh của Java đều tác động
đến các đối tượng mà đặc trưng của chúng là lớp (class), đối tượng là thể hiện (instance) của lớp
và phương thức (method) là một thao tác hoặc được thực hiện bởi chính nó, hoặc thực hiện khi có
yêu cầu từ môi trường (thông điệp từ đối tượng khác).
Java hỗ trợ các ứng dụng phân tán bằng các lớp mạng java.net, một chương trình Java có thể
là sự kết hợp của rất nhiều tập tin *.class nằm rải rác trên nhiều vùng vật lý khác nhau như ổ đĩa
hay các máy chủ ở những vị trí khác nhau trên Internet. Ngôn ngữ Java cung cấp các công cụ đủ
mạnh để thiết kế bất kỳ ứng dụng nào theo mô hình khách chủ (client/server) và phân tán
(distributed).
Java là một ngôn ngữ thông dịch trên cơ sở đã biên dịch trước thành bytecode nên nó trở nên
khả chuyển. Java được thiết kế cho mục đích đa nền, nên mã lệnh của chương trình Java sau khi
biên dịch là một dạng tập tin nhị phân được gọi là bytecode, có phần mở rộng là *.class, và nó
được triệu gọi thực thi trong máy ảo Java (JVM – Java Virtual Machine). JVM là một kiến trúc
của bộ xử lý nhưng thực thi theo cơ chế phần mềm thay vì phần cứng, chính vì lý do này mà
chương trình Java *.class có thể chạy như nhau trên nhiều hệ điều hành khác nhau.
Vì dùng trình thông dịch nên Java là một ngôn ngữ rất năng động. Trong khi thực thi, môi
trường Java có thể tự mở rộng để liên kết với các lớp mới nằm rải rác trên các máy chủ khác nhau.
Đó cũng là thuận lợi lớn của Java so với các ngôn ngữ lập trình khác.
2. RMI VÀ LẬP TRÌNH PHÂN TÁN HƯỚNG ĐỐI TƯỢNG TRONG JAVA
2.1 Khái niệm chung

Java RMI (Remote Method Invocation): Là một cơ chế gọi hàm từ xa đã được thực hiện và
tích hợp trong ngôn ngữ Java, là phương pháp lập trình hướng đối tượng.
RMI mang ý nghĩa triệu gọi phương thức từ xa – là cách thức giao tiếp giữa các đối tượng
Java có mã lệnh cài đặt (bao gồm phương thức và thuộc tính) nằm trên các máy khác nhau có thể
triệu gọi lẫn nhau.
HVTH: Nguyễn Thanh Trung Trang 12
Computer A
A2
A1
Computer C
C1
C2
Computer B
B1
C3
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Mô hình dưới đây cho thấy các đối tượng cho phép triệu gọi lẫn nhau. Trên máy A các đối
tượng A1, A2 gọi phương thức của nhau được gọi là triệu gọi phương thức cục bộ, đây là cách mà
lập trình hướng đối tượng truyền thống vẫn sử dụng. Tương tự, tương tác giữa C1, C2 ,C3 là
tương tác cục bộ.
Tuy nhiên, đối tượng Java có thể gọi phương thức của đối tượng nằm trên một máy khác dựa
vào giao thức triệu gọi từ xa RMI.
Hình II-1: Mô hình triệu gọi các đối tượng từ xa
2.2 Gọi phương thức từ xa và các vấn đề phát sinh
Triệu gọi phương thức từ xa phức tạp hơn triệu gọi phương thức cục bộ. Các đối tượng trên
hai Server khác nhau hoạt động trên hai tiến trình khác nhau cho nên việc tham chiếu biến, địa chỉ
đối tượng là khác nhau.
Ví dụ: Khi truyền con trỏ cho một phương thức ở xa, trên máy đang sử dụng sẽ tồn tại
nhưng trên Server khác (nơi đối tượng thực thi phương thức) sẽ không có bất kỳ vùng nhớ nào
được cấp phát cho con trỏ.

Trên máy cục bộ lời gọi hàm, các tham số truyền cho hàm thường được đặt vào ngăn xếp
(stack).
Tham số truyền cho phương thức của đối tượng ở xa được đóng gói và chuyển qua mạng để
đến được phương thức thực sự.
HVTH: Nguyễn Thanh Trung Trang 13
Computer A
A2
A1
Computer C
Computer B
B1
C1
C1_stub
B1_stub
C1_skel
B1_skel
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
2.3 Vai trò các lớp trung gian STUB và SKELETION
Hình vẽ dưới biểu thị: Gọi phương thức từ xa các đối tượng thông qua lớp trung gian. Đối
tượng Java trên hai máy khác nhau không gọi nhau trực tiếp mà thông qua lớp trung gian.
Lớp trung gian này tồn tại ở hai phía: Máy khách (nơi gọi phương thức của đối tượng ở xa)
và máy chủ (nơi đối tượng thực sự được cài đặt để thực thi mã lệnh của phương thức).
Phía máy khách lớp trung gian này được gọi lớp móc (stub).
Hình II-2: Gọi phương thức của các đối tượng thông qua lớp trung gian
Phía máy chủ lớp trung gian gọi lớp nối (skeletion).
Ví dụ: Đối tượng C1 được cài đặt chạy trên máy C. Trình Java sẽ tạo ra hai lớp trung gian
C1_Skel và C1_Stub. Lớp C1_Stub sẽ được đem về máy Computer A. Khi A1 trên máy computer
A gọi C1 nó sẽ chuyển lời gọi đến lớp C1_Stub. C1_Stub chịu trách nhiệm đóng gói tham số,
chuyển tham số qua mạng đến máy C. Trên máy C lớp nối C1_Skel sẽ nhận tham số chuyển vào
vùng không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức tương ứng. Kết quả

nếu có do phương thức của đối tượng C1 trả về sẽ được lớp C1_Skel đóng gói trả ngược về cho
C1_Stub. C1_Stub chuyển giao kết quả cuối cùng lại cho A1. Bằng cơ chế này, A1 luôn nghĩ rằng
nó đang hoạt động trực tiếp với đối tượng C1 ngay trên máy cục bộ. Hơn nữa, nhờ sự giúp đỡ của
lớp trung gian C1_Stub, khi kết nối mạng gặp sự cố lớp trung gian stub sẽ luôn biết cách thông
báo lỗi đến đối tượng A1.
Thực tế làm thế nào A1 tham chiếu được đến C1, một khi không có lớp C1 nào được cài đặt
ở máy A? C1_Stub trên máy A chỉ làm lớp nền trung gian chuyển đổi tham số và thực hiện các
HVTH: Nguyễn Thanh Trung Trang 14
Computer 1
CalculatorClient
Calculator_Stub
Computer 2
Calculator
Calculator_Skel
RMI
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
giao thức mạng, nó không phải là hình ảnh của đối tượng C1. Để làm được điều này, đối tượng
C1 cần cung cấp một giao tiếp interface tương ứng với các phương thức cho phép đối tượng A1
gọi nó trên máy A.
Stub thường trực trên máy khách, không ở trên máy chủ. Nó có vai trò đóng gói các thông
tin bao gồm:
Định danh đối tượng từ xa cần sử dụng
Mô tả về phương thức cần triệu gọi
Mã hoá các tham số và truyền cho Skel.
Stub sẽ chuyển những thông tin trên cho máy chủ. Ở phía máy chủ, đối tượng Skel nhận
thực hiện những công việc sau để gọi phương thức từ xa:
Giải mã các tham số
Xác định đối tượng để thực hiện lời gọi hàm tương ứng
Thực hiện lời gọi phương thức theo yêu cầu
Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ

Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách.
2.4 Cài đặt ứng dụng phân tán của RMI
Hình vẽ biểu thị: Triệu gọi đối tượng RMI giữa Server2 và Server1. Đối tượng
Calculator/Server2 sẽ được gọi bởi đối tượng CalculatorClient/Server1. Chúng ta xây dựng lớp
đối tượng Calculator với đặc tả interface như sau:
public interface Calculator {
public int addNumber(int x, int y);}
Phương thức addNumber() được dùng để cộng 2 tham số x, y với nhau và trả về kết quả cho
đối tượng nào gọi nó.
Hình II-3 Cài đặt ứng dụng phân tán RMI
HVTH: Nguyễn Thanh Trung Trang 15
Computer 1





Computer 2

CalculatorClient
Calculator
CalculatorImpl_Stub
CalculatorImpl
rmiregistry
CalculatorImpl_Skel
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
2.5 Cơ chế gọi hàm từ xa của các đối tượng RMI một cách tổng quát
1. Đối tượng cài đặt các phương thức và gọi hàm Naming.bind() để đăng ký với
rmiregistry/Server chủ
2. Đối tượng trên máy khách muốn gọi phương thức của đối tượng trên máy chủ trước hết

gọi hàm Naming.lookup() để truy tìm tham chiếu đến đối tượng ở xa theo tên.
3. Bộ đăng ký rmiregistry sẽ trả về tham chiếu đến đối tượng ở xa thông qua giao tiếp
interface mà đối tượng ở xa cung cấp.
4. Dựa vào interface đối tượng ở máy khách sẽ gọi các phương thức của đối tượng trên máy
chủ.

Hình II-4: Cơ chế gọi hàm từ xa của các đối tượng RMI
5. Khi một phương thức được gọi, lời gọi sẽ được chuyển tiếp đến lớp trung gian _Stub. Xử
lý chuyển tham số của phương thức gọi đến _Skel trên máy chủ.
6. Lớp trung gian _Skel trên máy chủ trực tiếp yêu cầu đối tượng thực thi phương thức và
chuyển trả kết quả về cho máy khách.
7. Đặc tả lớp giao tiếp của đối tượng (Calculator.java)
8. Dựa vào đặt tả cài đặt chi tiết đối tượng (CalculatorImpl.java).
9. Biên dịch đối tượng (CalculatorImpl.class) và tạo ra 2 đối tượng trung gian
(CalculatorImpl_Stub và CalculatorImpl_Skel).
10. Viết chương trình (CalculatorServer.class) cài đặt đối tượng trên máy chủ. Lưu ý gọi
phương thức UnicasRemoteObject.exportObject() để thông báo cho Java nhận dạng được sự tồn
tại của đối tượng ở dạng truy xuất được từ xa bởi các đối tượng khác.
HVTH: Nguyễn Thanh Trung Trang 16
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Hình II-5: Đăng ký các đối tượng trên RMIRegistry
11. Sử dụng lớp giao tiếp (Calculator.class) và CalculatorImpl_Stub từ máy khách để gọi
phương thức của đối tượng trên máy chủ.
Khi chạy chương trình Java dựa vào biến môi trường CLASSPATH để truy tìm các tâp tin
.class. Chương trình minh họa bao gồm các tập tin sau:
Tên lớp Mục đích Sử dụng trên
Calculator.class
CalculatorImpl.class
CalculatorImpl_Skel.class
CalculatorImpl_Stub.class

CalculatorServer.class
CalculatorClient.class
Lớp đặc tả phương thức giao tiếp của đối
tượng.
Phần cài đặt của bản thân đối tượng.
Lớp giao tiếp trung gian do trình biên
dịch rmic.exe tạo ra.
Lớp giao tiếp trung gian do trình biên
dịch rmic tạo ra.
Chương trình dùng chạy trên máy chủ
dùng tạo ra đối tượng và đăng ký đối
tượng với rmiregistry.
Chương trình chạy trên máy khách gọi
các phương thức của đối tượng trên máy
chủ.
Máy khách và máy chủ.
Máy chủ
Máy chủ
Máy khách và máy chủ
Máy chủ
Máy khách
2.6 Bộ đăng ký (Registry)
Cơ chế làm việc của máy ảo Java khi đăng ký và gọi đối tượng giữa trình khách và chủ.
Trên thực tế nếu hoạt động thực sự qua mạng thì chỉ có thể tách ra làm hai máy vật lý. Hình
dưới là cơ chế hoạt động của các máy ảo Java trên mô hình máy mạng vật lý thực sự. Máy khách
có địa chỉ IP truy xuất đến bộ đăng ký rmiregistry của máy chủ có địa chỉ IP khác. Trên máy chủ
có 2 máy ảo hoạt động. Máy ảo A chạy chương trình rmiregistry và máy ảo B chạy phần cài đặt
của đối tượng.
HVTH: Nguyễn Thanh Trung Trang 17
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn

Hình II-6: Cơ chế hoạt động của máy ảo Java trên mô hình mạng vật lý
3. GIỚI THIỆU JDBC (Java DataBase Connectivity)
JDBC của Sun là một công cụ phổ dụng hỗ trợ việc xây dựng những ứng dụng tích hợp, dựa
trên những CSDL khác nhau được thiết lập ở nhiều nơi khác nhau trên mạng. JDBC là giao diện
để kết nối với CSDL, gồm một tập các lớp đối tượng hỗ trợ để xử lý CSDL quan hệ và để tương
tác với các nguồn dữ liệu khác nhau.
JDBC API (Application Programming Interface) được JavaSoft phát triển và là một phần
của tất cả các cài đặt ứng dụng của JVM. JDBC API cung cấp các chức năng cơ bản để truy nhập
đến hầu hết các CSDL thông qua SQL như:
- Thực hiện các truy vấn vào một CSDL.
- Xử lý kết quả truy vấn.
- Xác định các thông tin về cấu hình hệ thống.
JDBC định nghĩa các đối tượng API và các hàm để tương tác với những CSDL. Chương
trình ứng dụng Java kết nối các CSDL phải được thực hiện theo các bước sau:
1. Tạo đối tượng kết nối vào CSDL bằng cách gọi hàm getConnection() để nhận đối tượng
của lớp Connection.
2. Tạo ra một đối tượng của lớp Statement để xử lý câu lệnh.
3. Truyền tham số cho các lệnh SQL trong các hệ quản trị CSDL và các đối tượng xử lý câu
lệnh đó.
4. Kết quả truy vấn là đối tượng của lớp ResultSet.
Sau đây là một số giao diện, một số lớp trong gói java.sql và một số hàm chính của chúng.
HVTH: Nguyễn Thanh Trung Trang 18
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
3.1 Lớp DriverManager
Lớp DriverManager chịu trách nhiệm nạp các bộ điều khiển JDBC và tạo ra sự kết nối giữa
các đối tượng của CSDL. Trước khi sử dụng một bộ điều khiển (Driver) thì nó phải đăng ký với
DriveManager nhờ hàm forName() của lớp Class:
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Class.foeName(“com.oracle.jdbc.OracleDriver”);

} catch (ClassNotFoundException e){
… //xử lý ngọai lệ
}
Sau đó chương trình phải kết nối với CSDL bằng cách sử dụng
DriverManager.getConnection(jdbc:driver:databaseName)
3.2 Giao diện Connection
Giao diện java.sql.Connection phục vụ cho việc kết nối các CSDL
Tạo một đối tượng con để kết nối:
Connection con = DriverManager.getConnection(“url”,”username”,”password”);
Trong đó: url là jdbc:driver:databaseName
Một số hàm:
Public abstract void commit() throws SQLException; ủy quyền thay đổi những kết quả
đã cập nhật, nếu không thì những thay đổi trong quá trình cập nhật CSDL sẽ không được thực thi.
Public abstract boolean getAutoCommit() throws SQLException;
Public abstract void setAutoCommit(boolean autoCommit) throws SQLException; khôi
phục các thông tin nếu giao dịch không thực hiện thành công.
3.3 Giao diện Statement
Giao diện Statement để thực hiện các câu lệnh của SQL.Trong Statement có các hàm:
execute(), executeQuery(), executeUpdate(),
executeBatch()…. nhận các tham đối là các câu lệnh của SQL để thực hiện như:
CREATE, UDATE, INSERT… và có thể xử lý theo lô.
HVTH: Nguyễn Thanh Trung Trang 19
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Tạo đối tượng của Statement:
Statement stmt = con.createStatement();
kết quả truy vấn được từ CSDL chỉ cho phép đọc.
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
kết quả truy vấn được từ CSDL cho phép thay đổi dữ liệu.
Hàm addBatch(): cho phép thực hiện cập nhật các trường dữ liệu cùng một lúc.

Hàm executeBatch(): chuyển các lệnh SQL thực hiện theo lô và trả về số bản ghi đã được
cập nhật theo lô.
Trong Statement có các hàm: execute(), executeQuery(), executeUpdate(),
executeBatch()…. nhận các tham đối là các câu lệnh của SQL để thực hiện như:
CREATE, UDATE, INSERT… và có thể xử lý theo lô.
3.4 Giao diện ResultSet
Kết quả của các câu lệnh xử lý với SQL được lưu trữ và xử lý thông qua đối tượng của
ResultSet. Chẳng hạn:
ResultSet rs = stmt.executeQuery(“SELECT * FROM SANPHAM”);
đối tượng rs của ResultSet chứa những kết quả truy vấn vào CSDL SANPHAM theo câu
lệnh SELECT của SQL.
Hàm getString(“fieldname”), getInt(“fieldname”), : đọc giá trị các trường dữ liệu.
Hàm boolean next(): chuyển sang hàng tiếp theo
HVTH: Nguyễn Thanh Trung Trang 20
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
CHƯƠNG III: CHƯƠNG TRÌNH ĐẢM BẢO GẮN BÓ DỮ LIỆU KHI
CẬP NHẬT TRONG CÁC CƠ SỞ DỮ LIỆU PHÂN TÁN TẠI CÁC
NGÂN HÀNG
1. ĐẶT VẤN ĐỀ
Trong thực tế hiện nay hầu hết các hệ thống ngân hàng đều được xây dựng với hệ thống cơ
sở dữ liệu tập trung. Việc truy vấn trên cơ sở dữ liệu tập trung có những thuận lợi và khó khăn
nhất định. Trong những khó khăn đó khó khăn lớn nhất phải tính đến đó chính là việc giải quyết
tốc độ truy cập vào một cơ sở dữ liệu lớn, tập trung. Có nhiều biện pháp giải quyết đã được đặt ra
và một trong những giải pháp đó chính là việc phân tán cơ sở dữ liệu đặt trên nhiều vị trí khác
nhau. Việc truy vấn trên các cơ sở dữ liệu này thông qua mạng truyền thông. Trong bài tiểu luận
này chúng em xin giả lập một hệ 3 Server với 3 cơ sở dữ liệu phân tán tương ứng để mô phỏng
cho bài toán đảm bảo gắn bó dữ liệu khi cập nhật trong cơ sở dữ liệu phân tán tại các ngân hàng.
2. XÂY DỰNG CƠ SỞ DỮ LIỆU PHÂN TÁN
Bài toán xây dựng một hệ cơ sở dữ liệu phân tán được đặt ở vị trí khác nhau, tương ứng với
ba Server. Giả sử ba vị trí được đặt là: Hà Nội, Đà Nẵng và Sài Gòn ta có ba cơ sở dữ liệu tương

ứng đó là: HNBank Database, DNBank Database và SGBank Database.
Khi phân mảnh dữ liệu ra các vị trí ta dựa vào tiêu chí phân tán là mã số tài khoản của
(AccID). Những tài khoản nằm ở Server Hà Nội, Đà Nẵng, Sài Gòn có mã số tài khoản lần lượt
bắt đầu bằng hai ký tự: “HN”, “DN”, “SG”.
Ba cơ sở dữ liệu tương ứng:
Hình III-1: HNBank Database
Hình III-2: DNBank Database
HVTH: Nguyễn Thanh Trung Trang 21
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Hình III-3: SGBank Database
3. XÂY DỰNG BỘ PHÂN PHỐI KẾT NỐI SERVER
Bài toán xây dựng một bộ điều phối kết nối đến các Server. Bộ điều phối kết nối căn cứ vào
mã số tài khoản do người sử dụng cung cấp mà thực hiện tự động kết nối đến Server cần thiết để
truy vấn. Cụ thể ở đây khi phân tích mã số tài khoản mà nhận thấy mã số tài khoản được bắt đầu
bằng xâu: “HN” thì kết nối đến Server ở Hà nội, “DN” thì kết nối đến Server ở Đà Nẵng, “SG” thì
kết nối đến Server ở Sài Gòn.
Yêu cầu dịch vụ từ người dùng ở đây được mô tả bằng việc xem tài khoản, cộng hoặc trừ tài
khoản. Khi muốn xem tài khoản người sử dụng cần cung cấp mã số tài khoản và mã Pin, khi
muốn thực hiện gửi vào hoặc rút ra từ tài khoản người sử dụng cần cung cấp thêm số tiền. Yêu
cầu sẽ được gửi đến các Server, yêu cầu Server kiểm tra tài khoản gửi đến thực hiện giao dịch và
gởi trả lại số tiền hiện tại trong tài khoản.
Hình III-4: Mô hình hệ thống ngân hàng chạy mạng với CSDL phân tán
4. XÂY DỰNG CÁC PHƯƠNG THỨC TRÊN SERVER
Trên các Server xây dựng các phương thức: Kết nối cơ sở dữ liệu, phương thức truy vấn tài
khoản và phương thức cập nhật tài khoản. Các phương thức này khi cần thực hiện thì được triệu
gọi từ Client.
- Phương thức kết nối:
public DNBankImpl()throws RemoteException{
try{
HVTH: Nguyễn Thanh Trung Trang 22

Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:Driver={SQL
Server};Server=THUY;Database=DNBank");
stmt=con.createStatement();
}
catch (Exception ex){
System.out.println("Error Connection" + ex);
}
}
- Phương thức truy vấn: với tham số vào là số tài khoản và mã pin, trả về số dư tài khoản:
public int SelectData(String Valid, String Valpin) throws RemoteException
{ …

}
- Phương thức cập nhật vào Cơ sở dữ liệu: với tham số vào là mã sô tài khoản và mã pin:
public void UpdateData(String Valid, String Valpin, int ValAmount) throws
RemoteException
{ …

}
5. XÂY DỰNG GIAO DIỆN PHÍA CLIENT
Ở phía Client xây dựng một giao diện cho phép người sử dụng nhập vào số tài khoản, số Pin
và số tiền thực hiện giao dịch.
Xây dựng chức năng cho phép người sử dụng chọn lựa giao dịch: Xem số dư tài khoản, gửi
tiền vào tài khoản và rút tiền.
HVTH: Nguyễn Thanh Trung Trang 23
Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
Hình III-5: Giao diện phía Client
HVTH: Nguyễn Thanh Trung Trang 24

Lập trình mạng nâng cao GVHD: PGS. TS Lê Văn Sơn
KẾT LUẬN
Được sự giúp đỡ tận tình của thầy giáo cũng như các bạn trong lớp và sự nỗ lực của bản thân
trong tiểu luận này em cũng đã đạt được một số kết quả nhất định:
 Trình bày được các khái niệm cơ bản của hệ thống phân tán, lập trình mạng cũng
như cơ sở dữ liệu phân tán.
 Trình bày được kỹ thuật lập trình mạng phân tán trong Java.
 Nắm bắt được kỹ thuật kết nối bằng JDBC. Thực hiện kết nối ứng dụng chạy
trong môi trường máy ảo Java và hệ quản trị cơ sở dữ liệu SQL Server
 Ứng dụng các kỹ thuật lập trình để tiến hành mô phỏng bài toán đảm bảo gắn bó
dữ liệu khi cập nhật trong các cơ sở dữ liệu phân tán tại các ngân hàng.
Tuy nhiên do thời gian và khả năng còn hạn chế nên đề tài chỉ dừng lại ở mức độ tìm hiểu,
chưa triển khai điều khiển trên các hệ thống thực.
Tôi xin chân thành cảm ơn ý kiến đóng góp của thầy giáo PGS. TS.Lê Văn Sơn và các bạn
quan tâm để đề tài được hoàn thiện hơn.
HVTH: Nguyễn Thanh Trung Trang 25

×