Có thể nói RMI là một mô hình khá rộng lớn trong lập trình Java và sau đây là một số kỹ thuật điển hình: * Vai trò của các lớp trung gian: Nh- chúng ta đã gặp trong ph-ơng thứcgọi trên m
Trang 1Ch-ơng I TổNG QUAN Về đề TàILập trình 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
Một trong những vấn đề đ-ợc giới lập trình quan tâm sâu sắc trong lập trình mạng nói chung và lập trình cơ sở dữ liệu nói riêng, trong đó có một
ph-ơng thức khá quan trọng là RMI (Remote Method Invoke : tạm dịch là
ph-ơng thức gọi từ xa)
Thông th-ờng mỗi ch-ơng trình chúng ta có thể viết d-ới dạng thủ tục
(Procedure) hay hàm (Function) mà các hàm hay thủ tục này đ-ợc nạp thẳng
vào ký ức và thực thi ngay trên máy cụ bộ Điều mà các lập trình viên quan tâm ở đây không phải là cách cài đặt thủ tục hay hàm mà chính là đối số trả về của chúng là nh- thế nào? Câu hỏi đặt ra ở đây là liệu có ph-ơng pháp nào để gọi các hàm hay thủ tục từ một máy bấy kỳ nào đó trong cùng mạng để sử dụng ngay trên máy thực thi đ-ợc không? Đây chính là nội dung chính của lập trình mã lệnh và cũng là yếu tố chính trong lập trình phân tán đối t-ợng bằng RMI – mang ý nghĩa triệu gọi ph-ơng thức từ xa là cách giao tiếp giữa các đói t-ợng Java có mã lệnh cài đặt (bao gồm các ph-ơng ph-ơng thức, thuộc tính và không loại trừ các ph-ơng thức gọi cơ sở dữ liệu) nằm trên các máy khác nhau
có thể triệu gọi lẫn nhau
RMI đã rất thành công trong việc t-ơng tác các ứng dụng từ giao diện ng-ời dùng Chúng ta có thể định nghĩa các ph-ơng thức mà bao gồm sự t-ơng tác giao diện ng-ời dùng và một khác hàng (Client) và sau đó tạo các t-ơng tác kết nối bằng RMI
Trang 2* Mô hình phân tán đối t-ợng
Hình 1.1 cho ta mô hình triệu gọi đối t-ợng phân tán
Theo thói quen thông th-ờng chúng ta đã lập trình theo phong cách gọi qua lại giữa các môđun trên máy cục bộ Với RMI trong java ta có thể thực hiện ph-ơng thức gọi qua lại giữa các máy khác nh- biễu diễn trên
Việc gọi ph-ơng thức từ xa thoạt nhìn có vẽ đơn giản nh-ng thực tế lại phức tạp hơn nhiều ph-ơng pháp triệu gọi cục bộ
* Các kỹ thuật lập trình phân tán đối t-ợng bằng RMI
Có thể nói RMI là một mô hình khá rộng lớn trong lập trình Java và sau
đây là một số kỹ thuật điển hình:
* Vai trò của các lớp trung gian:
Nh- chúng ta đã gặp trong ph-ơng thứcgọi trên máy cục bộ là một ph-ơng pháp gọi trực tiếp nh-ng điều này không thể dùng trong mô hình nhiều máy gội lẫn nhau nên chúng ta phải dùng qua các lớp trung gian: STUB, SKEL
- Chuyển tham số trong các lời gọi ph-ơng thức từ xa
- Tuần tự hóa (Seriazable) đối t-ợng
C1
C3
C2
Computer B
A1
Hình 1.1
Trang 3- Kỹ thuậy gọi đối t-ợng từ xa bằng ph-ơng thức động (Dynamic Method Invoke)
- Tự động kích hoạt đối t-ợng từ xa( Activation)
- Trình mồi nạp từ xa
- và một số kỹ thuật khác
Tìm hiểu về cơ sở dữ liệu phân tán
Trang 4Ch-ơng I Cơ sở ý thuyết
II.1 Giới thiệu
Java là một ngôn ngữ lập trình do công ty Sun Microsystems phát triển vào đầu thập kỷ 1990 Xuất phát điểm của ngôn ngữ này là một dự án nghiên cứu của công ty trong đó lúc đầu các nhà nghiên cứu dùng C++ Ngay sau đó nhóm nghiên cứu đã cho rằng họ cần một thứ gì đó tốt hơn thế Các nhà nghiên cứu này đều là các lập trình viên xuất sắc, do vậy họ đã bắt tay ngay vào việc xây dựng một ngôn ngữ lập trình mới bằng cách tận dụng các ý t-ởng hay của các ngôn ngữ lập trình khác Với những điểm mạnh nh- h-ớng đối t-ợng, tính khả chuyển cao, không phụ thuộc vào môi tr-ờng xử lý (phần cứng máy tính
và hệ điều hành), có khả năng biên dịch, hỗ trợ các th- viện cho lập trình các ứng dụng CSDL phân tán và Internet, dễ truyền thông, Java đã và sẽ trở thành một ngôn ngữ mạnh trong hiện tại và t-ơng lai
Java là một ngôn ngữ lập trình còn khá mới mẻ, nh-ng nó lại có một số
đặc điểm khá mạnh và hỗ trợ việc lập trình trên Web tốt nên cũng đã đ-ợc nhiều ng-ời lập trình sử dụng Java là một NNLT h-ớng đối t-ợng, nó thừa h-ởng khá nhiều đặc tính từ C và C++ nên việc học nó sẽ không khó khăn gì
đối với những ng-ời đã làm việc với C/C++, thậm chí nó còn đơn giản hơn Java đ-ợc xây dựng chủ yếu trong bộ công cụ phát triển Java (Java Developers Kit - JDK ) do Sun cung cấp bao gồm một số ch-ơng trình tiện ích cho phép bạn biên dịch, bắt lỗi và tạo tài liệu cho một ứng dụng Java và các th- viện chuẩn của nó Hiện nay trên thị tr-ờng đang có rất nhiều môi tr-ờng pháp triển Java của hãng thứ ba rất tiện lợi (nh- Visual J++, Symantec Cafe, ), nh-ng tất cả các ch-ơng trình này đều dựa trên nền JDK
Các trình tiện ích của JDK bao gồm:
javac : Bộ biên dịch Java: Làm nhiệm vụ chuyển mã nguồn Java sang bytecode
java Bộ thông dịch Java: Thực thi các ứng dụng Java trực tiếp từ tập tin lớp (class)
appletviewer : Một trình thông dịch Java thực thi các Java applet từ tập tin HTML
Trang 5javadoc : Tạo tài liệu dạng HTML từ mã nguồn cùng với các chú thích bên trong
jdb Java debuger: Cho phép bạn thực hiện từng dòng trong ch-ơng trình, đặt các điểm dừng (breakpoint), xem giá trị các biến
javah : Tạo ra tập tin header của C cho phép C gọi hàm Java hoặc ng-ợc lại
javap : Trình dịch ng-ợc java (disassembler): Hiển thị các hàm và dữ liệu truy cập đ-ợc bên trong một tập tin lớp đã dịch Nó cũng cho phép hiển thị nghĩa của bytecode
Ngày nay các nhà phát triển phần mềm đã xây dựng thêm rất nhiều nhánh mới nh- JavaMail( Java Th- Tín), JavaTAPI (Java Viển Thông),
II.2 Các Đặc Điểm Cơ Bản Của Java
H-ớng đối t-ợng : Lập trình h-ớng đối t-ợng (OOP) là ph-ơng thức viết các ứng dụng dễ bảo trì, dễ nâng cấp và đặc biệt là có thể tái sử dụng các mã lệnh Java là một ngôn ngữ h-ớng đối t-ợng, do đó nó có đầy
đủ các đặc tính trên Ngoài ra, th- viện lớp Java cung cấp khá đầy đủ cho ng-ời lập trình để bắt đầu một dự án mới
Java có khả năng đa luồng : Các ứng dụng viết bằng Java có thể
có nhiều tiến trình đ-ợc xử lý cùng một lúc Một ứng dụng đơn luồng chỉ
có thể thực hiện một tác vụ tại một thời điểm: Giả sử ứng dụng đang bận lấy từ trên mạng xuống một tập tin mất vài phút, trong thời gian này ứng dụng không thể làm các việc khác nh- vẽ lại màn hình Với ứng dụng viết bằng Java, bạn có thể tạo hai tiến trình song song làm việc: một tiến trình nạp tập tin, một tiến trình khác làm nhiệm vụ cập nhật màn hình
Java cung cấp khả năng lập trình trên mạng : cung cấp các công
cụ cũng cho phép thực hiện các phiên kết nối làm việc dễ ràng giữa các máy tính trong mạng sử dụng giao thức TCP/IP Các kết nối này dựa trên cặp giá trị địc chỉ IP của máy và địa chỉ cổng TCP của dịch vụ (cặp giá trị này gọi là một socket) Có hai chế độ kết nối chính: Datagram và Client/Server
Trang 6II.3 Liên lạc trên Internet:
Giao thức: TCP / IP:
Khi hai hay nhiều máy tính nối mạng, chúng phải dùng một bộ quy -ớc chung để có thể hiểu và nói chuyện đ-ợc với nhau Một bộ quy -ớc nh- vậy hay còn gọi là 1 giao thức Trên Internet ngày nay, giao thức đ-ợc dùng phổ biến nhất là TCP / IP
Theo giao thức này, mỗi máy đ-ợc đặt cho 1 số riêng biệt gọi là địa chỉ
IP (có vai trò t-ơng tự nh- số điện thoại)
Chẳng hạn máy tính Web server của Microsoft có địa chỉ IP là: 207.46.230.219 Các số này là duy nhất, không có bất kỳ 1 máy nào đ-ợc phép
có địa chỉ IP trùng nhau trên toàn thế giới
Khi một máy muốn tham gia vào Internet với t- cách là một máy chủ (host hay Server) thì cần đ-ợc đăng ký với một tổ chức quốc tế gọi là InterNIC (Internet Network Information Center) để đ-ợc cấp cho một địa chỉ IP
Những con số của địa chỉ IP rất khó nhớ và không thân thiện cho ng-ời dùng Thay vào đó ng-ời ta đã đ-a ra khái niệm tên vùng Thực ra tên vùng chính là ánh xạ của địa chỉ IP
Vd: Máy chủ Microsoft ở địa chỉ IP:
207.46.230.219 t-ơng ứng với tên www.microsoft.com
Một địa chỉ IP có thể đ-ợc đặt nhiều tên khác nhau nh-ng một tên chỉ có thể t-ơng ứng với 1 IP
Tên của máy chủ còn đ-ợc gọi là tên miền (domain name) bởi vì chúng
đ-ợc đặt theo thứ tự phân cấp của tên lãnh thổ, vùng, tổ chức Mỗi nhóm phân cấp cách nhau bởi 1 dấu (.)
Ví dụ: Java.sun.com
Tên MT Tên tổ chức Tên vùng
* Giao tiếp trên mạng theo mô hình khách/chủ :
Theo mô hình này thì mỗi dịch vụ trên mạng sẽ đ-ợc thực hiện bởi một cặp ch-ơng trình Một ch-ơng trình đóng vai trò là nhà cung cấp dịch vụ, đ-ợc
Trang 7gọi là ch-ơng trình Server Một ch-ơng trình đóng vai trò là ng-ời yêu cầu dịch vụ hay còn gọi là client (khách hàng) Một server cần phải phục vụ đ-ợc cho nhiều client Client/Server chỉ là khái niệm mang tính Logic Nghĩa là cả hai ch-ơng trình đều có thể cùng chạy trên một máy vật lý
Có rất nhiều ví dụ về những dịch vụ dựa trên mô hình client / server nh- vậy Chẳng hạn nh-: trình duyệt và Web server, trình gởi mail và Mail server
II.4 Mô hình ứng dụng 3_tầng(3_tier application) :
Sự môđun hoá là một xu thế bao trùm trên nhiều ngành kỹ thuật hiện nay Trong ngành CNTT thì xu thế đó thể hiện rất đậm nét
Tr-ớc tiên là sự môđun hoá phần cứng ý t-ởng này đã đ-ợc định h-ớng xuyên suốt trong quá trình phát triển của phần cứng máy tính Ngay từ những bản thiết kế máy tính đầu tiên ng-ời ta đã biết phân tách phần Công việc ra khỏi phần l-u trữ và hiển thị Quá trình môđun hoá diễn ra theo h-ớng ngày càng triệt để hơn Ngày nay trên một thiết bị nhỏ nh- Card âm thanh chẳng hạn ta cũng có thể trông thấy những môđun nhỏ hơn nữa đ-ợc sản xuất từ những hãng khác nhau
Sự môđun hoá có một ý nghĩa rất quan trọng Nó tạo thuận lợi cho việc bảo trì, sửa chữa cũng nh- đổi mới, phát triển sản phẩm
ý t-ởng rất giá trị này đã nhanh chóng đ-ợc ng-ời ta áp dụng vào lĩnh vực phần mềm Cũng nh- ở phần cứng, trong lĩnh vực phát triển phần mềm xu thế môđun hoá diễn ra theo h-ớng ngày càng sâu sắc, triệt để hơn
Nằm trong xu h-ớng lớn đó, từ lâu nay ng-ời ta đã sử dụng mô hình ứng dụng 2 lớp Theo mô hình này thì một ứng dụng đ-ợc chia làm 2 môđun là môđun ứng dụng và môđun cơ sở dữ liệu Trong môđun ứng dụng bao gồm cả phần Logic Công việc và phần trình bày (th-ờng gọi là phần giao diện ng-ời dùng)
Trong các ứng dụng nhỏ thì mô hình này không đặt ra vấn đề gì cả, bởi vì lúc đó mỗi ứng dụng chỉ thực hiện một tiến trình Công việc đặc thù
Trong các hệ thống lớn thì nhiều ứng dụng có thể cùng sử dụng những thành phần Logic Công việc nào đó Mỗi khi cần thay đổi Logic công việc thì buộc phải sửa đổi tất cả các ứng dụng Điều này gây ra những khó khăn và lãng phí
Trang 8Để giải quyết vần đề này ng-ời ta đã đ-a ra giải pháp mô hình ứng dụng
3 lớp Từ 2 lớp chuyển sang 3 lớp hay nhiều lớp, đây lại là một minh chứng cho xu thế môđun hoá
Theo mô hình 3 lớp thì một ứng dụng sẽ đ-ợc chia làm 3 môđun (hay 3 lớp) là : trình bày ứng dụng, lớp Logic công việc và lớp CSDL
Công nghệ Rmi chính là ph-ơng pháp tuyệt hảo để xây dựng các ứng dụng 3 lớp trên mạng bằng ngôn ngữ Java Với Rmi có thể dễ dàng tách phần Logic công việc ra khỏi ứng dụng ứng dụng của bạn có thể chạy trên máy này còn phần Logic công việc của nó có thể nằm đâu đó trên mạng toàn cầu Đây
là một ý t-ởng rất thú vị và hiện đang là đề tài nóng bỏng của công nghệ phần mềm
Trang 9II.5 Các đặc tr-ng của công nghệ Java RMI
Đúng nh- tên gọi của nó, mục đích của công nghệ RMI là đ-a ra giải pháp cho phép một số đối t-ợng Java đang nằm trên máy ảo Java này có thể triệu gọi đến các ph-ơng thức của một đối t-ợng Java đang nằm trên một máy
ảo Java khác (tất nhiên là JVM này có thể nằm trên một máy tính khác trên mạng)
Bằng cách này, một đối t-ợng có thể nhờ một đối t-ợng "chuyên nghiệp" trên máy khác tính toán hộ cho mình một khâu đoạn nào đó trong ch-ơng trình, sau đó nhận về kết quả và tiếp tục tiến trình xử lý Điều này giống nh- một công ty sử dụng nhiều chi tiết đ-ợc chế tạo bởi các công ty khác để tạo ra sản phẩm của mình
Mô hình ứng dụng phân tán nh- trên giúp ta phối hợp sức mạnh của nhiều máy tính để tạo nên sức mạnh tổng thể, một quy mô mới có tính kinh tế cao hơn
Trong mô hình nay, đối t-ợng yêu cầu dịch vụ từ xa đ-ợc gọi là RMI client Còn đối t-ợng cung cấp dịch vụ gọi là RMI Server
Do hai đối t-ợng năm trên hai máy khác nhau nên nó hoạt động trên hai tiến trình hay hai không gian địa chỉ khác nhau Ví dụ, khi ta truyền con trỏ cho một ph-ơng thức ở xa, trên máy client thì con trỏ này tồn tại nh-ng trên máy server (nơi có đố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 giành cho con trỏ Lời gọi một ph-ơng thức cục bộ (trên cùng một máy) luôn trả về kết quả trong khi lời gọi các ph-ơng thức từ xa phải thông qua kết nối mạng và lúc nào cũng có thể bị ngắt quảng do gặp sự cố Để giải quyết khó khăn trên, đối t-ợng client Rmi sẽ gọi đến đối t-ợng server Rmi thông qua 2 lớp trung gian Một lớp nằm trên máy client gọi là lớp móc câu (stub) và một lớp khác nằm trên máy server gọi là lớp cần câu (skeleton) Lớp stub đóng vai trò nh- là một ng-ời đại diện toàn quyền cho một "công ty" chuyên cung cấp dịch vụ, đ-ợc cử đến làm việc ở máy client Đối t-ợng nào ở máy này có nhu cầu "mua" các dịch vụ của "công ty" thì sẽ đến đăng ký ở ng-ời đại diện stub Stub sẽ liên lạc với trụ sở "công ty" của mình để thực hiện yêu cầu Nh-ng sự liên lạc này còn phải thông qua một ng-ời "th- ký" nữa tên
là skeleton nằm ở máy server
Để một đối t-ợng có khả năng "phục vụ từ xa" cho đối t-ợng khác thì đối t-ợng đó nhất thiết phải đ-ợc tạo ra từ một lớp thi công giao diện xa (remote
Trang 10interface) nào đó Các đối t-ợng client sẽ "nhờ vả" đối t-ợng server thông qua giao diện ấy Các yêu cầu tính toán đ-ợc diễn đạt bởi đặc tả của các ph-ơng thức trong lớp interface Còn chi tiết cài đặt của các ph-ơng thức này lại đ-ợc thực hiện trong lớp thi công giao diện Nhờ sự tách biệt lớp Interface và lớp Interface Implement (thi công giao diện) nên ng-ời ta có thể tuỳ ý sửa đổi, nâng cấp các tính năng trong lớp thi công mà toàn hệ thống không hề bị ảnh h-ởng
Đây chính là nguyên lý để tách tầng Logic công việc ra khỏi phần trình bày ứng dụng trong mô hình ứng dụng 3_tầng đã đề cập ở trên
Nh- vậy, việc xây dựng một ch-ơng trình Java RMI đ-ợc triển khai qua các b-ớc sau:
1 Xây dựng giao diện xa chứa đặc tả chứa các ph-ơng thức gọi xa
2 Xây dựng lớp thi công giao diện để cài đặt các ph-ơng thức trên Đây chính là RMI server
3 Tạo ra các lớp stub và skeleton cho đối t-ợng RMI server
4 Viết ch-ơng trình để đăng ký đối t-ợng chủ RMI này vào "sổ đăng ký" các đối t-ợng gọi xa của máy chủ
5 Xây dựng đối t-ợng RMI client để triệu gọi đến các ph-ơng thức của
đối t-ợng RMI server thông qua lớp giao diện của nó
Trên đây là nguyên lý chung để triển khai một ứng dụng Java RMI Những chi tiết kỹ thuật của quá trình này sẽ đ-ợc trình bày rõ trong phần triển khai ứng dụng ở phía d-ới :
Tóm lại, một ứng dụng RMI hoàn chỉnh sẽ bao gồm các thành phần sau: Trên máy chủ có:
- Lớp giao diện xa (Interface)
- Lớp thi công giao diện (Interface Implement)
Trang 11- Lớp RMI Client để gọi các ph-ơng thức từ xa
II.6 Cách chuyển tham số trong lời gọi ph-ơng thức từ xa Rmi
Trong ngôn ngữ Java, các đối t-ợng đều đ-ợc truyền theo tham chiếu Còn các kiểu dữ liệu cơ bản nh- int, char, đ-ợc truyền theo tham trị Đây là nguyên tắc truyền tham số cho các lời gọi hàm từ xa trong Rmi thì nguyên tắc này thay đổi hoàn toàn
- Tất cả các dữ liệu cơ bản nh- int, char đều đ-ợc truyền theo tham trị
- Tất cả các dữ liệu kiểu đối t-ợng muốn truyền qua mạng đều phải cài
đặt 1 trong 2 giao tiếp là Remote hoặc Serializable Các đối t-ợng cài đặt giao tiếp Remote đ-ợc truyền theo tham chiếu còn các đối t-ợng cài đặt giao tiếp
Serializable sẽ đ-ợc truyền theo tham trị
II.6.1 Chuyển đối t-ợng đến trình chủ theo tham trị:
Hầu hết các kiểu dữ liệu đối t-ợng cơ bản nh- String, Date, Time trong Java đều đã đ-ợc cài đặt giao tiếp Serinlizable cho nên chúng đ-ợc truyền cho các lời gọi hàm xa theo trị
Với cơ chế truyền tham số đối t-ợng theo trị trong các lời gọi hàm xa, đối t-ợng tham số sẽ đ-ợc đóng gói và chuyển toàn bộ đến máy chủ (nơi tiếp nhận tham số và thực thi ph-ơng thức t-ơng ứng) Tại máy chủ, đối t-ợng sẽ đ-ợc bung ra lại trạng thái ban đầu và đ-a vào sử dụng Quá trình đóng gói tham số trên máy khách đ-ợc thực hiện bởi lớp trung gian - Stub, ng-ợc lại quá trình
mở gói dữ liệu để khôi phục đối t-ợng tham số diễn ra trên máy chủ đ-ợc thực hiện bởi lớp trung gian - Skel Quy trình chuyển tham số qua lại giữa hai lớp - Stub và - Skel này trong lập trình phân tán gọi là cơ chế mashaling data
II.6.2 Chuyển đối t-ợng đến trình chủ theo tham chiếu
Trong tr-ờng hợp đối t-ợng tham số đ-ợc truyền qua mạng có kích th-ớc quá lớn thì việc đóng gói toàn bộ đối t-ợng để truyền đi sẽ ảnh h-ởng đến tốc
độ thực thi của ch-ơng trình Do vậy cần phải có một giải pháp để trình chủ có thể tham chiếu và xử lý trực tiếp đối t-ợng tham số đang nằm ở máy khách mà
đối t-ợng này không cần phải đ-ợc chuyển đến máy chủ Điều này hoàn toàn
có thể thực hiện đ-ợc bằng cách cho phép trình chủ gọi hàm xa ng-ợc lại đến trình khách Thực ra lúc này mỗi phần ứng dụng nêu trên đều đóng cả hai vai
Trang 12trò là trình chủ và trình khách Rmi Thật ra với ý nghĩa là ng-ời cung cấp các dịch vụ tính toán thì vai trò Server của đối t-ợng chủ vẫn không thay đổi nh-ng khi cần truyền tham số kiểu đối t-ợng (theo tham chiếu) qua mạng thì
nó tạm thời "hạ mình" đóng vai khách để tham chiếu đến đối t-ợng tham số
đang nằm trên máy khách Để có thể tham chiếu đ-ợc qua mạng thì đối t-ợng tham số cần phải đ-ợc xây dựng theo các trình tự y nh- là một Rmi Server
"Thứ thiệt'
Nghĩa là :
- Nó phải cài đặt giao tiếp Remote
- Phải kèm theo các lớp trung gian Stub và Skel đ-ợc tạo ra bởi trình Rmic của Java
- Một lớp Stub của nó phải đ-ợc đặt trên máy chủ (lúc nay
đang tạm là khách) nh- một đại diện toàn quyền (để thực hiện cơ chế truyền dữ liệu mashaling đã đề cập)
- Tuy nhiên Rmi cho phép đối t-ợng kiểu này không cần phải đăng ký với rmiregistry
Cơ chế gọi ng-ợc từ xa của trình chủ đến trình khách thông qua tham chiếu (cơ chế call back) này rất hữu hiệu cho trình khách thiết lập các yêu cầu tuỳ biến mà không phải phụ thuộc quá nhiều vào trình chủ Một cách hình t-ợng thì lúc này khách hàng đã đ-ợc phục vụ tốt hơn
Sở dĩ đ-ợc nh- vậy là do trình khách có thể truyền tham số một cách
"thoả mái" trong lời gọi hàm xa mà không phải lo lắng về kích th-ớc của đối t-ợng tham số Kỹ thuật Callback còn cho phép trình chủ đánh thức trình khách để trả về kết quả mỗi khi tính toán xong Điều này rất có ý nghĩa trong thực tế Bởi vì một lẽ đơn giản là khi client yêu cầu một dịch vụ nó không thể biết chính xác là trong bao lâu thì server sẽ tính toán xong Và sẽ khá bất tiện khi client cứ phải định kỳ gọi đến server để thăm dò xem server đã tính toán xong ch-a Callback cho phép server chủ động gọi hàm xa ng-ợc lại đến client
Trang 13tính phụ trợ, bổ sung và ngày càng phong phú hơn cùng với các phiên bản mới của JDK Vì phạm vi bản báo cáo có hạn nên những nội dung này xin đ-ợc trình bày trong một dịp khác
II.7 khai thác cơ sở dữ liệu trên java
Ngày nay có rất nhiều hệ thống Database khác nhau, nếu không có một chuẩn chung để giao tiếp giữa những hệ thống Database này thì khi ứng dụng chuyển đổi từ hệ thống Database này sang hệ thống khác, mã của ch-ơng trình phải thay đổi lại cho phù hợp Để giải quyết tình trạng đó, ng-ời ta đã đ-a ra một chuẩn để các kiểu Database khác nhau có thể giao tiếp đ-ợc với nhau Đó
là ODBC ODBC là một lớp trừu t-ợng giữa ch-ơng trình ứng dụng và hệ thống Database Lớp này cho phép chúng ta sử dụng các phát biểu theo ngôn ngữ SQL để truy xuất những Database có hổ trợ ngôn ngữ SQL và một số Database khác
II.7.1 Cơ chế ODBC
ODBC ( Open Database Connectivity ) là một giao tiếp CSDL phổ biến nhất trong các máy tính cá nhân theo chuẩn IBM và dần dần đi vào các môi tr-ờng khác ODBC cung cấp các hàm cho phép các ngôn ngữ lập trình truy cập vào CSDL, các thao tác này bao gồm việc thêm, sửa, xoá, xem dữ liệu, thông tin chi tiết về CSDL
II.7.2 Cơ chế JDBC
II.7.2.1 Tổng quan về JDBC
JDBC - Java Database Connectivity API là một phần của các hàm Java API cho môi tr-ờng xí nghiệp do Sun Microsystems, Inc phát triển JBCD đ-ợc coi là một cố gắng chuẩn hoá đầu tiên để tích hợp CSDL quan hệ với các ch-ơng trình Java
JDBC chứa một tập hợp các đối t-ợng và các ph-ơng thức của CSDL quan hệ để giao tiếp với các nguồn dữ liệu SQL ( SQL Data Sources ) Các JDBC API đ-ợc tích hợp trong Java và là một phần cơ bản trong các cài đặt của máy ảo Java
JDBC đ-ợc giới thiệu lần đầu vào năm 1996 với bản nháp JDBC 0.50
Đ-ợc cập nhật bổ xung và hoàn chỉnh qua các phiên bản 1.0, 1.10, 1.20, 1.22
Trang 14và hiện nay là phiên bản mới nhất JDBC 2.0 đ-ợc tích hợp trong các phiên bản JDK 1.2, 1.22 và 1.3
JDBC đ-ợc thiết kế dựa trên X/Open SQL Call level Interface ( CLI giao tiếp goi SQL theo chuẩn X/Open)
II.7.2.2 Các kiểu trình điều khiển JDBC
Các trình điều khiển JDBC có thể phân thành 4 kiểu sau phụ thuộc vào cách thức hoạt động và các kết nối với CSDL:
Cầu nối JDBC - ODBC : cung cấp các truy cập JDBC thông qua các truy cập ODBC Vì trong nhiều CSDL máy khách các lệnh ODBC và lệnh CSDL phải đ-ợc nạp tr-ớc trong máy khách đó, nên kiểu điều khiển này rất thích hợp với các ứng dụng chạy trên nền máy chủ trong kiến trúc 3 lớp Java
Trình API gốc có một phần Java ( Native - API partly - Java technology - based drive) chuyển các lệnh gọi API trên máy khách của CSDL Nh- thế nó
đòi hỏi trên máy khách cũng cần phải nạp tr-ớc một số lệnh nhị phân của các trình chạy trên máy khách CSDL
Trình giao thức gốc hoàn toàn Java ( Native - protocol Java techology - based drive): biến các lệnh gọi JDBC thành các giao thức mạng gọi trực tiếp từ
hệ quản trị CSDL Trình này cho phép gọi trực tiếp từ máy khách đến máy chủ chứa DBMS và là giải pháp thực tế cho việc truy cập Intranet Từ khi các giao thức này là thuộc tính của CSDL, các nhà cung ứng CSDL cũng muốn trở thành nguồn tài nguyên chính cho các trình theo phong cách này
II.7.2.3 Cơ chế hoạt động của JDBC
Cơ chế hoạt động của JDBC t-ơng tự nh- ODBC nh-ng thông qua các đối t-ợng
Ch-ơng trình Java tạo một đối t-ợng kết nối (connection object)
để thực hiện việc kết nối với CSDL
Tạo một đối t-ợng Statement (câu lệnh) và chuyển các câu lệnh SQL đến CSDL thông qua đối t-ợng này và nhận biết về các kết quả( có thể
là các thông tin hay tập các Records) Để giảm thời gian trễ, các tập tin JDBC class th-ờng đ-ợc nạp sẵn trên máy khách
Trang 15Các lớp JDBC nằm trong khối Java.sql và mọi ch-ơng trình Java đều dùng lên các đối t-ợng và ph-ơng thức trong khối java.sql để đọc và viết lên nguồn dữ liệu
Một ch-ơng trình Java dùng JDBC cần một trình điều khiển cho nguồn dữ liệu mà nó cần giao tiếp Trình điều khiển này có thể là một modun gốc (native modunle) nh- JDBCODBC.dll (th- viện cầu nối JDBC-ODBC ), hay cũng có thể là một ch-ơng trình Java khác trao đổi với máy chủ thông qua các giao thức HTTP, hay RPC
Trong tr-ờng hợp một ứng dụng làm việc với nhiều cơ sở dữ liệu, JDBC
có một trình quản lý các bộ điều khiển và cung cấp danh sách các bộ điều khiển đã đ-ợc ứng dụng sử dụng
II.7.2.4 Nối kết với CSDL qua khối JAVA.SQL
JDBC đ-ợc cài đặt thông qua khối java.sql Khối này chứa tất cả các lớp và ph-ơng thức của JDBC và đ-ợc phân thành hai phần:phần cơ sở(Code API) đuợc cài đặt kèm theo JDK 1.2,phần mở rộng (Standard Extension)sẽ
đ-ợc cài đặt riêng nh- phần tuỳ chọn
II.7.3 Cơ bản về mô hình cơ sở dữ liệu phân tán
Công nghệ và cơ sở dữ liệu phân tán(distributed database systems,DDB)
là sự hợp nhất của hai h-ớng tiếp cận đối với quá trình xử lý dữ liệu.Công nghệ CSDL và công nghệ mạng máy tính Nh- các cơ sở dữ liệu tr-ớc đây là những CSDL tập trung có nghĩa là CSDLchỉ đ-ợc l-u trữ trên 1 máy chủ nào đócác máy con muốn dùng CSDL chuyển mình từ mô thức xử lý
Một trong những động lực chủ yếu thúc đẩyviệc sử dụng hệ CSDL là nhu cầu thích hợp các dữ liệu hoạt tác của một xí nghiệp và cho phép truy xuất tập trung Trong khi đó công nghệ mạng máy tính đi ng-ợc lại với mọi nổ lực tập trung hóa
Thoáng qua ,chúng ta rất khó hình dung ra làm cách nào để tổng hợp hai h-ớng tiếp cận trái ng-ợc nhau cho ra một công nghệ mạnh mẽ và có nhiều triển vọng so với từng công nghẹ riêng lẽ Mục tiêu quan trọng nhất của công nghệ CSDL ở đây là tính hợp không phải là sự tập trung hóa
Xử lý dữ liệu phân tán
Thuật ngữ xử lý phân tán(distributed processing)hoặc tính phân tán (distributed Computing)trong những năm trở lại đây thuật ngữ này bị lạm dụng
Trang 16nhiều nhất trongngành máy tính Cũng có thể tùy theo các công việc xử lý khác nhau mà ng-ời ta đ-a ra các thuật ngữ khác nhau
Câu hỏi đ-ợc đặt ra là :Những gì đ-ợc phân tánmột trong những điều có thể là thiết bị xử lý
Chúng ta có thể có một khái niệm hệ phân tán nh- sau
Mạng máy tính một phần mềm xử lý phân tán trên mạng =Hệ phân tán
Để xử lý dữ liệu phân tán chúng ta có các hệ thống xử lý phân tán có thể phân loại dựa vào một số chuẩn:mức độ kết nối ,cấu trúc t-ơng giao ,sự liên
đối giữa các thành phần,sự đồng bộ hóa giữa các thành phần
-Mức độ kết nối (degree of coupling)muốn nói đến một đơn vị đo h-ớng nhằm xác định xem các thành phần xử lý đ-ợc kết nối với nhau chặt chẽ đến mức độ nào
-T-ơng tự các chuẩn khác cũng có những đặc tr-ng riêng
-Cũng không ít câu hỏi đặt ra la tại sao chúng ta lại thực hiện phân tán
?Nhiều câu hỏi trả lời kinh điển cho câu hỏi này đã chỉ ra rằng việt sử dụng phân tán nhằm thích ứng tốt hơn với việc phân bố ngày càng rộng rãi các công
ti xí nghiệp và các CSDLtrên thế giới Tuy nhiên từ gốc độ tổng quát hơn ,chúng ta có thể khẳng định rằng lý do cơ bản của viêc xử lý phân tán là do có thể giải quyết tốt hơn các bài toán lớn và phức tạp Nói một cách đơn giản hơn
sử dụng Hai thuật ngữ quan trọng trong các định nghĩa này là “biến đổi logic
“ và “phân bố trên
0mạng máy tính “
để tạo một hệ CSDL phân tán ,các tập tin không chỉ có tính biến đổi logic
mà chúng còn phải co cấu trúc và đ-ợc truy xuất qua một giao diện chung ngoài ra một hếCDLphân tán không phải là hệ thống mà trong đó đã là sự hiển diện của một mạng máy tính ,CSDL chỉ nằm tại một nút mạng
Trang 17II.7.4 Khai thác CSDL bằng Java
Để có thể làm việc với dữ liệu của một CSDL, một ch-ơng trình Java phải tuân theo các b-ớc sau :
Thực hiện một kết nối với CSDL : ch-ơng trình Java sẽ gọi ph-ơng thức getConnection() để nhận về đối t-ợng Connect
Sau đó thực hiện các lệnh : các ch-ơng trình Java chỉ thực hiện
đ-ợc các lệnh trên CSDL thông qua đối t-ợng Statement
Các câu lệnh SQL có thể đ-ợc thực hiện tức thì thông qua đối t-ợng Statement, có thể là một câu lệnh biên dịch tr-ớc ( đối t-ợng
Mạng truyền dữ liệu Trạm 5