Đồ án Tìm hiểu Lập trình phân tán với RMI ứng dụng truy cập cơ sở dữ liệu Web

Tài liệu Đồ án Tìm hiểu Lập trình phân tán với RMI ứng dụng truy cập cơ sở dữ liệu Web: MỤC LỤC LỜI MỞ ĐẦU Sự phát triển như vũ bão của hệ thống mạng nhất là mạng Internet đã khiến cho máy tính trở nên gần gũi và phục vụ đắc lực cho con người hơn. Tuy nhiên bên cạnh đó một thách thức lớn đặt ra cho các nhà phát triển ứng dụng là lập trình mạng ngày càng trở nên phức tạp. Mô hình lập trình đơn lẻ truyền thống đã bị thay đổi rất nhiều. Ngày nay, bạn không còn đơn thuần ngồi viết những ứng dụng để chạy trên một máy duy nhất. Chương trình ứng dụng đòi hỏi sự tương tác từ nhiều phía người dùng, chia sẻ tài nguyên, triệu gọi từ xa, liên kết giao tác, phân tán dữ liệu…Với những yêu cầu trên mô hình khách/chủ (hay Client/Server) đã ra đời và tồn tại rất lâu (thậm chí cho đến ngày nay). Theo mô hình khách/chủ tất cả các thao tác xử lý phức tạp đều được chuyển giao cho máy chủ xử lý. Máy khách chỉ đóng vai trò gửi yêu cầu và hiển thị dữ liệu. Hãy hình dung bạn quản lý và phân phối ứng dụng đến hàng trăm máy khách nằm ở nhiều quốc gia khác nhau (một trở ngại về mặt địa lý). Bạn c...

doc37 trang | Chia sẻ: hunglv | Lượt xem: 2529 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Tìm hiểu Lập trình phân tán với RMI ứng dụng truy cập cơ sở dữ liệu Web, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC LỜI MỞ ĐẦU Sự phát triển như vũ bão của hệ thống mạng nhất là mạng Internet đã khiến cho máy tính trở nên gần gũi và phục vụ đắc lực cho con người hơn. Tuy nhiên bên cạnh đó một thách thức lớn đặt ra cho các nhà phát triển ứng dụng là lập trình mạng ngày càng trở nên phức tạp. Mô hình lập trình đơn lẻ truyền thống đã bị thay đổi rất nhiều. Ngày nay, bạn không còn đơn thuần ngồi viết những ứng dụng để chạy trên một máy duy nhất. Chương trình ứng dụng đòi hỏi sự tương tác từ nhiều phía người dùng, chia sẻ tài nguyên, triệu gọi từ xa, liên kết giao tác, phân tán dữ liệu…Với những yêu cầu trên mô hình khách/chủ (hay Client/Server) đã ra đời và tồn tại rất lâu (thậm chí cho đến ngày nay). Theo mô hình khách/chủ tất cả các thao tác xử lý phức tạp đều được chuyển giao cho máy chủ xử lý. Máy khách chỉ đóng vai trò gửi yêu cầu và hiển thị dữ liệu. Hãy hình dung bạn quản lý và phân phối ứng dụng đến hàng trăm máy khách nằm ở nhiều quốc gia khác nhau (một trở ngại về mặt địa lý). Bạn cài đặt trình điều khiển kết nối cơ sở dữ liệu MS SQL Server lên từng máy. Sau một khoảng thời gian sử dụng, bạn muốn chuyển hệ quản trị cơ sở dữ liệu MS SQL Server sang hệ Oracle thì sao? Bạn phải yêu cầu hàng trăm máy khách cập nhật lại trình điều khiển truy xuất cơ sở dữ liệu Oracle thay cho MS SQL Server. Đó là chưa kể việc cấu hình và kết nối với từng hệ cơ sở dữ liệu xem ra cũng không phải là đơn giản đối với người dùng. Hay khi bạn muốn thay đổi mã nguồn của ứng dụng khách? Nếu ứng dụng khách của bạn bao gồm nhiều tập tin thực thi .exe và các thư viện liên kết động (dll) lên đến hàng chục Mb thì sao? Bạn phải gửi bản cập nhật hàng chục Mb này đến hàng trăm khách yêu cầu cập nhật lại chương trình. Tất cả những ứng dụng trên đã làm phát sinh mô hình phát triển ứng dụng đa tầng (multi-tier). Các ứng dụng xử lý của bạn không cài đặt trên máy khách nữa mà cài đặt ở một máy chủ khác. Mục tiêu là làm cho máy khách trở nên gọn nhẹ, dễ cấu hình, dễ thay đổi phía máy chủ. Nếu bạn cần thay đổi mã nguồn của trình ứng dụng bạn chỉ cần thay đổi trên một máy chủ. Tất cả các trình khách khi kết nối vào máy chủ chạy ứng dụng sẽ luôn được máy chủ phục vụ phiên bản mới nhất. Web là một ứng dụng điển hình nhất của mô hình ứng dụng đa tầng cụ thể đó là mô hình ba tầng. Trình chủ Web nằm trên một máy chủ, máy khách chỉ cần dùng trình duyệt Web (browser) kết nối vào máy chủ và có thể truy cập được mọi thông tin cũng như dịch vụ. Trình chủ sử dụng java servlet, trang jsp hay các ứng dụng cgi để kết nối vào cơ sở dữ liệu, đối tượng phân tán RMI, CORBA (nằm trên một máy chủ khác) xử lý tính toán và trả về kết quả cho trình khách thông qua các trang Web tĩnh. Mô hình đa tầng đã phân rã chức năng một cách cụ thể, cho phép ứng dụng chạy trên nhiều máy chủ khác nhau. Dễ dàng cho người phát triển, nhà cung cấp cũng như người sử dụng mạng diện rộng nhất là mạng Internet. Trong phạm vi của đồ án em nghiên cứu cách truy cập sơ sở dữ liệu Web bằng đối tượng phân tán RMI. Cấu trúc của đồ án gồm bốn chương. Trong chương một trình bày sơ lược về Java, cấu trúc của một chương trình Java, các dạng chương trình ứng dụng của Java, các phần tử cơ sở và các kiểu dữ liệu nguyên thủy của Java. Trong chương hai trình bày khái niệm, kiến trúc, mô hình mạng máy tính và giao thức thường dùng trong mạng. Trong chương ba trình bày về lập trình đối tượng phân tán với RMI, khái niệm về RMI, kiến trúc của một chương trình RMI, các vấn đề gặp phải khi triển khai RMI và một số kỹ thuật triển khai RMI. Cuối cùng trong chương bốn xây dựng chương trình demo truy cập cơ sở dữ liệu Web. Chương trình có các giao diện cho người sử dụng và cả người quản trị hệ thống. Tất cả các chức năng của chương trình đều được thực hiện từ xa. Do trình độ và thời gian có hạn nên đồ án tốt nghiệp không thể tránh khỏi các thiếu sót. Em rất mong nhận được sự hướng dẫn và đóng góp ý kiến của các thầy cô và các bạn để tốt đồ án tốt nghiệp của em hoàn thiện hơn. Em xin chân thành cảm ơn các thầy cô giáo, các bạn đã tận tình giúp đỡ trong quá trình học tập. Chương 1: GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH JAVA 1.1. Lịch sử ra đời của Java Ngôn ngữ lập trình Java do Java do James Gosling và nhóm cộng sự của hãng Sun Microsystems xây dựng vào năm 1990 với tên gọi ban đầu là Oak (Cây sồi). Java được xây dựng chủ yếu trong bộ công cụ phát triển JDK (Java Development Kit). Bắt đầu với JDK phiên bản 1.0 từ năm 1995, năm 1996 Sun đưa ra phiên bản JDK 1.1, năm 1998 cho ra đời phiên bản JDK 1.2 và hiện nay đã có phiên bản 1.6. 1.2. Chu trình phát triển chương trình với Java Java vượt qua được các nhược điểm trên bằng cách dịch các chương trình nguồn sang ngôn ngữ máy ảo không phụ thuộc vào chip (hệ lệnh cụ thể) nào cả và sau đó khi cần thực hiện sẽ thông dịch sang hệ máy cụ thể. Kết quả của chương trình là chuỗi các bytes cơ sở bao gồm các mã lệnh thực hiện (Opcode) và các tham số của máy lý thuyết (máy ảo), là máy Java ảo JVM Java Virtual Machine . Chương trình được thực hiện như sau: 1.3. Môi trường Java Java có thể dịch và thực hiện trong mọi môi trường điều hành, miễn là ở đó có chương trình thông dịch (máy Java ảo - JVM). Cơ chế xử lý các Web site. Tại sao lại sử dụng Java cho công nghệ Web. Tổ chức thực hiện các dự án ứng dụng với Java. * Xử lý các Web site * Java và Web - Độc lập với môi trường (Platform Independent) - Đảm bảo an ninh (secure) thông tin - Đảm bảo an toàn (safe) - Thực hiện đa luồng (multithreads) - Đảm bảo sự linh hoạt - Đảm bảo sự gọn nhẹ - Đảm bảo tính nhất quán * Bộ công cụ phát triển ứng dụng JDK Java Development Kit - Hiện nay có nhiều môi trường hỗ trợ để phát triển phần mềm Java như: Visual J++, Symantec’s Café, Boland Jbuilder, JDK v.v. Bộ JDK so sun cung cấp theo Web site: 1.4. Các dạng chương trình ứng dụng của Java Có ba loại chương trình có thể phát triển với Java: + Các chương trình ứng dụng độc lập. + Các chương trình ứng dụng nhúng (applet). + Các chương trình kết hợp cả hai loại trên. 1.4.1 Chương trình ứng dụng dạng độc lập Chương trình ứng dụng độc lập là một chương trình nguồn mà sau khi dịch có thể thực hiện trực tiếp. 1.4.2. Chương trình ứng dụng dạng Applet Applet là loại chương trình Java đặc biệt mà khi thực hiện phải được nhúng vào chương trình ứng dụng khác như trình duyệt Web Browser, hoặc appletviewer của JDK. 1.4.3 Chương trình ứng dụng ở dạng Applet lẫn dạng độc lập Java cho phép xây dựng chương trình chạy được cả ở Web Browser lẫn một ứng dụng độc lập. Một chương trình như thế phải: + Định nghĩa lớp ứng dụng mở rộng, kế thừa từ lớp Applet. + Trong lớp ứng dụng phải có hàm main(). 1.5. Các phần tử cơ sở của Java 1.5.1. Định danh (Tên gọi) Tên gọi của các thành phần trong chương trình được gọi là định danh (Identifier). Trong Java định danh là một dãy các ký tự gồm các chữ cái, chữ số và một số các ký hiệu như: ký hiệu gạch nối ‘_’, các ký hiệu tiền tệ $, ¥, £, ¢, và không được bắt đầu bằng chữ số. Lưu ý: Java phân biệt chữ thường và chữ hoa, ví dụ Hoa và hoa là hai định danh khác nhau. Độ dài (số ký tự) của định danh trong Java về lý thuyết là không giới hạn. 1.5.2. Các từ khóa Các từ khóa của Java có thể chia làm 9 nhóm. 1. Tổ chức các lớp 2. Định nghĩa các lớp 3. Các từ khóa cho các biến và các lớp 4. Các kiểu dữ liệu nguyên thủy (đơn giản) 5. Những từ khóa cho các giá trị và các biến 6. Xử lý ngoại lệ 7. Tạo lập và kiểm tra các đối tượng 8. Dòng điều khiển 9. Những từ khóa chưa được sử dụng. 1.5.3. Chú thích Chú thích trên một dòng: Tất cả các ký tự sau // cho đến cuối dòng là chú thích. Chú thích nhiều dòng: Giống như trong C, phần nằm giữa /* và */ là chú thích. Chú thích trong tư liệu: Đây là loại chú thích đặc biệt được đặt vào những chỗ thích hợp trong chương trình để javadoc có thể đọc và sử dụng để tạo ra tư liệu dạng HTML cho chương trình. Phần chú thích trong tư liệu được bắt đầu bằng /** và kết thúc bằng */. 1.6. Các kiểu dữ liệu nguyên thủy Mỗi ngôn ngữ lập trình đều định nghĩa sẵn một số kiểu dữ liệu cơ bản gọi là kiểu nguyên thủy. Các kiểu nguyên thủy của Java được chia thành 3 nhóm: + Kiểu nguyên gồm các số nguyên và kiểu ký tự. + Kiểu dấu phảy động hay kiểu số thực: Loại này có hai kiểu float và double biểu diễn cho các số thập phân có dấu. + Kiểu boolean: Là kiểu boolean có hai giá trị true (đúng) và false (sai). Kiểu boolean (logic) Kiểu nguyên thủy Kiểu số Kiểu số nguyên Kiểu nguyên Kiểu số thực boolean Kiểu ký tự char byte long short int float double Hình 1.1. Các kiểu nguyên thủy trong Java 1.7. Khai báo các biến Trong Java có bốn loại biến: + Các biến thành phần + Các biến tham chiếu đối tượng (Object Reference) + Các biến tĩnh (static) + Các biến cục bộ (local) 1.8. Cấu trúc tệp chương trình Java Tệp chương trình Java có thể có các thành phần được đặc tả như sau: + Định nghĩa một gói là tùy chọn thông qua định danh của gói (package). + Một số lệnh import (không hoặc nhiều). + Một số định nghĩa lớp và interface có thể định nghĩa theo thứ tự bất kỳ. Chương 2: CƠ SỞ VỀ MẠNG MÁY TÍNH 2.1. Định nghĩa mạng máy tính Mạng máy tính là một tập hợp các máy tính được nối với nhau bởi đường truyền theo một cấu trúc nào đó và thông qua các máy tính trao đổi thông tin qua lại cho nhau. Hình 2.1. Mô hình liên kết các máy tính trong mạng 2.2. Phân loại mạng máy tính Dựa theo phạm vi phân bố của mạng người ta có thể phân ra các loại mạng như sau: + GAN (Globa Area Network) + WAN (Wide Area NetWork) + MAN (Metropolitan Area Network) + LAN (Local Area Network) 2.3. Một số kiến trúc mạng thường dùng + Ring Topology: Hình 2.2. Ring Topology + Bus Topology: Hình 2.3. Bus Topology Hình 2.4. Start Topology + Star Topology: 2.4. Giao thức mạng Giao thức mạng là một tập các quy tắc, quy ước để trao đổi thông tin giữa hai hệ thống máy tính hoặc hai thiết bị máy tính với nhau. Nói một cách hình thức thì giao thức mạng là một ngôn ngữ được các máy tính trong mạng sử dụng để trao đổi dữ liệu với nhau. Có nhiều loại giao thức được sử dụng trong mạng máy tính như: Apple Talk, DLC, NetBEUI,… nhưng hiện nay giao thức được sử dụng phổ biến nhất trong mạng máy tính là giao thức TCP/IP. 2.4.1. Giao thức TCP/IP 1. Giao thức IP Nhiệm vụ chính của giao thức IP là cung cấp khả năng kết nối các mạng con thành liên kết mạng để truyền dữ liệu, vai trò của IP là vai trò của giao thức tầng mạng trong mô hình OSI. Giao thức IP là một giao thức kiểu không liên kết (connectionlees) có nghĩa là không cần có giai đoạn thiết lập liên kết trước khi truyền dữ liệu. 2. Giao thức TCP TCP là một giao thức hướng kết nối, có cung cấp một đường truyền dữ liệu tin cậy giữa hai máy tính. Tính tin cậy thể hiện ở việc nó đảm bảo dữ liệu được gửi sẽ đến được đích và theo đúng thứ tự như khi nó được gọi. 2.4.2 Giao thức UDP UDP (User Datagram Protocol) là giao thức theo phương thức không liên kết được sử dụng thay thế cho TCP ở trên IP theo yêu cầu của từng ứng dụng. 2.5. Các mô hình hoạt động của mạng máy tính Mô hình hình hoạt động của mạng máy tính chủ yếu có hai loại: + Mô hình hoạt động chủ khách (Clients/Server). + Mô hình hoạt động ngang hàng (Peer to Peer). Chương 3: LẬP TRÌNH ĐỐI TƯỢNG PHÂN TÁN VỚI RMI 3.1. Tổng quan về RMI RMI Remote Method Invocation là một công ngệ của các hệ thống phân tán nó cho phép một máy ảo Java (JVM) gọi những phương thức của đối tượng nằm trên máy ảo Java khác ở trong cùng một mạng. 3.1.1. RMI là gì RMI là một công nghệ Java cho phép một JVM giao tiếp với một JVM khác và thi hành các phương thức của đối tượng nằm trên JVM đó. Java Virtual Machine Java Virtual Machine Object Main (String args[]) RemoteObject Method1(…) Method2(…) Method Request Method Response Hình 3.1. Lời triệu gọi phương thức từ xa được thi hành trên máy ảo Java ở xa 3.1.2. So sánh giữa RMI và RPC Remote Procedure Calls Java là một ngôn ngữ nền tảng, dễ hiểu, nó cho phép những ứng dụng Java giao tiếp với những ứng dụng Java khác chạy trên bất kỳ môi trường phần cứng nào hỗ trợ một JVM. Sự khác nhau chủ yếu giữa RPC và RMI là RPC hỗ trợ nhiều ngôn ngữ, trong khi RMI chỉ hỗ trợ những ứng dụng viết trên Java. 3.2 RMI làm việc như thế nào Các hệ thống sử dụng RMI cho việc truyền thông tiêu biểu được phân thành 2 loại: Clients và Servers. Server cung cấp dịch vụ RMI, và Client gọi các phương thức do Server cung cấp. RMI Server phải đăng ký một dịch vụ tìm kiếm, cho phép các Client tìm thấy thông tin Server cung cấp, hoặc chúng có thể tham chiếu tới dịch vụ khác. Một ứng dụng chạy nền cho RMI có tên là rmiregistry. Ứng dụng này chạy và xử lý độc lập với các chương trình RMI, nó cho phép các đối tượng trên Server đăng ký tên của mình. Mỗi lần một đối tượng được đăng ký xong, nó sẽ đợi sau đó thực hiện lời gọi từ phía Client. rmiregistry RMI Server RMI Server RMI Server Hình 3.2. Nhiều dịch vụ đăng ký với một bộ đăng ký Các đối tượng trên Client sẽ gửi những thông điệp tới những phương thức ở xa. Trước khi một phương thức ở xa được thực thi Client phải có tham chiếu của nó trên Server. Điều đó được thực hiện bởi dịch vụ tìm kiếm trong bộ đăng ký RMI. Đối tượng trên Client yêu cầu một tên dịch vụ, và sẽ nhận được một URL. Nên nhớ những URL không phải cho HTTP, hầu hết các giao thức có thể đại diện sử dụng cú pháp của URL. Định dạng được sử dụng bởi RMI để đại diện cho một đối tượng tham chiếu từ xa như sau: rmi://hostname:port/servicename Trong đó hostname tên của của Server hoặc địa chỉ IP của Server, port số hiệu cổng cung cấp dịch vụ, servicename là một chuỗi mô tả dịch vụ. Những thông tin chi tiết của hoạt động mạng thì luôn trong suốt với người phát triển ứng dụng khi làm việc với các đối tượng ở xa, việc đó trở nên đơn giản như khi làm việc với đối tượng tại máy cục bộ. Điều này được thực hiện nhờ một phép chia thông minh của hệ thống RMI thành hai thành phần, một là stub và một là skeleton. request RMI client application stub object somemethod(…) RMI server skeleton object somemethod(…) response Hình 3.3. Đối tượng stub gọi đối tượng skeleton. Tại RMI Server, đối tượng skeleton có nhiệm vụ lắng nghe những yêu cầu và chuyển các yêu cầu đó tới dịch vụ RMI. Sau khi người phát triển tạo ra một giao diện RMI, người đó còn phải định nghĩa cụ thể giao diện đó. Đối tượng được định nghĩa này sẽ được gọi là đối tượng skeleton. 3.3. Kiến trúc của chương trình RMI Kiến trúc của một chương trình theo cơ chế RMI được mô tả như hình sau: Hình 3.4. Kiến trúc chương trình kiểu RMI Trong đó: + Server là chương trình cung cấp các đối tượng có thể được gọi từ xa. + Client là chương trình có tham chiếu đến các phương thức của các đối tượng ở xa trên Server. + Stub chứa các tham chiếu đến các phương thức ở xa trên Server. + Skeleton đón nhận các tham chiếu từ Stub để kích hoạt phương thức tương ứng trên Server. + Remote Reference Layer là hệ thống truyền thông của RMI. + Transport là tầng giao vận được dựa trên giao thức TCP/IP giữa các máy trong mạng. Bằng cách sử dụng kiến trúc phân tầng như trên mà mỗi tầng có thể phân cấp hoặc thay thế mà không ảnh hưởng tới các tầng còn lại của hệ thống. 3.4. Các cơ chế liên quan trong một ứng dụng RMI Trong một ứng dụng phân tán cần có các cơ chế sau: + Cơ chế định vị đối tượng ở xa (Locate remote objects) + Cơ chế giao tiếp với các đối tượng ở xa (Communicate with remote objects) + Tải các lớp danh bytecodes cho các lớp mà nó được chuyển tải qua lại giữa máy ảo (Load class bytecodes for objects that are passed around) Hình 3.5. Vai trò của dịch vụ ánh xạ tên Trong đó: + Server đăng ký tên cho đối tượng có thể được gọi từ xa của mình với dịch vụ ánh xạ tên (Registry Server). + Client tìm đối tượng ở xa thông qua tên đã đăng ký trên Registry Server (looks up) và tiếp đó gọi các phương thức ở xa. + Hình 3.5 cũng cho thấy cách thức mà hệ thống RMI sử dụng một WebServer sẵn có để truyền tải mã bytecodes của các lớp qua lại giữa Client và Server. 3.5. Cơ chế thực thi của một ứng dụng RMI Tiến trình thực thi của một ứng dụng RMI diễn ra như sau: Hình 3.6. Tiến trình thực thi của ứng dụng RMI + Bước 1: Server tạo các đối tượng cho phép gọi từ xa cùng với Stub và Skeleton của chúng. + Bước 2: Server sử dụng lớp Naming để đăng ký tên cho một đối tượng từ xa (1). + Bước 3: Naming đăng ký Stub của đối tượng từ xa với Registry Server (2). + Bước 4: Registry Server sẵn sàng cung cấp tham chiếu đến đối tượng từ xa khi có yêu cầu (3). + Client yêu cầu Naming định vị đối tượng ở xa thông qua tên đã được đăng ký (phương thức lookup) với dịch vụ tên (4). + Naming tải Stub của đối tượng ở xa từ dịch vụ tên mà đối tượng đã đăng ký về Client (5). + Cài đặt đối tượng Stub và trả về tham chiếu đối tượng ở xa cho Client (6). + Client thực thi một lời gọi phương thức ở xa thông qua đối tượng Stub (7). 3.6. Các lớp, gói thường được sử dụng trong RMI Trong kỹ thuật triệu gọi từ xa, một hệ thống RMI sử dụng rất nhiều gói và lớp của Java nhưng các lớp quan trọng nhất vẫn là: + java.rmi. + java.rmi.activation. + java.rmi.dgc. + java.rmi.registry. + java.rmi.server. Trong các gói trên thì quan trọng nhất là gói java.rmi với gói này lớp Naming đóng vai trò cực kỳ quan trọng, tất cả các phương thức của lớp này đều là phương thức tĩnh. Lớp này dùng để đăng ký hoặc khôi phục các tham chiếu đối tượng với bộ đăng ký rmiregistry. Gói này gồm các phương thức: + static void bind(String url, Remote Object). + static String[] list(String url. + static Remote lookup(String url). + static void rebind(String url, Remote Object). 3.7. Những vấn đề gặp phải khi triển khai RMI 3.7.1. Nạp các lớp động Trong các hệ thống nhỏ (chỉ có một vài Client sử dụng các dịch vụ từ Server), việc phân tán các lớp Stub và Skeleton diễn ra bình thường. Nhưng khi có một số lượng lớn các Client cùng sử dụng các dịch vụ này thì điều gì sẽ xảy ra?. Nếu một bộ đăng ký RMI được sử dụng cho tất cả các dịch vụ, khi một dịch vụ mới được giới thiệu trong hệ thống thì file Stub của dịch vụ đó phải được sao chép tới classpath của bộ đăng ký trước khi Server đăng ký nó. Vấn đề trên được giải quyết bằng một kỹ thuật đã được biết đến đó là kỹ thuật nạp lớp động. Kiểm tra lớp đã được nạp Kiểm tra việc cài đặt bảo mật Trả về lớp đó Tìm nạp lớp đó từ mạng Bỏ qua ngoại lệ ClassNotFoundException Đúng Đúng Sai Sai Hình 3.7. Quá trình xử lý nạp lớp của hệ thống RMI Trước khi tìm nạp lớp đã được định nghĩa, thì vị trí của lớp đó phải được xác định. Vị trí của các lớp này được xác định bằng thuộc tính hệ thống java.rmi.server.codebase. Việc xác định vị trí được thực hiện ở Client hoặc Server. Muốn vậy ta phải đặt một URL, đường dẫn đến thư mục codebase. Từ đó RMIClassLoader tải các lớp sử dụng cho hệ thống RMI. Cách đơn giản nhất để đặt codebase là sử dụng một lệnh, tham số chỉ rõ thuộc tính cần đặt. java –Djava.rmi.server.codebase= RMIServer Trong đó hostname là địa chỉ IP hoặc tên của máy chủ, Port là số hiệu cổng chương trình chạy, Path là đường dẫn đến thư mục codebase Nếu Server có thể chỉ rõ codebase của mình thì Client cũng làm được điều đó. java –Djava.rmi.server.codebase= RMIClient 3.7.2. Sự khác nhau giữa các máy ảo Java 1. Máy ảo Java của Microsoft thiếu hỗ trợ lời triệu gọi phương thức từ xa Mặc dù những gói RMI là một phần của lõi Java API, nhưng các JVM của Microsoft cũng không hỗ trợ RMI. Điều đó làm cho các RMI Client hoặc Server không dễ dàng chạy trên các JVM đó. Vì thế việc sử dụng Applet trở nên khó khăn bởi đa số người sử dụng Internet đều dùng trình duyệt IE Internet Explorer . Để khắc phục điều này ta phải thêm một bản vá lỗi cho các JVM của Microsoft để hỗ trợ RMI. Tuy nhiên ta không thể chắc chắn tất cả các Client đều được cài đặt bản vá này. 2. Những thay đổi trong RMI từ JDK 1.02 đến JDK 1.1 Trong JDK 1.02, việc thi hành một dịch vụ RMI là sự mở rộng của lớp java.rmi.server.UnicastRemoteServer. Lớp này không sẵn có trong JDK 1.1, nó được thay thế bởi lớp java.rmi.server.UnicastRemoteObject. Sự hỗ trợ RMI trong JDK 1.02 chỉ là tạm thời, cần phải tránh trong các hệ thống tiếp theo. Tính sẵn sàng trong JDK 1.1 hoặc trong các JVM cao hơn trong đa số các nền tảng của hệ điều hành là sự lựa chọn tốt nhất cho RMI. 3. Những thay đổi trong RMI từ JDK 1.1 đến nền tảng thứ hai của Java Các ứng dụng sử dụng việc nạp lớp động, mặc dù đã được cài đặt mặc định việc quản lý bảo mật là RMISecurityManager, nhưng nó sẽ không chạy nếu không có một vài thay đổi dưới nền tảng thứ hai Java. Dưới nền tảng thứ hai Java việc thiết lập bảo mật có một vài tùy chọn cho người phát triển: + Loại bỏ toàn bộ RMISecurityManager, và vô hiệu hóa việc nạp lớp động. + Thay thế RMISecurityManager với một tùy chỉnh bảo mật, yêu cầu viết thêm một đoạn mã để quản lý bảo mật. + Chỉ rõ tệp tin chính sách bảo mật, chính sách này cho phép truy cập những thông tin cần thiết. Cấu trúc của tệp tin chính sách bảo mật, được chỉ rõ trong các tài liệu về nền tảng thứ hai Java, nhưng cho hầu hết các ứng dụng tệp tin chính sách bảo mật đều có khuôn dạng chung. Nó cho phép kết nối tới TCP bằng cổng 1024. Nó giới hạn các tệp tin được phép đọc trong thư mục c:\rmi, và được phép ghi trong thư mục c:\rmi\data. Đoạn mã cho tệp rmi.policy: Grant { permission java.net.SocketPermission "*:1024-65535", "accept, connect, listen, resolve"; permission java.net.SocketPermission "*:1-1023","connect, resolve"; permission java.io.FilePermission "c:\\rmi\\", "read"; permission java.io.FilePermission "c:\\rmi\\data\\", "write"; } Việc chỉ rõ chính sách bảo mật khi chạy phần mềm RMI được thiết đặt trong hệ thống chính sách bảo mật java.security.policy, nó chỉ rõ đường dẫn đến tệp tin chính sách. Ví dụ để xác định rõ đường dẫn tới tệp tin rmi.policy ở tại RMI Client ta sử dụng lệnh sau: java –Djava.security.policy=c:\rmi\rmi.policy RMIClient 3.7.3 RMI và Applet RMI gặp một vài khó khăn đối với applet. Ngoài những vấn đề hỗ trợ RMI trong IE đã được nói đến ở trên, thì applet còn bị hạn chế trong môi trường mạng. Sự hạn chế này rất nghiêm trọng, nó cản trở việc RMI applet giao tiếp với các dịch vụ RMI. 1. Không có khả năng kết nối tới cổng TCP Khi một applet không thể kết nối tới cổng TCP, nó không thể là một RMI Server. Điều đó dẫn đến các dịch vụ RMI không thể chạy trên trình duyệt Web. Chính vì vậy không thể dễ dàng sử dụng callbacks trong RMI, một Applet Client có thể triệu gọi các phương thức trên Server đó, nhưng các máy khác không thể triệu gọi các phương thức này. 2. Các hạn chế trong những kết nối mạng Một applet chỉ có thể kết nối tới máy chủ từ codebase mà nó nạp về. Khi một applet được nạp về từ một máy chủ, như máy chủ www.davidreilly.com, nó a chỉ có thể tạo các hết nối TCP và UDP tới máy chủ. Đây là một hạn chế của applet bởi trình duyệt. Hình 3.8. Những hạn chế của applet trong kết nối mạng Như vậy applet không thể làm tốt nhiệm vụ của RMI Clients, trừ khi applet và Server chạy trên cùng một máy. 3. Các hạn chế bởi tường lửa. Tường lửa là phần mềm (có thể được cài đặt hoặc điều khiển bởi phần cứng tùy theo nhà cung cấp Internet) chặn ngay ngõ ra vào của đường truyền dữ liệu kết nối mạng của bạn với bên ngoài (Internet). Chức năng của tường lửa là kiểm soát cách thức truyền dữ liệu và kết nối giữa mạng Intranet với mạng Internet. Mục đích tránh sự đột nhập và tấn công hay ăn cắp dữ liệu của các tay hacker bên ngoài mạng. Tường lửa cũng được dùng để hạn chế sự truy xuất của bạn ra bên ngoài mạng Internet. Máy khách Applet Hoặc trình khách Java Máy chủ (Server) rmiregistry (port 1099) WebServer Object 1099 80 1099 80 Mạng Intranet Tường lửa Mạng Internet Hầu như tất cả các tường lửa đều chỉ cho sử dụng một số ít cổng. Cổng kết nối theo giao thức http (port 80) là cổng nổi tiếng và được phép sử dụng để kết nối với dịch vụ web server. Như vậy các ứng dụng Java hầu như không sử dụng được mô hình Client - Server nếu gặp phải tường lửa. Hình 3.9. Kết nối giữa trình khách và rmiregistry trên máy chủ bị chặn bởi tưởng lửa Tuy nhiên như bạn thấy cổng 80 là cổng của dịch vụ http hầu như được mọi tường lửa cho qua. Cổng dịch vụ http chuyên cung cấp trang Web cho các trình duyệt browser nên ít khi bị tường lửa ngăn cấm. Chính vì vậy ứng dụng phân tán Java gọi đến đối tượng từ xa có thể giải quyết vấn đề tường lửa bằng hai cách. + Thứ nhất, bạn yêu cầu người quản trị tường lửa cung cấp cho bạn một số cổng để sử dụng. Tuy nhiên cách này ít khi được chấp nhận và nếu có bạn phải trả chi phí rất cao cho việc mở cổng. + Thứ hai sử dụng cơ chế trung gian thông qua cổng 80 của dịch vụ Web Server. Hình 3.10. Gọi đối tượng ở xa thông qua cơ chế trung gian của Web Server Hình trên là cơ chế gọi đối tượng từ xa thông qua dịch vụ Web Server bên ngoài tường lửa. Đối tượng Object của ta đăng ký với rmiregistry trên máy chủ (1) lắng nghe ở cổng 1099. Trình khách gửi yêu cầu theo giao thức http đến máy chủ Web Server yêu cầu truy xuất đến đối tượng Object (2). Web Server yêu cầu một đối tượng trung gian trên máy chủ xử lý lời gọi (3). Servlet liên lạc với rmiregistry lấy về tham chiếu của đối tượng Object (4). Servlet triệu gọi Object (5) và trả kết quả về cho Web Server (6). Sau cùng là Web Server trả kết quả về cho trình khách. 3.8. Sử dụng RMI thực thi việc tham chiếu ngược 3.8.1. Tham chiếu ngược trong lập trình hướng đối tượng Trong một hệ thống hướng đối tượng, khi một đối tượng cần thông báo một sự kiện xảy ra thì nó sử dụng kỹ thuật tham chiếu ngược. Cách này làm cho hệ thống hoạt động có hiệu quả hơn, vì một đối tượng không cẩn kiểm tra định kỳ trạng thái của một đối tượng khác, nó sẽ thay thế thông báo lỗi nếu sự kiện đó xảy ra. Nhiều đối tượng lắng nghe có thể đăng ký với cùng một sự kiện. Hình 3.11. Nhiều đối tượng có thể đăng ký với một hoặc nhiều sự kiện Khi một sự kiện xảy ra ( kết quả của sự tương tác giữa đối tượng và hệ thống, hoặc một quá trình xử lý bên trong như hoàn thành một khối lượng công việc hoặc tác động với người sử dụng), sự kiện gốc sẽ thông báo tới mọi đối tượng đang lắng nghe. Muốn làm được vậy sự kiện gốc phải duy trì một danh sách của tất cả các đối tượng đang hoạt động, sau đó gửi thông báo trở lại các đối tượng khi sự kiện xảy ra. Hình 3.12. Gửi thông báo trở lại cho tất cả các đối tượng đang lắng nghe Các đối tượng này luôn được làm việc bởi những lời gọi phương thức. Trong những hệ thống hướng đối tượng Callbacks tham chiếu một đối tượng tới một đối tượng đó là sự kiện gốc. Sự kiện gốc tại thời điểm thích hợp, nó sẽ gọi một phương thức của đối tượng nghe để thông báo nó hoạt động và sẵn sàng trả lời. Hình 3.13. Tham chiếu ngược được thực hiện bởi một đối tượng đang lắng nghe Kiểu hệ thống này được sử dụng rộng rãi trong lập trình hướng đối tượng, trong ngữ cảnh của Java. Mô hình xử lý sự kiện của AWT yêu cầu những người phát triển thực thi giao diện của bộ lắng nghe và đăng ký các thành phần nó cần sử dụng với bộ kiểm tra. Nhiểu bộ lắng nghe có thể đăng ký cùng với một thành phần, và chúng cũng có thể đăng ký được với nhiều thành phần. Khi xây dựng một hệ thống, bạn có thể tạo cho mình một giao diện lắng nghe, và thêm các phương thức cần thiết. 3.8.2. Tham chiếu ngược trong RMI 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 gọi là callback. Kỹ thuật gọi ngược callback thường rất hữu hiệu cho trình khách thiết lập các yêu cầu tùy biến không phải lệ thuộc nhiều vào trình chủ. Đối tượng trên máy khách Đối tượng trên máy chủ Gọi phương thức Gọi phương thức Hình 3.14. Đối tượng giữa trình khách và trình chủ triệu gọi lẫn nhau Bằng cách này ta có thể cho trình khách và trình chủ triệu gọi lẫn nhau. Khi đó đối tượng trên máy chủ phải cài đặt giao tiếp Remote, tiếp đó sinh ra các lớp trung gian tênlớp_Stub, tênlớp_Skel, sau cùng là đăng ký đến rmiregistry để trình khách tham chiếu đến. 3.9. Kích hoạt đối tượng từ xa 3.9.1 Kích hoạt đối tượng là gì Kích hoạt đối tượng từ xa là một công nghệ để giải quyết vấn đề một số lượng lớn các dịch vụ RMI nhàn rỗi gây tốn tài nguyên. Nó cho phép các dịch vụ này đăng ký với rmiregistry, nhưng chưa cần phải khởi tạo giá trị ban đầu. Vì vậy các dịch vụ này sẽ không hoạt động cho đến khi có một lời gọi từ Client. Một quá trình xử lý ngầm được gọi là remote method invocation activation system deamon (rmid) sẽ lắng nghe và khởi tạo dịch vụ RMI mà Client yêu cầu. Bằng cách nào đó rmid tiếp nhận các yêu cầu từ Client và tạo các dịch vụ Client yêu cầu. 3.9.2. Kích hoạt đối tượng từ xa làm việc như thế nào Sự kích hoạt đối tượng từ xa có một ít khác biệt so với RMI Server thông thường. Một dịch vụ thông thường khi đăng ký đối tượng của mình với RMI registry thì nó phải được khởi tạo. Kích hoạt đối tượng từ xa tránh được điều đó, và nó sẽ kích hoạt đối tượng khi có yêu cầu, một lỗi tham chiếu từ xa được đăng ký tại đây. Không giống như UnicastRemoteObject chạy liên tục, Mà Server cài đặt chương trình chạy trong khoảng thời gian ngắn. Mục đích của nó là thông báo cho hệ thống biết việc kích hoạt của một đối tượng ở xa, và đăng ký lỗi tham chiếu từ xa với rmiregistry. Server installation class Faulting remote reference someMethod(…) RMI Client main(String args[]) { … } Gọi phương thức lỗi tham chiếu từ xa Gửi lỗi tham chiếu từ xa Yêu cầu tham chiếu đối tượng ở xa rmiregistry Remote method invocation activation system deamon process (rmid) Đăng ký đối tượng với hệ thống kích hoạt Đăng ký lỗi tham chiếu từ xa như dịch vụ của RMI Hình 3.15. Server cài đặt chương trình đăng ký kích hoạt đối tượng với rmid và lỗi tham chiếu với rmiregistry Tại một thời điểm nào đó trong tương lai, RMI Client sẽ tìm kiếm rmiregistry và lựa chọn dịch vụ mà nó cung cấp bởi lỗi tham chiếu từ xa. Khi tham chiếu này được kích hoạt, nó sẽ kiểm tra và thấy tham chiếu đó đã tồn tại ở Server. Đầu tiên lỗi tham chiếu nhận một lời gọi, lúc này có giá trị ban đầu là null, nó cho biết đối tượng phải được kích hoạt trước khi sử dụng. Nó nhờ sự giúp đỡ của ứng dụng rmid, tạo một thực thể mới ở Server thông qua đó gọi đối tượng mới được kích hoạt. Những yêu cầu phương thức lỗi tham chiếu được đẩy tới đối tượng kích hoạt và sau đó quay trở lại Client. Tuy nhiên có một khoảng thời gian chờ, cái này không được lặp lại cho những yêu cầu kế tiếp trong khi dịch vụ đó đã sẵn sàng cho hoạt động. RMI Client main(String args[]) { … } Activated RMI Server someMethod(…) Faulting remote reference someMethod(…) Remote method invocation activation system deamon process (rmid) Trả về kết quả cho Client Yêu cầu server kích hoạt Nhận kết quả từ server Yêu cầu kích hoạt đối tượng Kích hoạt dịch vụ nếu nó chưa chạy Hình 3.16. Tham chiếu lỗi với sự giúp đỡ của rmid, thông tin kích hoạt quay trở lại Client Cơ chế kích hoạt đối tượng từ xa có thể tạo cho ta một môi trường hiệu quả hơn về mặt sử dụng tài nguyên của JVM Server, nhưng lại có một yếu điểm là thời gian dành cho việc xử lý khá lớn do phải thêm vào đó một thời gian dành cho việc kích hoạt đối tượng từ xa. 3.10. Classpath và Codebase 3.10.1. Giới thiệu chung Java RMI cho phép ta nạp các lớp động, nghĩa là trong lúc gọi hàm từ xa nói riêng và thực thi chương trình nói chung nếu có tham chiếu tới một lớp mới mà JVM chưa có định nghĩa của lớp này thì Java sẽ tự động nạp lớp này để công việc được tiếp tục. 3.10.2. Classpath Classpath là một biến môi trường chứa đường dẫn để Java có thể tải thấy các lớp ma chương trình Java cần trong lúc chạy 3.10.3. URL (Uniform Resource Locator) Trong phần trước ta đã nhắc đến rất nhiều về Codebase, để hiểu được Codebase ta cần nắm vững khái niệm URL. + URL: là một con trỏ, trỏ tới một tài nguyên cụ thể ở vị trí xác định. + Cú pháp của một URL là: Protocol://hostname[:port]/path/filename 3.10.4. Codebase 1. Khái niệm Codebase Codebase là một thuộc tính do Java định nghĩa, giá trị của nó là một URL (Uniform Resource Locator) chỉ tới một nơi chứa Bytecode của những lớp mà chương trình có thể tìm được Bytecode của một lớp nào đó trên mạng. 2. Cơ chế hoạt động Trong kỹ thuật phân tán RMI, Client muốn gọi một phương thức của đối tượng từ xa nào đó thì bắt buộc Client phải tham chiếu tới đối tượng từ xa đó, để có một tham chiếu đến đối tượng từ xa đó Client phải có một thể hiện thuộc lớp, đó là lớp Stub, lớp này được tạo ra bởi chương trình rmic. Mỗi đối tượng từ xa có một lớp Stub để đóng vai trò trung gian trên JVM Client. Giá trị Codebase là một hay chiều URL chỉ đến nơi chứa Stub này. Chương 4: CHƯƠNG TRÌNH DEMO TRUY NHẬP CƠ SỞ DỮ LIỆU WEB 4.1 Các mô hình kiến trúc cơ sở dữ liệu 4.1.1 Kiến trúc đơn lớp (Single Architecture) Trong kiểu kiến trúc này, cả ba thành phần của chương trình ứng dụng (User Intrface, Business Rule, Data Storage) đều được tích hợp vào một tập tin thực thi. Ví dụ : BKAV, D2, Winword,… Các ứng dụng kiểu này chỉ được thực thi trên một máy tính. User Interface Business Rule Data Storage Hình 4.1. Kiến trúc chương trình đơn lớp 4.1.2 Kiến trúc hai lớp (Two - Tier Architecture) Các chức năng về Bussiness Rule có thể được cài đặt ở phần Client hoặc ở phần Server tạo ra hai loại kiến trúc Client-Server là: + Fat Client. + Fat Server. 1. Loại Fat Client Trong loại này Business Rule được cài đặt bên phía Client. Phần Server chủ yếu thực hiện chức năng về truy vấn và lưu trữ thông tin. Hình 4.3. Kiến trúc chương trình Client-Server theo kiểu Fat Client 2. Loại Fat Server Trong loại này, phần lớn các chức năng về Business Rule được đặt ở phần Server. Phần Client chỉ thực hiện một số chức năng nhỏ của Business Rule về kiểm tra tính hợp lệ của dữ liệu nhập bởi người dùng. Hình 4.4. Kiến trúc Client-Server theo kiểu Fat Server 4.1.3 Kiến trúc ba lớp (Three - Tier Architecture) Mô hình được chia làm ba lớp: + Lớp thứ nhất: lớp giao diện người dùng. + Lớp thứ hai: lớp ứng dụng thực thi. + Lớp thứ ba: lớp cơ sở dữ liệu. Hình 4.5. Kiến trúc chương trình ba tầng 4.1.4. Giới thiệu về truy nhập cơ sở dữ liệu Web Mô hình truy nhập cơ sở dữ liệu Web hoạt động theo kiến trúc cơ sở dữ liệu ba lớp. Bao gồm các lớp: + Lớp client : Là một trình duyệt. + Lớp trung gian : là một ứng dụng chạy trên máy chủ Web. + Lớp cơ sở dữ liệu. Hình 4.6. Kiến trúc của cơ sở dữ liệu Web Client sử dụng một trình duyệt Web gửi các yêu cầu tới Web Server. Sau đó Web Server truy nhập vào cơ sở dữ liệu để lấy thông tin Client yêu cầu và trả về kết quả cho Client. Mô hình trên được thực hiện trên môi trường Internet. Ưu điểm của mô hình truy nhập cơ sở dữ liệu Web: + Phía client: không cần cài đặt thêm bất kỳ chương trình ứng dụng nào vào máy của mình, mà vẫn có thể thi hành ứng dụng đó nhờ một trình duyệt web đã được tích hợp sẵn trong hệ điều hành và một máy ảo Java. + Phía server: chương trình nguồn chỉ nằm trên một máy nhất định kể cả chương trình nguồn của Client, nên công việc bảo trì, phát triển, khắc phục sự cố tương đối dễ dàng và nó còn đảm bảo tính bí mật của mã nguồn. 4.2. Mô hình và hoạt động của chương trình demo Hình 4.7. Mô hình chương trình truy cập cơ sở dữ liệu web * Cơ chế hoạt động của chương trình [1]. Client thực hiện truy nhập vào Web server thông qua trình duyệt Web, Applet có chức năng truy nhập CSDL Web được tải về trình duyệt phía client. [2]. Applet được trình duyệt Web phía client khởi động, sau đó thực hiện kết nối đến đối tượng RMI Application Server phía server, khi kết nối thành công Applet thực hiện lời gọi phương thức từ của đối tượng RMI Application Server. [3]. Đối tượng RMI Application Server phía server thực hiện truy nhập CSDL lấy dữ liệu theo yêu cầu của phía client thông qua cầu nối jdbc:microsoft:sqlserver. [4]. Đối tượng RMI Application Server trả dữ liệu yêu cầu về cho phía client như kết quả của một lời gọi phương thức thông thường. 4.3. Thiết kế chương trình Cơ sở dữ liệu sử dụng trong chương trình được xây dựng trên hệ quản trị cơ sở dữ liệu MS SQL Server có tên là Database có bảng nhanvien và Account có cấu trúc như sau: Hình 4.8. Cấu trúc bảng nhanvien và bảng Account của chương trình 4.3.1. Các tệp xây dựng trong chương trình * Đặc tả giao tiếp interface. - Readdatabase.java: khai báo các phương thức thực thi. - Client.java : lớp thực thi phía Client * Cài đặt cho lớp Readdatabase.java. - ReaddatabaseImpl.java: cài đặt các phương thức của giao diện interface. * Các tệp tin ứng dụng. - readData.java : lớp hiển thị danh sách nhân viên. - addData.java: lớp thêm một nhân viên. - searchData.java: lớp tìm kiếm nhân viên. - deleteData.java: lớp xóa nhân viên. - DangNhap.java: Đăng nhập vào quyền quản trị hệ thống * Các tệp tin HTLM trong thư mục Web - index.html: Trang Web chủ. - Themmoi.html: Trang bổ sung nhân viên. - Thongtin.html: Trang hiển thị danh sách nhân viên. - TimkiemNV.html: Trang tìm kiếm thông tin nhân viên. - XoaNV.html: Trang xóa thông tin của nhân viên. - DangNhap.html: Trang hiển thị giao diện đăng nhập quyền quản trị hệ thống 4.3.2. Các bước thực hiện chương trình - Chạy tệp tin run_Server trong thư mục chứa mã nguồn. - Truy cập vào địa chỉ : 4.4 Một số giao diện của chương trình Hình 4.9. Giao diện phía RMI Server sau khi khởi động Hình 4.10. Giao diện trang chủ Hình 4.11. Giao diện toàn bộ thông tin về nhân viên Hình 4.12. Giao diện tìm kiếm thông tin về nhân viên. Hình 4.13. Giao diện bổ sung nhân viên Nếu bạn chưa đăng nhập với quyền quản trị hệ thống bạn sẽ không có quyền bổ sung thêm nhân viên. Hình 4.14. Giao diện xóa thông tin của nhân viên Hình 4.15. Giao diện đăng nhập quyền quản trị hệ thống KẾT LUẬN Ngày nay việc phát triển các phần mềm ứng dụng luôn cần được triển khai theo mô hình của phân tán, vì nếu các ứng dụng trên các máy tính độc lập thì các ứng dụng không còn ý nghĩa nhiều về mặt thực tiễn. Trong phạm vi của đồ án, em đã đi tìm hiểu một số khái niệm cơ bản trong Java, mạng máy tính và phương pháp, kỹ thuật triển khai ứng dụng phân tán trong Java. Sau một thời gian nghiên cứu và triển khai, đồ án của em đã đạt được một số kết quả như sau: + Về mặt lý thuyết, đồ án đã trình bày các khái niệm cơ bản về: - Lập trình Java. - Cơ sở về mạng máy tính. - Tìm hiểu kỹ thuật lập trình đối tượng phân tán trong Java với RMI (Gọi phương thức từ xa). + Về chương trình, em đã xây dựng một chương trình demo truy cập cơ sở dữ liệu Web. Chương trình có một số chức năng sau: - Hiển thị toàn bộ thông tin về nhân viên. - Tìm kiếm thông tin của nhân viên. - Bổ sung nhân viên. - Xóa nhân viên. Tất cả các chức năng của chương trình đều được thực hiện ở xa, người sử dụng và quản trị hệ thống không cần ở bên máy chủ vẫn có thể cập nhật được thông tin cho cơ sở dữ liệu. Với những kết quả lý thuyết đã đạt được và kinh nghiệm khi triển khai chương trình demo trên đã giúp em hiểu sâu hơn về kỹ thuật lập trình đối tượng phân tán và có thể triển khai ứng dụng sâu hơn: như kết hợp RMI với Servlet, xây dựng hệ thống chia sẻ tài nguyên máy in… Với thời gian hạn chế và trình độ có hạn, đồ án không thể tránh khỏi các thiếu sót, em rất mong nhận được sự nhận xét và góp ý của các thầy cô và các bạn để đồ án được hoàn thiện hơn. TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt [1]. Phạm Văn Thiều, Nguyễn Quang Thanh, Hà Thị Thanh Tâm - Java dành cho sinh viên, NXB Thống kê, NXB 2000. [2]. Nguyễn Viết Linh và Đậu Quang Tuấn - Học nhanh kỹ thuật lập trình Java, Xí nghiệp in Bến Tre, NXB 2001. [3]. Nguyễn Anh Tuấn - Giáo trình lập trình mạng bằng Java, NXB Thống kê, Hà Nội, NXB 2003. [4]. Đại Học Quốc Gia Thành phố Hồ Chí Minh - Giáo trình lập trình mạng bằng Java, NXB Thống Kê, Hà Nội, NXB 2003. [5]. Nguyễn Phương Lan, Hoàng Đức Hải - Lập trình ứng dụng Web với JSP/Servlet, NXB Lao Động Xã Hội. Tài liệu tiếng Anh [1]. Thinhking in Java (giáo trình điện tử). [2]. Java_Network_Programming_(O'Reilly-2nd_Ed-2000) (giáo trình điện tử). [3]. RMI - Java RMI - Tutorial (giáo trình điện tử). [4] Java Network Programming and Distributed Computing (Addison Wesley) Tài liệu khác [1]. [2].

Các file đính kèm theo tài liệu này:

  • docTom tat.doc
  • pptbc tot nghiep.ppt