Xây dựng website hỗ trợ tìm kiếm việc làm
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA HỆ THỐNG THÔNG TIN -∇ -
KHOÁ LUẬN TỐT NGHIỆP
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM
Khoá : 1 (2006-2011)
Trang 2Khóa luận này được chia làm 3 phần:
- Phần 1: Khảo sát thực tế, tìm hiểu nhu cầu người dùng
- Phần 2: Phương pháp phân tích thiết kế và công nghệ nền tảng
- Phần 3: Phân tích thiết kế hệ thống và hiện thực hệ thống
- Phần 4: Hướng phát triển và kết luận
Trang 3Trước tiên chúng em xin gửi lời cảm ơn chân thành tới TS.Nguyễn Đình Thuân đã dành thời gian để hướng dẫn chúng em hoàn thành khóa luận tốt nghiệp này Ngoài ra chúng em cũng gửi lời cảm ơn tới các thầy cô khoa Hệ thống thông tin thuộc trường Đại học công nghệ thông tin - Đại học quốc gia TP.Hồ Chí Minh đã rất tận tâm hướng dẫn việc học tập của chúng em và các bạn sinh viên khác trong suốt những năm tháng học tập tại trường Đồng thời lời cảm ơn này cũng xin dành cho anh Nguyễn Quan Thái đã góp ý và nhiệt tình cung cấp dữ liệu cho em Cuối cùng chúng em xin cảm ơn cha mẹ là những người sinh ra và dưỡng dục chúng em tới ngày hôm nay Chúng em xin dành thành quả của khóa luận này để tặng những người
mà chúng em tri ân
Do kiến thức và thời gian có hạn nên khóa luận này chắc chắn không tránh khỏi thiếu sót, mong các thầy cô chân thành góp ý
Sinh viênNguyễn Hữu HữuNguyễn Tiến Long
Trang 4NHẬN XÉT (Của giảng viên hướng dẫn)
NHẬN XÉT
Trang 5
MỤC LỤC DANH MỤC SƠ ĐỒ, HÌNH
Trang 6CHƯƠNG 1 : GIỚI THIỆU ĐỀ TÀI1.1 TỔNG QUAN VỀ ĐỀ TÀI
Trong thời đại ngày nay, nhu cầu việc làm và nhân lực là rất lớn, do đó xây một hệ thống cho phép nhà tuyển dụng đăng tin tìm việc làm, qua đó người tìm việc có thể tìm thấy các việc làm phù hợp với khả năng là rất cần thiết
Hệ thống phục vụ cho đối tượng chính yếu là sinh viên và các doanh nghiệp, là cầu nối giữa sinh viên và các doanh nghiệp
Ngoài ra hệ thống còn cho phép các trung tâm đào tạo đăng các tin tức đào tạo, các khóa huấn luyện, qua đó người tìm việc có thể tìm được các khóa đào tạo để rèn luyện và nâng cao các kỹ năng mà từ đó có thể tìm được công việc phù hợp hơn với nhu cầu thực tế
1.2 Ý NGHĨA ĐỀ TÀI
Trước thực tế nhu cầu tìm kiếm việc làm cùng với sự phát triển của công nghệ thông tin mạnh mẽ của Việt Nam, việc xây dựng một hệ thống tìm việc trực tuyến hiệu quả là một công cụ hết sức cần thiết Mặc dù có rất nhiều trang web đăng tuyển dụng và tìm việc nhanh nhưng vẫn còn nhiều vấn đề về việc người tìm việc tạo hồ sơ như sau:
- Những nội dung nhập liệu quá nhiều
- Nội dung nhập liệu quá rời rạc chưa hướng tới người dùng như là người dùng đang ở tình trạng nào? Yêu cầu công việc gì? Và cần nhập nội dung gì?
Vì vậy, việc phân tích nội dung tạo hồ sơ cho người tìm việc là hết sức quan trọng Việc phân tích tình trạng người dùng, các dạng hồ sơ, nhóm thông tin cần điền vừa hướng đến tiêu chí người tìm việc dễ dàng trong việc tạo hồ sơ cũng như các nhà tuyển dụng vừa ý khi
Trang 7Cùng với sự tích hợp công nghệ mới, nhóm tìm hiểu và phân tích nhu cầu người dùng dựa trên tiêu chí tốc độ xử lý nhanh và thao tác đơn giản giúp người dùng dễ dàng trong việc tìm công việc phù hợp tạo và gửi hồ sơ ứng tuyển vừa ý nhà tuyển dụng.
Khóa luận hướng tới việc phân tích tiêu chí của người dùng, xây dựng công thông tin điện tử dựa trên công nghệ … để cung cấp cho người tìm việc nói chung và các bạn sinh viên nói riêng công cụ để tạo hồ sơ trực tuyến, là nơi các ứng viên tìm kiếm việc làm phù hợp với khả năng Bên cạnh đó nhà tuyển dụng và trung tâm đào tạo cũng có thể dễ dàng đăng tin tuyển dụng hoặc tin đào tạo lên website
Trong quá trình thực hiện khóa luận này nhóm đã áp dụng được những điều được học trong nhà trường vào thực tế và cũng đã biết được thêm các công nghệ mã nguồn mở trên nền ngôn ngữ JAVA như Java server pages framework, Spring framework, Hibernate framework Ngoài ra nhóm còn tìm hiểu qui trình phát triển phần mềm ICONIX áp dụng khóa luận
1.3 KHẢO SÁT THỰC TẾ
Hiện nay, nhu cầu tìm kiếm việc làm theo khả năng và nhu cầu tìm kiếm nguồn nhân lực gặp nhiều khó khăn khiến các nhà tuyển dụng không tìm được nhân viên phù hợp cũng như nhân viên không tìm được vị trí công việc phù hợp
Thực tế hiện nay có rất nhiều website tìm việc và tuyển dụng rất hiệu quả như là VietNamWork.com, Timviecnhanh.com,… giúp người tìm việc tìm thấy những công việc rất
dễ dàng nhưng ở khâu tạo hồ sơ vẫn chưa thỏa mãn được nhu cầu của Người dùng cụ thể là
ở bước nhập liệu bị ràng buộc quá nhiều thông tin
Hệ thống hiện thực trong khóa luận này nhằm đáp ứng nhu cầu trên: Giúp người tìm việc tạo hồ sơ dễ dàng và thuận lợi trong việc gửi hồ sơ đến các nhà tuyển dụng
Đánh giá website tìm việc khác hiện nay: ????????????
Cần phát triển thêm những điểm nào??????????????
Trang 8CHƯƠNG 2: PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ VÀ CÔNG NGHỆ
NỀN TẢNG2.1 PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ
2.1.1 Giới thiệu qui trình phát triển phần mềm ICONIX:
Trang 9Hình 2.1.1a Mô hình qui trình ICONIX
Có 6 bước trong qui trình ICONIX được thực hiện như sau:
- Bước 1: Phân tích yêu cầu:
• Yêu cầu chức năng: Định nghĩa ra các chức năng hệ thống sẽ làm
• Mô hình hóa phạm vi: Hiểu được không gian vấn đề và các thuật ngữ nhập nhằng trong khâu phân tích giữa khách hàng và người phân tích yêu cầu
• Yêu cầu hành vi: Định ra hệ thống và người dùng sẽ tương tác thế nào dựa vào các bản phác thảo giao diện (GUI prototype) và xác định tất cả các trường hợp sử dụng
sẽ hiện thực Tuy nhiên ở bước này không yêu cầu phải xác định đầy đủ hết tất cả các trường hợp sử dụng Trong các bước sau sẽ giúp chúng ta xác định thêm các trường hợp sử dụng mà chưa xác định được ở bước này
• Hoàn tất mốc thứ nhất: xem xét các trường hợp sử dụng đã xác định được có phù hợp với yêu cầu của khách hàng hay chưa
- Bước 2: Phân tích và thiết kế sơ bộ:
• Robustness analysis(Phân tích sơ bộ): Vẽ ra các mô hình robustness(bức tranh về các đối tượng trong usecase), vẽ lại luồng đi như trong đặc tả usecase
Trang 10• Cập nhật domain model: ở bước này chúng ta sẽ tìm các lớp còn thiếu , loại bỏ sự nhập nhằng trong việc đặt tên lớp, thêm thuộc tính và các
phương thức cho cho các lớp
• Đặt tên tất cả chức năng logic phần mềm cần thiết để usecase hoạt động
• Viết lại bản nháp đặc tả usecase đầu tiên
- Bước 3 (Cột mốc 2) : Đánh giá lại khâu phân tích và thiết kế sơ bộ
- Bước 4 : Thiết kế chi tiết
• Mô hình sequence: Dựa trên bản nháp đặc tả usecase đầu tiên vẽ ra các sơ
đồ trình tự Mục tiêu của bước này là xác định ra các hành vi của các lớp
• Cập nhật lại các mô hình domain trong khi đang vẽ sở đồ trình tự Ở bước này mô hình miền (domain model) gần như tiến sát đến mô hình lớp (class diagram) vì chúng ta xác định được thêm các thuộc tính và các phương thức ở bước này
• Tinh chỉnh lại các mô hình tĩnh
- Bước 5 (Cột mốc 3) : Đánh giá lại khâu phân tích một cách kỹ lưỡng và chi tiết trước khi đi vào hiện thực chương trình
- Bước 6 : Hiện thực chương trình:
• Lập trình và kiểm thử tưng đơn vị nhỏ: Dựa vào các bản thiết kế ở các bước trên tiến hành việc lập trình và kiểm thử từng đơn vị nhỏ(các hàm trong các class)
• Tích hợp các chức năng lại với nhau và kiêm thử theo kịch bản và tình huống như đặc tả usecase
• Xem lại sự tương đương giữa các đoạn mã và cập nhật lại các mô hình để chuẩn bị cho khâu tiếp theo của việc phát triển hệ thống
2.1.2 Điểm khác biệt giữa qui trình ICONIX và các qui trình khác:
Qui trình ICONIX đưa ra cách để làm sao từ bước đặc tả usecase đến bước hiện thực chương trình một cách nhanh và hiệu quả nhất, giảm tải một số khâu chiếm quá nhiều thời gian trong các qui trình lớn khác, ví dụ như qui trình RUP thường xảy
ra tình trạng analysis paralysis( tê liệt phân tích)
Việc đưa thêm lược đồ vững mạnh(robustness diagram) giúp cho việc vẽ các lược đồ tuần tự(sequence diagram) và các mô hình lớp(class diagram) dễ dàng hơn Lược đồ vững mạnh là cầu nối giữa các bản đặc tả usecase và việc vẽ các lược đồ tuần tự, giúp cho người thiết kế tách bạch rõ ràng các hành vi của hệ thống, hạn chế
Trang 11diagram chúng ta sẽ khám phá ra các chức năng hành vi ẩn mà không nhìn thấy được lúc viết đặc tả usecase Nhờ đó mà lược đồ tuần tự khi vẽ sẽ sát với yêu cầu thực tế của khách hàng hơn.
Đưa ra mô hình lĩnh vực(domain modeling): đây là mô hình tiền thân của mô hình lớp (class diagram) Mô hình này được đưa ra trước tiên nhằm đưa ra một từ điển thuật ngữ sử dụng trong dự án Mục đích là làm cho mọi người hiểu rõ hơn về không gian của dự án bằng các thuật ngữ rõ ràng Mô hình này giúp xác định phạm
vi và các hình thức – nền tảng của việc xây dựng các trường hợp sử dụng( usecases)
Mô hình này cũng giúp cho việc trao đổi giữa các thành viên trong dự án được thuận tiện và dễ hiểu hơn dựa vào bảng các thuật ngữ được đưa ra
Bản đặc tả usecase được cập nhật dần theo từng cột mốc của qui trình phát triển, các qui trình khác thường yêu cầu bản đặc tả usecase chi tiết và bao quát được hết các luồng đi khác của usecase tại một khâu trong qui trình
2.1.3 Tại sao lại chọn qui trình ICONIX:
- Chỉ cần sử dụng một tập con các lược đồ lõi của UML: dùng 4 trong 14 lược đồ của UML
- Qui trình này dễ dàng được theo dõi ngay từ bước đầu tiên của việc phát triển dự án
- Các đặc tả uscase bao quát được hết toàn bộ các bổi cảnh của usecase, và được cập nhật lại sau bước vẽ robustness diagram và sequence diagram
- Hướng đến việc thiết kế dự án theo hướng đối tượng từ các usecase
- Là qui trình thực tế đã được kiểm chứng qua nhiều dự án lớn
2.1.4 Áp dụng qui trình ICONIX vào khóa luận:
Qui trình ICONIX là một qui trình rất hay trong việc phát triển phần mềm, để
áp dụng được qui trình ICONIX một cách hiệu quả đòi hỏi nhiều kinh nghiệm làm việc thực tế
Trong quá trình làm khóa luận này nhóm đã tìm hiểu và vận dụng được những kiến thức sau:
- Khâu phân tích yêu cầu
- Khâu phân tích thiết kế sơ bộ
- Thiết kế chi tiết
Trang 122.2.1.2 Các thành phần chính của Spring:
Hình 2.2.1.2a Các Thành Phần Của Spring
Spring Core Container: Core container cung cấp chức năng cơ bản của
Spring Thành phần chính của nó là Bean Factory, một cài đặt của Factory pattern BeanFactory áp dụng IoC pattern để tách bạch và giảm sự phụ thuộc giữa các thành phần của ứng dụng
Spring Context/Application Context: Spring context là một file cấu
hình để cung cấp thông tin ngữ cảnh của Spring Spring context cung cấp các dịch vụ cấp cao như truy cập JNDI, tích hợp EJB, e-mail,
Trang 13o Lập trình hướng khía cạnh(aspect oriented programing) là một sự
bổ sung thêm cho lập trình hướng đối tượng, giúp cho các lập trình viên tập trung vào phần xử lý nghiệp vụ hơn thay vì phải lặp đi lặp lại các đoạn mã cùng thực hiện một chức năng nào đó nhiều lần, ví
dụ như: ghi nhật ký(logging), thực thi các giao tác(transaction)
o Spring AOP module tích hợp chức năng lập trình hướng khía cạnh
vào Spring framework thông qua cấu hình của nó Spring AOP module cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring
o Với Spring AOP chúng ta có thể tích hợp declarative transaction management vào trong ứng dụng mà không cần dựa vào EJB component Spring AOP module cũng đưa lập trình metadata vào trong Spring Sử dụng cái này chúng ta có thể thêm ký pháp(annotation) vào mã trình(source code) để hướng dẫn Spring, nơi và làm thế nào để liên hệ với các khía cạnh (aspects)
Spring DAO: Tầng JDBC và DAO đưa ra một cây phân cấp các ngoại
lệ(exception) để quản lý kết nối đến cơ sở dữ liệu(database), kiểm soát ngoại lệ và thông báo lỗi được ném ra bởi các nhà cung cấp cơ sở dữ liệu Tầng ngoại lệ(exception) đơn giản là kiểm soát lỗi và giảm khối lượng mã nguồn mà chúng ta cần viết như mở và đóng kết nối Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng
Spring.
Spring ORM: Spring có thể tích hợp với một vài ORM framework để
cung cấp Object Relation tool bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps
Spring Web module: Nằm trên application context module, cung cấp các
ngữ cảnh cho các ứng dụng web, hỗ trợ tích hợp với các bộ khung làm
Trang 14việc nổi tiếng khác như Struts, JSF và Webwork… Web module cũng làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của request vào các đối tượng domain.
Spring MVC Framework: MVC Framework thì cài đặt đầy đủ đặc tính
của MVC pattern để xây dựng các ứng dụng Web MVC framework thì cấu hình thông qua giao diện và chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và Excel file
2.2.1.3 Trình bày cơ chế đảo ngược kiểm soát (Inversion of Control) và tiêm
sự phụ thuộc (Dependence Injection)
Trang 15- Cơ chế Inversion of Control dịch ra là cơ chế đảo ngược sự kiểm soát, nhằm giảm tải mức độ phụ thuộc giữa các đối tượng Với sự hỗ trợ của cơ chế đảo ngược sự kiểm soát này chúng ta không cần phải tạo đối tượng ngay trong mã nguồn mà mô tả chúng sẽ được tạo ra thế nào, hơn thế nữa, chúng ta không cần không cần phải kết nối các thành phần(components)
và các dịch vụ(services) một cách trực tiếp mà chỉ cần mô tả thành phần nào cần dịch vụ nào trong một tập tin cấu hình
- Để hiểu rõ hơn ta đi vào ví dụ sau:
Ví dụ này sẽ có một lớp là Speaker(hiểu nôm na là cái loa) và có một phương thức là sayHello()
Hình 2.2.1.3b
Cài đặt một hàm main ngay trong lớp để test cho nhanh
Trang 16Hình 2.2.1.3c.
Trong hàm main bên trên chúng ta có truy cập đến một tập tin tên là beans.xml Tập tin này rất quan trọng đối với các ứng dụng chạy trên Spring Nó chứa các thông tin cấu hình của các bean được dùng trong ứng dụng Với ví dụ này thì nội dung tập tin beans.xml như sau:
Hình 2.2.1.3d
Bây giờ chạy hàm main thì dòng chữ Hello Spring sẽ được in ra.Mặc dù là một ví dụ đơn giản nhưng cũng giúp bạn hình dung phần nào về Spring Nó sẽ giúp ích rất nhiều cho bạn khi đi vào các khái niệm khá phức tạp của Spring sau này.Như đã thấy trong hàm main, việc khởi tạo đối tượng Speaker từ lớp Speaker không làm theo cách truyền thống mà là:
Speaker speaker = new Speaker();
Thay vào đó, speaker được tạo thành bằng cách:
Speaker speaker = (Speaker)factory.getBean(“Speaker”);
Trong đó, factory là một đối tượng của lớp BeanFactory (Spring có hơn một ngàn lớp/interface như vậy) có tác dụng như một nhà máy sản xuất (tạo ra) các đối tượng khi người dùng đưa các yêu cầu vào, ở trường hợp này người dùng đã yêu cầu factory tạo ra 1 đối tượng từ mẫu có tên là Speaker
Quan ví dụ trên chúng ta chỉ mới thấy được thay vì phải tạo đối tượng trong hàm main thì lại tạo bằng cách của Spring, tuy nhiên vẫn chưa thấy rõ lắm sự khác biệt Để hiểu
Trang 17Bây giờ, giả sử các cái loa trước khi sayHello thì cần phải đi qua một bộ phiên dịch Translator Ta sẽ viết lớp Translator có một phương thức traslate in ra dòng chữ Hello Để lớp này có thể in ra được nhiều thứ tiếng ta sẽ viết dưới dạng 1 interface:
public interface Translator{ public void translate(); }Sau đó viết lớp EnglishTranslator để hiện thực interface này:
Trang 18Hình 2.2.1.3f.
Chạy thử sẽ in ra câu chào bằng tiếng Anh Nếu không thích tiếng anh ta có thể in ra câu chào bằng tiếng Việt bằng cách viết tiếp một class VietnameseTranslator như sau:
Hình 2.2.1.3g
Để in ra đuợc tiếng Việt ta phải chỉnh lại hàm main một chút Thay vì viết:
Translator translator = new EnglishTranslator();
Ta viết:
Translator translator = new VietnameseTranslator();
Như vậy rõ ràng sự bất tiện xuất hiện mỗi khi ta muốn thay đổi qua lại giữa tiếng Anh và tiếng Việt Sự phụ thuộc giữa đối tượng thuộc lớp Speaker và Translator được giải quyết trong chương trình nghĩa là khi nào muốn tiếng Việt thì ta chỉnh lại đoạn code một ít
Sự điều khiển (control) phụ thuộc (dependency) giữa các đối tượng do chương trình đảm trách Nó là cách thông thường ta vẫn làm Gọi là sự điều khiển bình thường
Bây giờ ta sửa lại hàm main để sử dụng Spring:
Trang 192.2.2 JSF:
Trang 202.2.2.1 Tổng quan về JSF
JSF là một bộ khung làm việc (framework) được phát triển dự trên mẫu thiết kế(design pattern) MVC(một trong những mẫu thiết kế nổi tiếng thường dùng cho các hệ thống lớn) JSF bao gồm các thành phần giao diện phía server và các API để trình bày các gói giao diện người dùng, quản lý trạng thái của các gói đó, xử lý các
sự kiện phát ra từ các gói giao diện khi người dùng thao tác lên các gói giao diện đó, xác thực dữ liệu, chuyển đổi dữ liệu, phân luồng điều hướng giữa các trang, hỗ trợ
đa ngôn ngữ và cung cấp các mở rộng cho các gói giao diện người dùng này
JSF tách bạch rõ ràng giữa phần giao diện người dùng và các hành vi tương ứng của các thành phần Lấy một ví dụ đơn giản: khi người dùng nhấp chuột vào một nút trên giao diện trang web(UI component) thì sẽ phát ra một sự kiện để gửi đến backing bean(sẽ được trình bày phần sau) đang chờ lắng nghe và xử lý sự kiện được phát ra từ nút đó
2.2.2.2 Các thành phần quan trọng của JSF:
UI Component (còn gọi là một control hay đơn giản là component) : một đối tượng có trạng thái, được chứa trên server, cung cấp các chức năng cụ thể để tương tác với một người dùng cuối UI component là những JavaBean với các
thuộc tính, phương thức, sự kiện Chúng được tổ chức thành một cây các
component thường hiển thị như một trang.
Renderer: Trả lời cho việc hiển thị một UI component và trao đổi một dữ liệu nhập của người dùng vào giá trị của component Renderer có thể được thiết
kế để làm việc với một hoặc nhiều UI component, và một UI component có thể tập hợp với nhiều renderer khác nhau.
Validator: Trả lời cho việc chắc chắn rằng giá trị nhập vào bởi người dùng được chấp nhận Một hoặc nhiều validator có thể được tập hợp với một UI
component
Backing beans: Các Java Bean xác định tập hợp các giá trị từ các UI
component và bổ sung các phương thức lắng nghe cho các sự kiện(event listener)
Chúng cũng có thể nắm giữ các tham chiếu đến các UI component
Trang 21Event/listener: JSF sử dụng mô hình event/listener JavaBeans (cũng được
sử dụng cho Swing) UI component (và những đối tượng khác) tạo ra các event, và các listener có thể đăng ký để xử lý các sự kiện Các backing bean sẽ hiện thực các
phương án để xử lý các sự kiện phát ra từ các UI component
Messages: Thông tin hiển thị cho người dùng Chỉ bất kỳ thành phần ứng
dụng trong (backing beans, validators, converter …) có thể tạo ra thông tin hoặc thông điệp lỗi nhằm hiển thị cho Người dùng
Navigation: Khả năng định vị và điều phối từ trang này đến trang khác JSF
có một hệ thống định vị mạnh mẽ tích hợp với những event listeners(bộ lắng nghe sự kiện)
2.2.2.3 Vòng đời của việc xử lý request: gồm 6 bước
Hình 2.2.2.3a
Bước 1: Restore View: Hiển thị thay thế tất cả các component tạo nên một
trang cụ thể Nó có thể lưu trữ trên client (thông thường trong một field ẩn trên trình duyệt) hoặc trên server (thông thường trong session)
Bước 2: Apply Request Values: Mỗi UI component chấp nhận dữ liệu nhập
Trang 22framework ấn định giá trị được submit dựa trên tham số gởi đi trong request Quá trình này gọi là decoding.
Bước 3: Process Validation: trong bước này, JSF đặt cây component và hỏi
mỗi component có chắc chắn rằng giá trị submit là có thể chấp nhận không Bởi vì giá trị được submit của mỗi component nhập vào được cập nhật bởi bước 2,
component bây giờ có hầu hết dữ liệu hiện thời của user Trước khi validation xảy
ra, giá trị được submit được chuyển đổi, bằng mỗi converter đã đăng ký cho
component hoặc converter mặc định
Bước 4: Update Model Values: Bây giờ chúng ta đã chắc chắn về giá trị
cục bộ của các component đã được cập nhật và chính xác và đúng kiểu, có thể
chuyển đi với bất kỳ bean nào được tập hợp hoặc mô hình các đối tượng Bởi vì các đối tượng được tập hơp với các component thông qua các phát biểu JSF EL, đây là nơi các phát biểu này được kiểm tra và các thuộc tính được cập nhật dựa trên giá trị
cụ bộ của component
Bước 5: Invoke Application: Gửi dữ liệu xuống cho các phương thức ở các
cấp phái dưới xử lý( hay gọi các hàm ở cấp dưới) Bước này xảy ra trong beans
backing-Bước 6: Render Response: Tại thời điểm này, tất cả xử lý bởi framework
và ứng dụng đã hoàn tất Tất cả chờ được gởi đi trả lời cho người dùng, và đây là mục tiêu chính của bước này Mục tiêu thứ hai là lưu lại trạng thái hiển thị để nó có thể được phục hồi trong bước Restore View nếu user yêu cầu lại Trạng thái hiển thị lưu lại trong bước này bởi vì thường thì hiển thị được lưu trên phía máy khách(phía người dùng), vì thế nó là một phần của phản hồi nhằm gởi trả cho người dùng Trong trường hợp này, JSF đang lưu trạng thái trên server, vì thế hiển thị hầu hết được lưu trữ trong session của người dùng
2.2.3 Hibernate:
2.2.3.1 Tổng quan về hibernate
Hiện nay các hệ quản trị CSDL dựa trên mô hình quan hệ, hệ quản trị CSDL đối tượng gần cũng đã được một số hãng CSDL như Oracle phát triển
Trang 23ánh xạ và xây dựng các bảng để lưu trữ và ánh xạ các điều kiện sang các câu truy vấn Công việc này phải lặp đi lặp lại khiến lập trình viên thấy nhàm chán và việc truy cập không được hoàn toàn linh hoạt, hơn nữa không mấy ai giỏi cả về lập trình lẫn quản trị CSDL Vì thế Hibernate framework ra đời nhằm giúp gắn kết việc lập trình hướng đối tượng và CSDL quan hệ Đối với người lập trình thì mọi câu truy vấn đều có thể thực hiện trên đối tượng và họ gần như trong suốt đối với việc lưu trữ CSDL như thế nào Còn với người quản trị CSDL thì họ cũng chỉ cần quan tâm đến việc tối ưu hóa CSDL của mình.
Hibernate là một bộ khung(framework) mã nguồn mở ánh xạ giữa đối tượng và các mối quan hệ của các đối tượng dựa trên mối quan hệ các bảng của
hệ cơ sở dữ liệu quan hệ Hibernate giúp cho các lập trình viên hạn chế việc phụ thuộc quá nhiều vào các JDBC API Hibernate hỗ trợ tất cả các hệ cơ sở dữ liệu lớn Đặc biệt HQL (Hibernate Query Language) được thiết kế như là một mở rộng cho SQL, cung cấp một cầu nối giữa đối tượng và các mối quan hệ giữa các đối tượng lại với nhau Hibernate cung cấp các cơ chế truy vấn, cập nhật dữ liệu, quản lý giao tác, khai báo các câu lệnh truy vấn và định nghĩa các mối quan hệ giữa các thực thể
2.2.3.2 Vòng đời của đối tượng trong Hibernate:
Trang 24Hình 2.2.3.2a.
Dựa vào hình trên ta có thể thấy được trạng thái của các đối tượng có thể
được chuyển đổi từ trạng thái transient sang trạng thái persistent và từ trạng thái persistent sang trạng thái detached Dưới đây là các chú giải về các trạng thái của
đối tượng trong hibernate và các phương thức tương ứng
Trong Hibernate một đối tượng có thể có 3 trạng thái:
- Transient: Khi một đối tượng được khởi tạo thì nó không được lưu trữ
ngay lập tức vào cơ sở dữ liệu mà nó được lưu tạm trên bộ nhớ Đối tượng này không có quan hệ với session hiện tại của Hibernate,ta có thể hiểu nôm na là đối tượng này chưa liên quan đến dòng nào trong cơ sở dữ liệu
và có thể bị thu gom bởi garbage collector khi không còn được tham
chiếu bởi bất kì đối tượng nào
- Persistent: Đối tượng có quan hệ với session hiện tại của Hibernate và
trạng thái của nó được đồng bộ với một dòng dữ liệu hợp lệ trong cơ sở dữ
liệu Đối tượng ở trạng thái này được khởi tạo khi thực thi hàm save() Khi một đối tượng persistent tham gia một giao tác thì đối tượng này sẽ
được đồng bộ hóa với cơ sở dữ liệu khi giao tác này được hoàn tất Đôi
khi đối tượng persistent được đồng bộ hóa với cơ sở dữ liệu trước khi
giao tác được hoàn tất để chắc chắn rằng giao tác này biết được những thay đổi của giao tác thực thi trước đó
Khi giao tác này kết thúc, các đối tượng persistent sẽ chưa cập nhật vào cơ
sở dữ liệu, hibernate sẽ kiểm tra những đối tượng nào bị thay đổi và chỉ cập nhật
chúng vào cơ sở dữ liệu Tiến trình này được gọi là dirty checking Dirty objects là
các đối tượng đã được thay đổi nhưng chưa được đồng bộ hóa vào cơ sở dữ liệu Tiến trình này làm tăng hiệu hiệu suất của một số hệ cơ sở dữ liệu nhưng cũng làm giảm hiệu suất đối với một số hệ cơ sở dữ liệu khác Do đó Hibernate cho phép
Người dùng có thể thiết lập cơ chế này bằng cách thêm thuộc tính dynamic-update
= “true” trong lớp ánh xạ(mapping class), với cách này hibernate sẽ tự động sinh ra
Trang 25- Detached: Đối tượng đã từng có trạng thái persistent nhưng hiện tại đã
không còn giữ quan hệ hoặc liên quan với session Ở đây chúng ta nói một đối tượng có quan hệ với Session nghĩa là session có tham chiếu đến đối tượng đó, hay một cách khác là chịu sự quản lý của session Các đối tượng
có trạng thái detached sẽ được giải phóng bởi garbage collector của JVM
2.2.3.3 Giải thích về các phương thức được dùng trong vòng đời của các đối tượng trong hibernate:
- save(): dùng để lưu một đối tượng với trạng thái transient thành đối tượng persistent trả về mã đối tượng(id), persist() giống save() nhưng không trả
về gì cả
- saveOrUpdate(): nếu là đối tượng mới thì lưu xuống db, nếu không thì update xuống cơ sở dữ liệu, cái này sẽ chọn ra để kiểm tra trước khi save hoặc update.
- merge(): kiểm tra xem có đối tương nào với mã số(id) như thế tồn tại
trong session không, nếu có thì update vào đối tượng đã tồn tại đó, nếu không thì tạo mới một đối tượng và save xuống
- load(): dùng để load một đối tượng từ database lên, nó sẽ có trạng thái persistent, ném ra ngoại lệ(throw exception) nếu mã đối tượng(id) không
tồn tại
- get(): giống load(), trả về null nếu không tồn tại.
- refresh(): làm tươi mới(refresh) một đối tượng đang ở trạng thái
persistent
- delete(): load đối tượng lên và xoá nó đi, nếu không muốn load lên thì
dùng session.createQuery(“delete from user where”).executeUpdate()
- evict(): tách một đối tượng ra khỏi session, biến nó từ trạng thái persistent
thành transient
- isDirty(): Các dirty objects là những đối tượng bị thay đổi nhưng chưa
được đồng bộ hóa với cơ sở dữ liệu Hibernate cho phép Người dùng có thể thiết lập cơ chế này bằng cách thêm thuộc tính dynamic-update =
“true” trong lớp ánh xạ(mapping class), với cách này hibernate sẽ tự động sinh ra các đoạn mã SQL để chỉ cập nhật trường nào bị thay đổi Hàm
isDirty() kiểm tra xem session có đồng bộ hóa với cơ sở dữ liệu hay
không
Trang 26CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG VÀ HIỆN THỰC HỆ
THỐNG3.1 PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1.1 Các usecase trong gói general:
Là những usecase được dùng bởi nhiều actor ở nhiều vai trò khác nhau.
- Các luồng khác:
• Người dùng gõ sai username: Hệ thống sẽ yêu cầu người dùng nhập lại username, nếu nhập quá 3 lần hệ thống sẽ hiển thị CAPTCHA để ngăn chặn người dùng tấn công hệ thống bằng DDOS
• Người dùng gõ sai mật khẩu:Hệ thống sẽ yêu cầu người dùng nhập lại mật khẩu, nếu nhập quá 3 lần hệ thống sẽ hiển thị CAPCHA để ngăn chặn người dùng tấn công hệ thống bằng DDOS
3.1.1.2 Đăng xuất:
- Chức năng: Thoát khỏi tài khoản đang dùng
- Luồng cơ bản: Người dùng click chuột vào nút đăng xuất (logout), hệ thống sẽ tự động chuyển đến trang chủ và cập nhật trạng thái truy cập của người dùng là đã thoát ra ngoài
Trang 273.1.1.3 Xử lý quên mật khẩu
- Chức năng: Giúp người dùng nhớ lại mật khẩu đã quên
- Luồng cơ bản: Hệ thống yêu cầu nhập tên đăng nhập, sau đó nhập chuỗi CAPCHA để tiếp tục tác vụ, cuối cùng bạn phải lựa chọn một trong các cách thức sau để khôi phục mật khẩu:
o Gửi mail phục hồi đến hộp thư của bạn
o Trả lời câu hỏi bảo mật
- Các luồng khác:Trường hợp trả lời sai câu hỏi bảo mật quá 3 lần bạn phải nhập lại chuỗi CAPCHA ở bước 2 thì mới có thể tiếp tục tác vụ
Trang 283.1.1.4 Cập nhật thông tin tài khoản
- Chức năng: chỉnh sửa lại thông tin tài khoản người dùng
o Người dùng nhấp chuột vào nút sửa thông tin tài khoản, sau đó hệ thống sẽ đưa ra các thông tin liên quan đến tài khoản của người dùng như mật khẩu, họ tên, ngày sinh, email liên hệ, hình đại diện
để cho người dùng thay đổi Sau khi đã cập nhật các thông tin cần thay đổi người dùng nháp nút lưu thông tin, hệ thống hỏi người dùng có muốn lưu thay đổi không, người dùng nhấn nút đồng ý hệ thống sẽ cập nhật những thay đổi vào cơ sở dữ liệu
- Các luồng khác:
o Người dùng nhập thông tin không hợp lê: hệ thống sẽ đưa ra các thông báo đến người dùng và yêu cầu nhập lại thông tin đã nhập sai
o Người dùng không đồng ý lưu thay đổi thông tin đã điền: hệ thống
sẽ không cập nhật thông tin đã điền vào cơ sở dữ liệu
- Sơ đồ:
Trang 293.1.2 Các usecase trong gói khách(guess):
Thể hiện sự tương tác giữa actor khách với các chức năng của hệ thống
ra các field bắt buộc phải điền thông tin vào như:
Trang 30o Username: có kèm chức năng kiểm tra tồn tại hay chưa bên cạnh.
o password : có confirm password
o Email: bắt buộc phải có để gửi email confirm
o Captcha: để chống ddos
- Sau khi đã điền đầy đủ các thông tin trên người dùng nhấn vào nút đăng
kí, hệ thống sẽ kiểm tra tính đúng đắn của dữ liệu nhập vào bằng javascript, sau đó hệ thống sẽ kiểm tra sự tồn tại của username trong hệ thống, nếu chưa có hệ thống sẽ thêm username vào hệ thống và thông báo đăng kí tài khoản thành công, sau đó chuyển đến trang quản lý thông tin người dùng dựa vào loại tài khoản mà người đó chọn
o Người dùng nhập sai captcha quá n lần (số lần này sẽ được cấu hình động): hệ thống sẽ không cho phép người dùng thực hiện chức năng đăng kí trong vòng 5 phút (Lưu ý: captcha dễ đọc hoặc là một phép toán để không làm phiền user)
o Phương án sử dụng Open ID: với phương thức này chỉ yêu cầu người dùng nhập mật khẩu để kiểm tra, nếu hợp lệ hệ thống sẽ lưu lại trong thông tin tài khoản
Trang 313.1.2.2 Xem thông tin nhà tuyển dụng
- Chức năng: Nhà TD được quyền tạo thông tin của mình trên Skills theo mẫu có sẵn để giúp ứng viên tìm kiếm các DN, nộp đơn và xem tin tuyển dụng của họ
- Luồng cơ bản: Thông tin bao gồm các phần sau:
o Tên công ty: tên đầy đủ - tên tiếng anh (tên viết tắt)
o Lĩnh vực : tính chuyên nghiệp trong lĩnh vực gì?
o Bài giới thiệu:
o Thông tin liên hệ:
o Button gửi hồ sơ : hồ sơ tạo theo dạng chuẩn của NTD qui định (để
sử dụng chức năng này cần phải đăng nhập)
- Các luồng khác:
Trang 333.1.2.3 Xem và tìm kiếm khóa học
- Chức năng: Hệ thống tạo nên một công cụ cho phép các TC đào tạo tự cập nhật các tin đào tạo và thông tin về tổ chức của mình để quảng bá đến người học bao gồm hình ảnh và nội dung giới thiệu về tổ chức cũng như hình ảnh các khóa học
- Luồng cơ bản:
Nội dung cần thể hiện như sau:
o Tiêu đề
o Từ khóa: nhóm kỹ năng, loại kỹ năng, địa điểm
o Nội dung mô tả khóa học:
a Ngành nghề, mảng kỹ năng, nhóm kỹ năng
b Mục tiêu khóa học
c Đối tượng học viên – yêu cầu học viên
d Thông tin về giảng viên
e Học phí
f Thông tin liên hệ để đăng ký khóa học
g Ngày khai giảng khóa học
Trang 34h Ngày nhận đăng ký học viên.
i Ngày kết thúc nhận hồ sơ
j Loại hình khai giảng (Thường xuyên, định kỳ theo khóa,…)
k Danh sách các khóa đào tạo của trung tâm
l Thông tin về tổ chức đào tạo
- Các luồng khác: User đã đăng nhập có thể in khóa học để nhận phiếu giảm giá hoặc giới thiệu bạn bè tham gia khóa học này (Do trung tâm đào tạo thiết đặt quyền)
- Sơ đồ luồng đi:
3.1.2.4 Xem hướng dẫn viết hồ sơ
Trang 35- Luồng cơ bản: Nội dung cần thể hiện:
o Clip hướng dẫn viết CV cùng với những thắc mắc bên dưới của người dùng
o Button nổi bật Tạo CV ngay bên cạnh
o Đặt câu hỏi: Để có thể đặt câu hỏi về nội dung hướng dẫn, người dùng phải Đăng Nhập vào hệ thống hoặc Đăng Nhập với OpenID
o Nội dung hiển thị trên trang này nhấn mạnh điểm nổi bật chức năng Tạo CV
- Sơ đồ luồng đi:
Trang 363.1.2.5 Xem thông tin về tổ chức đào tạo
- Chức Năng: Hệ thống tạo ra một database về các tổ chức đào tạo để giúp
họ tiếp cận đến học viên Đồng thời, học viện cũng chủ động tìm kiếm các
tổ chức đào tạo theo những danh mục mà hệ thống quy định
- Luồng cơ bản:Thông tin bao gồm các phần sau:
o Tên công ty: tên đầy đủ - tên tiếng anh (tên viết tắt)
o Lĩnh vực: tính chuyên nghiệp trong lĩnh vực gì?
o Bài giới thiệu
o Thông tin liên hệ
o Những khóa học đã đăng của tổ chức
- Các luồng khác: Hình ảnh của trung tâm hoặc hình ảnh các khóa học
3.1.2.6 Xem bài viết chia sẻ kinh nghiệm
- Chức Năng: Đây là những bài viết chia sẻ từ cộng đồng và các chuyên gia Khi xem bài viết, người dùng có thể "cho ý kiến" có kiểm duyệt bằng công
cụ DISSQUS Giống như một diễn đàn nhưng mà người post bài là những chuyên gia của Skills
- Luồng cơ bản:
Cấu trúc tin gồm các phần sau
o Mảng nội dung tin
o Mục nhập từ khóa để tìm kiếm tin tức
o Chọn từ khóa nổi bật
Trang 37- Sơ đồ luồng đi:
3.1.2.7 Xem Và tìm kiếm tin tuyển dụng
- Chức năng: Chức năng tìm kiếm tất cả những công việc do nhà tuyển dụng hoặc ban quản trị được đăng trong và ngoài hệ thống
- Luồng cơ bản: Ô nhập liệu từ khóa cần tìm
o Dữ liệu sẽ tìm kiếm ưu tiên từ "từ khóa nổi bật" sau đó (phân loại bằng các đặc điểm mở rộng nếu có) mới đến keyword
o Kết quả hiển thị có phân trang và không quá 10 tin trong 1 trang
o Hiển thị tiêu đề tin tuyển dụng
o Nội dung giới thiệu: với độ dài khoảng 2 dòng, khi rê vào sẽ hiển thị đầy đủ nội dung giới thiệu, khi click vào sẽ chuyển sang trang với nội dung tuyển dụng đầy đủ
o Tin tức tuyển dụng được hiển thị chi tiết như sau:
a Tiêu đề
Trang 38c Nội dung.
d Ngành nghề
e Đối tượng
f Số lượng
g Mô tả công việc
h Thông tin người đăng tin
i Thời gian đăng tin lúc
j Xem theo khoảng thời gian
k Menu chức năng đi kèm: Nộp đơn, In tin, giới thiệu tin cho bạn bè
a Người quản trị sẽ kiểm tra lại bằng cách click vào đường link và cập nhật xóa bài viết nếu là spam
b Trường hợp người quản trị nội dung chưa kịp kiểm tra thông tin, nếu số người báo spam vượt mức (qui định) thì hệ thống
sẽ tự ẩn bài spam
Trang 39o Có hình thức thưởng cho người thông báo, và phạt cho người post spam Hình thức thưởng phạt này sẽ lưu lại trong lịch sử thưởng phạt để suy xét cho lần thưởng phạt sau.
o Tìm kiếm khóa học theo các danh mục (Nhóm kỹ năng, loại kỹ năng, địa điểm, từ khóa) để người dùng thuận lợi hơn trong việc tìm kiếm các khóa đào tạo
Trang 40o Trong hệ thống: công việc đăng trên hệ thống này.
o Ngoài hệ thống: thông tin công việc từ website khác
o Tìm trong và ngoài hệ thống (mặc định)
3.1.2.9 Xem hồ sơ mẫu
- Luồng cơ bản: Liệt kê danh sách các loại hồ sơ mẫu
o Hồ sơ thực tập - bán thời gian
o Hồ sơ dành cho sinh viên mới tốt nghiệp
o Hồ sơ Ứng viên có kinh nghiệm
o Hồ sơ cấp quản lý điều hành
o Hồ sơ đầy đủ nhất
- Người dùng click vào loại hồ sơ để xem chi tiết hồ sơ
- Các luồng khác: Khi người dùng chọn mẫu hồ sơ để xem và click vào Tạo
Hồ Sơ thì hệ thống sẽ kiểm tra người dùng đăng nhập hay chưa Nếu chưa đăng nhập: hệ thống sẽ lưu lại action và hiển thị trang yêu cầu đăng nhập Nếu đã đăng nhập (và thỏa yêu cầu sử dụng chức năng tạo hồ sơ) thì