Hầu hết các website có một số tài nguyên mà chúng chuyển đến các trình duyệt không thay đổi trong suốt hoạt động của site. Ví dụ nhƣ các hình ảnh và các file Css hỗ trợ hiển thị của site, các đoạn mã Javascript chạy trên trình duyệt, và các file HTML tĩnh. Vì việc gửi những file này không cần đến việc gọi code của ứng dụng, nói cách khác, việc này không cần thiết, làm giảm hiệu quả làm việc của các server ứng dụng.
Thay vì thế, App Engine cung cấp một tập các server tách biệt chuyên làm nhiệm vụ trao đổi các file tĩnh này. Những server nói trên tối ƣu hóa cho kiến trúc bên trong và hạ tầng mạng để xử lý các requests cho các tài nguyên tĩnh. Đối với client, các file tĩnh này cũng giống nhƣ các tài nguyên khác đƣợc cung cấp bởi ứng dụng của chúng ta.
Chúng ta upload các file tĩnh cùng với code ứng dụng. Chúng ta có thể cấu hình vài cách hiển thị nhất định cho các file này, bao gồm các URL cho file tĩnh, loại nội dung, và các hƣớng dẫn cho trình duyệt để lƣu các bản sao file này trong bộ nhớ cache để giảm lƣu lƣợng và tăng tốc cho trang web.
5.1.3.2. Tổ chức và lưu trữ dữ liệu (Datastore)
Khi xây dựng ứng dụng trên GAE, ứng dụng không có quyền truy cập đến cơ sở dữ liệu truyền thống trên các hệ quản trị cơ sở dữ liệu truyền thống nhƣ Oracle, MySQL hay SQLite. Thay vào đó, ứng dụng chỉ đƣợc phép truy cập vào kho dữ liệu của Google là Datastore. Google Datastore dựa trên nền tảng công nghệ BigTable và GFS.
Chuẩn Java JSR-151 JSR-220,JSR-213 Java SE JSR-919 JSR-107 Java Servlet JDO/JPA Java.net.UR L Javax.mail Javax.cac he
Các dịch vụ của Google App Engine
Web App Container Data Store API
BigTable là một dịch vụ lƣu trữ và quản lý dữ liệu phân tán có cấu trúc, nó đƣợc thiết kế với khả năng mở rộng kích thƣớc dữ liệu vô cùng lớn có thể đến petabytes. Còn GFS là hệ thống lƣu trữ tệp của Google với mức độ tin cậy cao, khả năng mở rộng linh hoạt.
Datastore lƣu trữ các đối tƣợng dữ liệu gọi là các thực thể (Entities). Một thực thể có một hoặc nhiều thuộc tính có giá trị là một trong một số kiểu dữ liệu hỗ trợ: ví dụ, kiểu chuỗi, số nguyên, hoặc tham chiếu đến một đối tƣợng khác. Mỗi thực thể đƣợc xác định bởi một loại (Kind), trong đó phân loại các thực thể cho mục đích của các truy vấn, và một khóa (key) xác định duy nhất trong loại này.
App Engine Datastore khác với cơ sở dữ liệu quan hệ truyền thống (CSDLQH) ở cách nó mô tả quan hệ giữa các đối tƣợng dữ liệu:
- Các thực thể thuộc cùng một loại có thể có nhiều thuộc tính khác nhau và các thực thể khác nhau có thể có các thuộc tính cùng tên nhƣng với kiểu dữ liệu khác nhau.
- Các thực thể thuộc cùng một kiểu trong Datastore không bắt buộc phải có cùng một tập thuộc tính cố định nhƣ trong CSDLQH
Mặt khác Datastore không có kiểm tra tính toàn vẹn dữ liệu, câu truy vấn không sử dụng chuẩn SQL mà chỉ giống với SQL và đƣợc gọi là JDOQL (Java Data Objects Query Language). Tuy nhiên Datastore lại có thể mở rộng do đƣợc xây dựng trên hàng trăm, thậm chí đến hàng ngàn máy để hoạt động nhƣ một hệ thống cơ sở dữ liệu duy nhất. Vì vậy, việc thay đổi hay bổ sung thêm máy là dễ dàng. Bên cạnh đó, Datastore vẫn có một chút tƣơng đồng với CSDLQH về các thành phần của lƣợc đồ, bảng dƣới đây thể hiện ánh xạ giữa các thành phần lƣợc đồ của CSDLQH với Google Datastore.
CSDLQH App Engine Datastore
Database Datastore
Table Kind
Row Entity
Row ID Key
Column Property
Bảng ánh xạ giữa CSDLQH với App Engine Datastore
5.1.3.3. Quản lý vùng nhớ đệm (Memcache)
Dịch vụ Datastore là dịch vụ lƣu trữ dữ liệu trên đĩa cứng, thời gian truy cập chậm. Đôi khi chúng ta gặp phải trƣờng hợp có những dữ liệu tĩnh không cần lƣu vào đĩa cứng mà nó cần đƣợc truy xuất nhanh và đáp ứng đƣợc nhiều yêu cầu, Memcache là dịch vụ giải quyết bài toán đó.
Hình 5.3 Sử dụng dịch vụ Memcache
Dịch vụ này cho phép cập nhật, truy xuất dữ liệu ở dạng ít thay đổi với tốc độ nhanh nhờ đƣợc lƣu trữ trong bộ nhớ. Tuy nhiên dịch vụ này thƣờng có nhƣợc điểm là giới hạn kích thƣớc dữ liệu và thời hạn lƣu trữ. Để sử dụng dịch vụ này trong ứng dụng Java, App Engine Java SDK cung cấp thƣ viện Jcache, đoạn mã nhúng thƣ viện và sử dụng dịch vụ Memcache đƣợc thể hiện ở hình 5.3.
5.1.3.4. Dịch vụ giao tiếp web (URL Fetch)
Do việc hạn chế mở cổng để truy cập tài nguyên từ các ứng dụng, hệ thống khác, App Engine cung cấp dịch vụ URL Fetch để giải quyết hạn chế này. Đây là một dịch vụ đƣợc chạy trên hạ tầng mạng của Google, dịch vụ này cho phép ứng dụng giao tiếp với các hệ thống khác sử dụng HTTP hoặc HTTPs. Thông qua dịch vụ URL Fetch, ứng dụng có thể đọc và phân tích các tài liệu XML, gọi dịch vụ mạng RESTful,…
5.1.3.5. Dịch vụ thư điện tử (Mail)
Dịch vụ Mail đƣợc sử dụng để gửi và nhận thƣ điện tử. Dịch vụ cho phép địa chỉ gửi là thƣ điện tử gmail của thành viên quản trị hoặc ngƣời sử dụng đăng nhập. Nếu thƣ điện tử không phải là gmail, địa chỉ đó phải đƣợc phân quyền quản trị mới gửi đƣợc thƣ điện tử. Tuy nhiên, dịch vụ lại cho phép nhận nhiều loại thƣ điện tử khác nhau từ gmail, yahoo, hotmail,… Đồng thời dịch vụ còn cho phép gửi và nhận thƣ điện tử có đính kèm thêm file.
5.1.3.6. Một số dịch vụ khác
Ngoài các dịch vụ đã nêu trên, App Engine còn cung cấp nhiều dịch vụ khác nhƣ: Dịch vụ thao tác ảnh (Image) cho phép thay đổi kích cỡ, xoay, lật, cắt và nâng cao chất lƣợng ảnh; Dịch vụ ngƣời sử dụng (Users) cho phép sử dụng tài khoản của Google để xác thực trong ứng dụng; Dịch vụ Blobstore, dịch vụ XMPP, … Đồng thời, App Engine ngày càng mở rộng và bổ sung thêm nhiều dịch vụ mới phù hợp với xu thế phát triển của ĐTĐM và nâng cao chất lƣợng dịch vụ đáp ứng các yêu cầu của khách hàng.
5.1.4. Công cụ quản lý ứng dụng
GAE hỗ trợ khách hàng quản lý ứng dụng của mình thông qua trình duyệt bằng cách cung cấp một giao diện web hỗ trợ cho khách hàng có thể quản lý dữ liệu bao gồm bổ sung, sửa và xóa dữ liệu. Đồng thời, nó cũng cho phép quản lý tài nguyên đám mây bao gồm việc giám sát tài nguyên đã sử dụng, cấu hình bổ sung hay thêm bớt tài nguyên cho phù hợp với quy mô ứng dụng.
5.2. Xây dựng và triển khai ứng dụng trên GAE
Để xây dựng và triển khai ứng dụng trên nền tảng GAE, ngƣời sử dụng có thể sử dụng trình soạn thảo Eclipse và cài đặt chƣơng trình cắm Google Plugin for Eclipse. Sau khi cài đặt trình cắm xong, trình soạn thảo sẽ có thêm chức năng tạo mới ứng dụng theo cấu trúc của một ứng dụng App Engine và chức năng triển khai ứng dụng lên nền tảng GAE.
5.2.1 Công cụ xây dựng ứng dụng
Để xây dựng ứng dụng này trên nền công nghệ GAE tôi đã sử dụng các công cụ sau:
Java SE Development Kit 6 update 18
Eclipse Indigo
Google Plugin for Eclipse 3.7
Google Web toolkit SDK 2.4.0
5.2.2 Cài đặt Plugin cho Eclipse
Khởi động Eclipse và chọn Help Install new Software. Tại đây hệ thống yêu cầu ngƣời thực hiện phải nhập địa chỉ chƣa Plugin cho Eclipse để tiến hành cài đặt. Vì Plugin này đƣợc cung cấp miễn phí từ Google nên ta nhập vào Text box địa chỉ sau:
http://www.dl.google.com/eclipse/plugin/3.7
Từ đó sẽ thấy những Plugin cần thiết cho việc xây dựng một ứng dụng Google App Engine với Eclipse.
Hình 5.7: Những Plugin cần thiết cài đặt thêm vào Eclipse
Sau đó hệ thống yêu cầu đọc chính sách bảo mật và nhấp chọn đồng ý rồi chọn Finish để tiến hành cài đặt.
Hình 5.8: Đồng ý chính sách sử dụng và cài đặt của Google
Sau khi quá trình cài đặt kết thúc hệ thống sẽ nhắc nhở ngƣời dùng cần thiết phải khởi động lại chƣơng trình để sự việc cài đặt đƣợc hoàn tất và có thể sử dụng trong lần khởi động tiếp theo. Quá trình cài đặt Plugin đã thành công.
5.2.3. Xây dựng ứng dụng trên GAE
Để tạo một ứng dụng mới, NSD chọn chức năng với biểu tƣợng tạo mới ứng dụng App Engine trên thanh công cụ của trình soạn thảo, sau đó nhập các thông tin cần thiết trong đó có tên ứng dụng, ứng dụng của em có tên vietnam-tour, kết quả là một ứng dụng đƣợc tạo mới có cấu trúc nhƣ sau:
Hình 5.9 Cấu trúc một ứng dụng App Engine
Trong một ứng dụng App Engine, một số tệp cấu hình đƣợc tạo ra mặc định để cấu hình cho ứng dụng, cụ thể:
Tệp appengine-web.xml khai báo các thông số: định danh, phiên bản của ứng dụng
Tệp jdoconfig. xml khai báo thƣ viện JDO để tƣơng tác với kho dữ liệu trung tâm của
Google.
Tệp web.xml xác định xem servlet nào đƣợc gọi khi web server nhận đƣợc yêu cầu. Ngoài ra, ứng dụng còn có thêm thƣ viện của bộ công cụ phát triển App Engine SDK, thƣ viện máy ảo Java. Đồng thời, NSD có thể tạo thêm các tệp Java, Javascript, HTML, CSS, JSP/Servlet,…
Từ đây chúng ta có thể tự do thoải mái lập trình cho ứng dụng của mình.
5.2.4. Triển khai ứng dụng
Sau khi đã xây dựng đƣợc ứng dụng App Engine, để triển khai ứng dụng đó lên nền tảng GAE của Google, NSD phải có một tài khoản thƣ điện tử Gmail và tài khoản đó phải đƣợc cấp quyền tạo ứng dụng trên GAE. Để cấp quyền cho tài khoản tạo đƣợc ứng dụng, NSD có thể đăng nhập vào địa chỉ https://appengine.google.com/ để gửi yêu cầu tới Google. Sau khi tài khoản đã có quyền, NSD có thể tạo định danh cho ứng dụng trên nền tảng GAE, với ứng dụng mô phỏng của em là vietnam-tour. Khi đã có
định danh cho ứng dụng trên GAE, NSD sẽ chọn chức năng triển khai ứng dụng trên thanh công cụ của trình soạn thảo Eclipse, nhập một số thông tin về định danh, tên ứng dụng, tài khoản của hộp thƣ điện tử gmail và mật khẩu của thƣ điện tử, ứng dụng sẽ đƣợc triển khai trên GAE. Ví dụ trang web của em đƣợc triển khai trên địa chỉ https://vietnam-tour.appspot.com/.
5.3. Ứng dụng website Quản lý du lịch 5.3.1 Giới thiệu ứng dụng 5.3.1 Giới thiệu ứng dụng
Với mục đích thực nghiệm cho những lý thuyết đã nghiên cứu đồng thời cũng nắm bắt theo nhu cầu phát triển website của các doanh nghiệp ngày càng tăng, em chọn ứng dụng website Quản lý du lịch để mô phỏng sự ứng dụng của ĐTĐM.
Hệ thống website áp dụng cho các công ty du lịch muốn quảng bá và tổ chức các tour du lịch. Hoạt động của website nhƣ sau:
Ngƣời quản trị truy cập vào hệ thống để cập nhật thông tin về các tour du lịch,
tin tức, thông tin về khách sạn, các loại dịch vụ và để quản lý việc đặt tour của khách hàng;
Khách hàng duyệt website xem thông tin về các tour du lịch, có thể đặt tour
với công ty hay liên hệ với các khách sạn mà họ muốn đến và cũng có thể chỉ xem tin tức. Để xem thông tin của tour mà khách hàng quan tâm, họ có thể sử dụng chức năng tìm kiếm thông tin.
5.3.2 Phân tích thiết kế hệ thống
5.3.2.1 Biểu đồ use case
Với mô tả nhƣ phần 5.3.1, ta xác định đƣợc hệ thống có các tác nhân: Khách
hàng, người quản trị và các use case: Đặt tour, Chọn khách sạn, Tìm kiếm thông tin,
Cập nhật thông tin, Đăng nhập, Quản lý đặt tour, trong đó use case Cập nhật thông tin include use case Tìm kiếm thông tin.
Hình 5.10. Biểu đồ use case tổng quát
Trong các use case của hệ thống có Cập nhật thông tin có thể phân rã thành các use case nhỏ hơn (phân rã tới mức lá). Biểu đồ phân rã này đƣợc biểu diễn trên hình 5.12
Hình 5.11. Biểu đồ phân rã use case Cập nhật thông tin
5.3.2.2 Biểu đồ lớp
Qua mô tả hoạt động của website ta có thể thấy đƣợc hệ thống gồm các đối tƣợng: Ngƣời quản trị, Khách hàng, Khách sạn, Tin tức, Tour, Loại dịch vụ, Đặt tour; các thuộc tính và phƣơng thức của từng lớp đƣợc mô tả nhƣ trong hinh 5.13
Hình 5.12. Biểu đồ lớp của ứng dụng
5.3.2.3 Biểu đồ hoạt động
Hoạt động là một quy trình đƣợc định nghĩa rõ ràng, có thể đƣợc thực hiện bởi
một hàm hoặc một nhóm đối tƣợng. Biểu đồ hoạt động xác định các hành động phải thực hiện trong phạm vi một phƣơng thức. Trong các lớp Tin tức, Loại dịch vụ, khách
sạn, tour đều có hàm Cập nhật thông tin, biểu đồ trong hình 5.14 mô tả chung phƣơng
thức Cập nhật thông tin trong các lớp này.
Hình 5.13. Biểu đồ hoạt động cho phương thức Cập nhật thông tin trong các lớp "Tin tức", "Khách sạn", "Tour", "Loại dịch vụ"
5.3.2.4 Biểu đồ trạng thái
Dựa trên các lớp đã tìm ra trong mô hình lớp, biểu đồ trạng thái sẽ đƣợc xây dựng cho mỗi lớp. Biểu đồ này sẽ cho biết các trạng thái có thể có của các đối tƣợng lớp đó và các điều kiện chuyển đổi giữa các trạng thái.
Hình 5.14. Biểu đồ trạng thái cho lớp Đặt tour
5.3.2.5 Biểu đồ tuần tự
Biểu đồ tuần tự là một dạng biểu đồ tƣơng tác biểu diễn mối quan hệ giữa các đối tƣợng, giữa các đối tƣợng và tác nhân theo thứ tự thời gian trong đó nhấn mạnh thứ tự thực hiện của các tƣơng tác.
Hoạt động Đặt tour thực hiện trong hệ thống có sự tham gia của các đối tƣợng: khách hàng, Form thông tin tour, Form Đặt tour, Điều khiển đặt tour, Dữ liệu đặt tour.
Hình 5.16. Biểu đồ tuần tự của use case Cập nhật thông tin
Hoạt động Cập nhật thông tin đƣợc thông suốt bởi các đối tƣợng: Ngƣời quản trị, Form đăng nhập, điều khiển đăng nhập, Form quản lý thông tin, điều khiển cập nhật thông tin, kho dữ liệu.
5.3.3 Lập trình ứng dụng
Ứng dụng đƣợc xây dựng bằng GAE API trên tảng điện toán đám mây, Servlet & JSP dựa trên mô hình MVC (Model, View, Controller).
- View: Sử dụng JSP và HTML để hiển thị dữ liệu.
- Model: gồm các phƣơng thức để thực hiện các nghiệp vụ sử dụng API của GAE để tƣơng tác với cơ sở dữ liệu.
- Controller: Sử dụng Servlet để điều hƣớng, đón nhận và xử lí yêu cầu từ phía client. Lớp này chứa các hàm gọi các phƣơng thức từ lớp Model.
Hình 5.17 API sử dụng trong lớp TourModel
Hình 5.19. Lớp TourServlet
5.3.4 Cách sử dụng trang Web Quản lý du lịch
5.3.4.1 Truy cập trang web Quản lý du lịch
Truy cập web Quản lý du lịch theo địa chỉ http://vietnam- tour.appspot.com/index.jsp.
5.3.4.2 Quản trị Web
Để quản trị trang web truy cập theo địa chỉ: http://vietnam-
tour.appspot.com/manager/login.jsp
Hình 5.21.Trang đăng nhập quản trị
Các mục quản trị bao gồm: Loại dịch vụ, Tour, User, Đặt tour, Khách sạn, Tin tức.
- Ngƣời quản trị muốn cập nhật thông tin về các loại dịch vụ, chọn mục "Quản
trị loại dịch vụ". Các thao tác cập nhật thông tin bao gồm: Thêm mới, sửa và
xóa.
- Để quản trị phần nội dung các tour ngƣời quản trị chọn mục "Quản trị tour", Giả sử khi thêm mới một tour Hà Nội – Đà Lạt với thông tin nhƣ trong hình 5.23.
Hình 5.23. Trang Quản trị Tour
Kết quả khi vào trang chính, click vào “Tour trong nước” màn hình hiện lên nhƣ hình 5.24.
Hình 5.24. Trang Tour trong nước
- Để thêm bớt hay sửa thông tin ngƣời dùng ngƣời quản trị sẽ chọn mục "Quản
trị user".