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

xây dựng một hệ thống quản lý chấm công nhân viên trên nền web

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

Hệ thống Chấm công doanh nghiệp C2H4 Group
Mục lục
Bài tập lớn Client – Server
Trang 1
Hệ thống Chấm công doanh nghiệp C2H4 Group
1. Giới thiệu đề tài
Ngày nay, việc tin học hóa đang diễn ra mạnh mẽ trong các doanh nghiệp, xí nghiệp
ở tất cả các quy mô tại Việt Nam. Các phần mềm quản lý doanh thu, quản lý nhân viên,
quản lý xuất nhập… trong các công ty đã và đang được các nhà quản lý quan tâm bởi lợi
ích nó đem lại. Việc ứng dụng các HTTT vào thực tế giúp giảm chi phí cho việc quản
lý trong công ty.
Một trong những công việc được tin học hóa đó là hệ thống quản lý chấm công
nhân viên trong các công ty. Chấm công hiện nay là một tác vụ thật sự cần thiết và diễn ra
hàng ngày trong các doanh nghiệp. Qua việc quản lý tốt giờ giấc làm việc của nhân viên,
doanh nghiệp có thể tăng thêm được hiệu quả hoạt động kinh doanh. Riêng với nhà quản
lý, họ còn có thể dựa vào đó để lên kế hoạch nhân sự, phân bổ công việc…
Như đã trình bày ở trên, hệ thống chấm công trong doanh nghiệp với mục đích
chính là giúp cho doanh nghiệp kiểm soát được hoạt động, lịch làm việc, công tác của các
nhân viên để từ đó quản lý tiền lương, nhân viên, lịch hoạt động của nhân viên để đảm bảo
tính kỹ luật cũng như ổn định của sản xuất.
Bằng việc khảo sát thực tế qua các doanh nghiệp cùng với việc tham khảo qua một
số phần mềm chấm công hiện có trên thị trường ATA do Hà Nội CTA phát triển, TAS do
Digitech phát triển và thương mại hóa, nhóm có rút ra một số nhược điểm của các phần
mềm chấm công hiện nay như sau:
- Phần lớn các phần mềm chấm công hiện nay phát triển dựa trên nền tảng
desktop application, phụ thuộc nhiều vào môi trường hệ điều hành, khó khăn
trong việc cập nhật, triển khai.
- Việc này cũng khó khăn cho nhà quản lý trong việc kiểm soát tiến độ khi không
ở trong công ty.
- Việc thiết kế dựa vào chủ yếu mô hình hướng cấu trúc nên khả năng phân tầng
không rõ ràng, khó khăn khi mở rộng hệ thống hơn so với mô hình hướng đối


tượng.
- Không có tính tương tác cao với người sử dụng.
- Các tác vụ mang tính cứng nhắc, ít linh hoạt.
Bởi vậy, nhóm dự án dự định sẽ xây dựng một hệ thống quản lý chấm công nhân
viên trên nền web, vẫn đảm bảo được yêu cầu trong việc quản lý đồng thời cũng
khắc phục được các nhược điểm trên.
Bài tập lớn Client – Server
Trang 2
Hệ thống Chấm công doanh nghiệp C2H4 Group
2. Quy trình phát triển dự án
2.1. Giới thiệu CMMI
Mô hình CMMI (Capability Maturity Model Integration) là một khung các giải pháp
tối ưu cho quá trình sản xuất phần mềm. Phiên bản CMMI-DEV hiện nay (CMMI cho
chuyên viên phát triển), mô tả những giải pháp tốt nhất trong quá trình kiểm soát, đo lường
và kiểm tra các quy trình phát triển phần mềm. Mô hình CMMI không tập trung mô tả
chính các quá trình mà chỉ mô tả đặc điểm của các quá trình hiệu quả, vì vậy mô hình
CMMI đưa ra chỉ dẫn cho các công ty để họ có thể tự mình phát triển hoặc điều chỉnh
chính các quá trình của họ.
Mô hình CMMI được mô tả trên trang web chính thức CMMI website :dự án CMMI là
một nỗ lực chung nhằm cung cấp các mô hình để cải thiện nâng cấp các sản phẩm và quy
trình. Trọng tâm chính của dự án là tập trung xây dựng các công cụ hỗ trợ việc cải thiện
các quy trình dùng để phát triển và ổn định các hệ thống và sản phẩm. Kết quả của dự án
CMMI là một bộ các sản phẩm cung cấp một phương pháp tiếp cận tích hợp trên toàn
doanh nghiệp để cải thiện các quy trình sản xuất mà vẫn có thể giảm bớt nhân công dư
thừa, độ phức tạp, và chi phí từ việc sử dụng các mô hình CMM (quy trình quản lý sản
xuất phẩn mềm) riêng lẻ và nhiều mô hình CMM.
Mô hình này xác định năm cấp độ của CMM đối với một công ty :
1. Khởi đầu (lộn xộn, không theo chuẩn): đây là điểm khởi đầu để sử dụng một quy
trình mới.
2. Lặp (quản lý dự án, tuân thủ quy trình) : Quy trình này được lặp lại nhiều lần

3. Xác lập (thể chế hóa): Quy trình này được xác lập/ xác nhận như một quy trình
doanh nghiệp tiêu chuẩn.
4. Kiểm soát (định lượng): Tiến hành kiểm soát và đo lường quy trình sản xuất phần
mềm
Bài tập lớn Client – Server
Trang 3
Hệ thống Chấm công doanh nghiệp C2H4 Group
5. Tối ưu (cải tiến quy trình): Kiểm soát quy trình bao gồm việc cân nhắc kỹ để cải
tiến/ tối ưu hóa quy trình.
2.2. Ứng dụng CMMI
CMMI bao gồm hàng loạt các quy trình trong phát triển phần mềm từ khi bắt đầu
dự án đến khi kết thúc, kèm theo là các tài liệu đi kèm, quản lý cấu hình,… Do quy mô
của dự án nhỏ và thời gian không cho phép nên dự án sẽ chỉ tập trung vào cách tổ chức
thư mục và quản lý source trong quá trình phát triển.
Cấu trúc thư mục của dự án:
Mô hình cấu trúc thư mục của dự án (mức System)
Cấp 1 Cấp 2,3,4.. Giải thích
01_Contracts Lưu trữ các văn bản hợp đồng
của dự án
02_Baselines 01_BAL 01_BAL_<Tên viết tắt của
dự án>_YYYYMMDD
Lưu trữ các dữ liệu (các thành
phần cấu hình tại version xác
định) tại các mốc đặt Baseline
của dự án – sử dụng cho việc
xây dựng lại hệ thống sau này
(nếu cần) và các phiên bản
bàn giao (Release) cho khách
hàng (hoặc các bên liên quan)
Các thành phần cấu hình tại

Baseline được lấy từ vùng lưu
trữ các thành phần đã được rà
soát và phê duyệt (Mục
03_Approval)
02_REL 01_REL_Tên viết tắt của
dự án>_YYYMMDD
03_Approval 01_Requirements Các tài liệu đã được rà soát và
phê chuẩn chốt phiên bản
được lưu tại khu vực này.
Các tài liệu có phiên bản sẽ
02_Analysis & Design
03_Sources
04_Implementation
05_Testing
Bài tập lớn Client – Server
Trang 4
Hệ thống Chấm công doanh nghiệp C2H4 Group
được chọn lựa để lập dữ liệu
cho Baseline và Release bàn
giao
06_System Deployment
07_Project Management
08_Development
09_Configuration & Change
Management
04_Working 01_Requirements Documents Các tài liệu yêu cầu của dự án
Tài liệu đặc tả yêu cầu phần
mềm
Models Các tài liệu mô hình các thành
phần của phần mềm: Tài liệu

đặc tả usecase
02_Analysis &
Design
Analysis Các tài liệu phân tích thiết kế
của phần mềm: Tài liệu Kiến
trúc phần mềm, tài liệu thiết
kế dữ liệu, Tài liệu thiết kế
lớp, tài liệu thiết kế màn hình
Design
Database
03_Sources Khu vực lưu trữ mã nguồn
của phần mềm
04_Implementation Build Các chương trình thực thi của
phần mềm
SubSystem
05_Testing Unit Test Các tài liệu Kiểm thử của dự
án qua các giai đoạn Kiểm
thử: Thiết kế Kiểm thử và các
kết quả kiểm thử: Các trường
hợp Kiểm thử, Báo cáo kết
quả Kiểm thử
Integration Test
System Test
Acceptance Test
06_System
Deployment
Documents Các tài liệu triển khai dự án:
Thủ tục triển khai, Hướng dẫn
sử dụng, Hướng dẫn cài đặt
Manuals

Installation
Bài tập lớn Client – Server
Trang 5
Hệ thống Chấm công doanh nghiệp C2H4 Group

07_Project
Management
Plans Project Các tài liệu Kế hoạch của dự
án: Kế hoạch phát triển, Kế
hoạch quản lý cấu hình, Kế
hoạch Kiểm thử, Kế hoạch
Tích hợp, Kế hoạch triển
khai
CCM
QA
Test
Integration
Deployment
TimeSheet Các tài liệu về biểu thời gian,
báo cáo, ghi chú cuộc họp,
các tài liệu đánh giá ước
lượng dự án..
Lịch biểu thời gian cho tất cả
các thành viên của dự án
Records
Meeting
Estimation
Reports
08_Development Khu vực lưu trữ các sản phẩm
của dự án trên các công cụ sử

dụng cho dự án
(Mục này là tùy chọn)
09_Configuration & Change
Management
Khu vực quản lý cấu hình và
kiểm soát thay đổi của dự án:
Danh sách các thành phần cấu
hình
Yêu cầu thay đổi
05_Backup BAK_<Tên viết tắt của dự
án>_YYYYMMDD
Khu vực lưu trữ các dữ liệu
sao lưu của dự án
06_Reused Nếu có
Bài tập lớn Client – Server
Trang 6
Hệ thống Chấm công doanh nghiệp C2H4 Group
07_References Chứa tài liệu, biểu mẫu tham khảo phục vụ việc thực hiện dự án, Các
tài liệu hướng dẫn đặc biệt của dự án (Project Specific Guidelines)…
Người quản lý cấu hình có thể tạo thêm các thư mục khác tại đây nếu
cần
Bên cạnh việc tổ chức thư mục, dự án có sử dụng Subversion (SVN) và Google Code
để quản lý source code.
Bài tập lớn Client – Server
Trang 7
Hệ thống Chấm công doanh nghiệp C2H4 Group
3. Giới thiệu nghiệp vụ
Qua việc phân tích nghiệp vụ tại công ty cổ phần Archi, hệ thống chia làm các phân
hệ chính sau :
3.1. Phân hệ quản lý nhân sự :

3.1.1. Quản lý phòng ban bộ phận :
Thêm mới,xem ,sửa xóa từng bộ phận
3.1.2. Quản lý nhân viên cán bộ :
 Thêm mới,cập nhật thông tin nhân viên
 Quản lý luân chuyển cán bộ giữa các phòng ban
 Tìm kiếm thông tin nhân viên
 Thống kê nhân viên theo các phong ban
3.2. Phân hệ chấm công :
 Quản lý tháng chấm công
 Quản lý ca làm việc
 Quản lý thông tin đăng ký làm thêm giờ của nhân viên
 Quản lý lý do vắng mặt
 Quản lý lý do xin ra ngoài giữa giờ
 Quản lý giờ vào ra của nhân viên
3.2.1 Quản lý tháng chấm công :
Định nghĩa tháng chấm công: tuỳ theo yêu cầu của từng doanh nghiệp, có thể tuỳ ý
đặt ngày bắt đầu và kết thúc của tháng chấm công. Mặc định là từ ngày 01 đến ngày cuối
cùng hàng tháng. Tất cả các báo cáo theo tháng sẽ tính toán dựa theo ngày bắt đầu và ngày
kết thúc đã được định nghĩa.
Cập nhật thông tin tháng chấm công:cho phép người quản lý cập nhật lại thông tin
tháng chấm công nếu thấy chưa phù hợp.

Bài tập lớn Client – Server
Trang 8
Hệ thống Chấm công doanh nghiệp C2H4 Group
3.2.2 Quản lý ca làm việc :
Định nghĩa ca làm việc :
Hệ thống cho phép định nghĩa thời gian làm việc theo mốc thời gian áp dụng (từ
ngày bất kỳ nào đó).
Có thể định nghĩa được rất nhiều ca và mỗi ca làm việc sẽ được hiểu dưới dạng:

- Ngày bắt đầu hiệu lực (từ ngày)
- Giờ đến, giờ về
- Giờ vào ra riêng cho ngày thứ 7, chủ nhật (nếu không định nghĩa thì sẽ áp
dụng giờ vào ra giống như ngày thường)
- Nghỉ giữa ca (giờ ra, giờ vào)
- Quy định thời gian cho phép đi muộn, về sớm, được hiểu là số phút xê dịch
cho phép nhân viên đi muộn, và số phút cho phép nhân viên về sớm.
- Quy định mốc bắt đầu tính làm thêm giờ được định nghĩa trong Ngưỡng tính
làm thêm trước ca và sau ca. Đây được hiểu là nếu vượt qua số phút này thì mới
được tính làm thêm.
3.2.3 Quản lý thông tin đăng ký làm thêm giờ của nhân viên :
Hệ thống cho phép nhân viên đăng ký làm thêm giờ các ngày trong tuần.Để quản lý
công làm thêm giờ được hiệu quả , cũng tránh được trường hợp nhân viên ở lại làm
việc riêng đến quá giờ mới quẹt thẻ ra về thì không được hưởng lương làm thêm giờ
3.2.4 Quản lý lý do vắng mặt :
* Dưới góc độ nhà quản lý : Hệ thống giúp công ty lập ra các quy định về lý
do vắng mặt hợp lệ,lý do nào là không hợp lệ.
* Dưới góc độ nhân viên : Hệ thống giúp nhân viên đăng ký lý do vắng mặt.
Cập nhật thông tin đăng ký .
Bài tập lớn Client – Server
Trang 9
Hệ thống Chấm công doanh nghiệp C2H4 Group
3.2.5 Quản lý lý do xin ra ngoài giữa giờ :
Tương tự như quản lý lý do vắng mặt,
* Dưới góc độ nhà quản lý : Hệ thống giúp công ty lập ra các quy định về lý do ra
ngoài hợp lệ,lý do nào là không hợp lệ,
* Dưới góc độ nhân viên : Hệ thống giúp nhân viên đăng ký lý do ra ngoài. Cập
nhật thông tin đăng ký ra ngoài trong giờ làm.
3.2.6 Quản lý giờ vào ra của nhân viên :
 Hệ thống cho phép cập nhật thông tin vào ra của nhân viên tự động ,dữ liệu

lấy từ các máy quẹt thẻ.
 Hệ thống cho phép cập nhật thông tin vào ra của nhân viên thủ công khi có
lỗi xảy ra với máy quẹt thẻ hoặc khi nhân viên quên thẻ,…
3.3. Phân hệ tính lương :
Hệ thống cho phép tự động tính lương của nhân viên trong công ty trong tháng dựa
trên số ngày công thực tế,mức lương cơ bản,phụ cấp,…
Công thức tính lương tại công ty Archi :
• Lương ngày = (Lương cơ bản + Phụ cấp)/Số ngày làm việc trong tháng
• Lương tháng = Lương ngày x (số ngày đi làm + số ngày nghỉ nguyên lương) + (làm
thêm NT * 150% + Làm thêm CN * 200% + Làm thêm Lễ * 300%) * Lương giờ - Bảo
hiểm + Phụ cấp khác
3.4. Phân hệ báo cáo ,thống kê :
Hệ thống cho phép người sử dụng lập các báo cáo ,thống kê chi tiết như :
 Báo cáo nhân viên đi làm từng ngày
 Báo cáo nhân viên đi muộn về sớm
 Báo cáo châm công tháng
Bài tập lớn Client – Server
Trang 10
Hệ thống Chấm công doanh nghiệp C2H4 Group
4. Mô hình J2EE, Client/Server
J2EE là thuật ngữ viết tắc của Java 2 Platform, Enterprise Edition , đây là một
framework hỗ trợ xử lý tính toán phân tán của Sun Microsystems. Bài viết này dựa trên 1
chương trong 1 cuốn Study Guide của Sun về J2EE, mục đích không phải là mô tả chi tiết
về J2Ê mà là để đem lại cho người đọc những hiểu biết cơ bản về J2EE và các khả năng
của nó.
4.1. Mở đầu
J2EE là một platform để phát triển những ứng dụng distributed . J2EE bao gồm những
phần sau (được xem như là J2EE Framwork):
• J2EE Platform - một platform chuẩn để hosting các ứng dụng J2EE.
• Reference Implemetation - một application server hỗ trợ chuẩn mới nhất của J2EE, ngoại

trừ những tiêu điểm của nó là những đặc tính mới trong phiên bản chuẩn của J2EE, đây
chưa phải là 1 sản phẩm hoàn chỉnh.
• Compatibility Test Suite - một công cụ để kiểm tra xem một application server có tương
thích với chuẩn J2EE hay không. Thiếu cái này thì mỗi nhà cung cấp có thể hiểu và từ đó
phát triển chuẩn J2EE theo những hướng khác nhau mà như thế thì làm giảm đi thế mạnh
của J2EE platform là “write once, run anywhere”.
Bài tập lớn Client – Server
Trang 11
Hệ thống Chấm công doanh nghiệp C2H4 Group
• Application Programming Model (APM) Blueprint – một mô hình ứng dụng tham khảo,
được cung cấp để minh hoạ cách phát triển ứng dụng dùng J2EE
4.2. Phát triển chương trình dùng J2EE
J2EE Framework cho phép phát triển những ứng dụng distributed bằng cách cung cấp 1 tập
các dịch vụ cơ bản như quản lý transaction, kiểm tra security, quản lý trạng thái, quản lý tài
nguyên. Các application serve đều cung cấp những dịch vụ cơ bản này của J2EE
Framework.
4.3. J2EE API
Những công nghệ được sự dùng trong J2EE bao gồm:
• Java 2 Standard Edition (J2SE) - trước kia còn gọi là JDK
• Java Database Connectivity (JDBC) - Một API chuẩn dùng để kết nối Java Platform với
cơ sở dữ liệu.
• RMI-JRMP – Remote Method Invocation (RMI) , một chuẩn dùng để gọi hàm từ xa dựa
trên Java Remote Message Protocol (JRMP)
• Java Interface Definition Language (Java IDL) - một dịch vụ kết hợp Common Object
Request Broker Architecture (Corba) vào trong Java Platform để cung cấp tính
interoperability thông qua chuẩn IDL .
• Remote Method Invocation – Internet Inter- ORB Protocol (RMI-IIOP) - Một giao thức
cho phép lập trình viên RMI kết hợp những lợi ích của RMI API và giao thức CORBA
IIOP để giao tiếp với CORBA-compliant client được phát triển bởi bất cứ ngôn ngữ nào
tuân theo CORBA.

• Enterprise JavaBean (EJB) - một kiến trúc component để phát triển và triển khai các ứng
dụng kiểu component-based distributed.
• Servlet – tương tác với Web client thông qua cơ chế request – response. Cơ chế này dựa
trên giao thức HTTP.
• Java Server Page (JSP) – Dùng để xây dựng những ứng dụng có chứa nội dung web động
như là HTML, DHTML, XML
• Java Message Service (JMS) - một API để giao tiếp với Message Oriented Middleware
(MOM) cho phép truyền nhận message theo cơ chế point-to-point và publish/subcribre.
• Java Naming and Directory Interface (JNDI) - một interface duy nhất dùng để truy cập
những kiểu dịch vụ khác nhau về naming và directory.
• Java Transaction API (JTA) - một tập API cho phép quản lý transaction. Ứng dụng có thể
sự dụng JTA để start, commint, abord transaction.
• JavaMail - một API cung cấp 1 framework platform-independent và protocol-independent
(không phụ thuộc giao thức về platform) để xây dựng ứng dụng về mail và messaging
• JavaBean Activation Framework (JAF) - tập các API được sử dụng bởi các package khác
Bài tập lớn Client – Server
Trang 12
Hệ thống Chấm công doanh nghiệp C2H4 Group
như là JavaMail,…Bạn có thể dùng JAF để xác định kiểu dữ liệu, đóng gói truy cập đến dữ
liệu đó, mở rộng những tác vụ dựa trên dữ liệu đó và khởi tạo một bean tương ứng để thực
hiện những tác vụ đó. Ví dụ JavaMail dùng JAF để xác định object nào sẽ được khởi tạo
dựa trên kiểu MIME của object.
4.4. Các thành phần của J2EE
J2EE được xây dụng trên một mô hình container component. Bốn container component cốt
lõi cung cấp môi trường cho các component khác của J2EE thông qua các API. Những
component cốt lõi này liên quan đến bốn kiểu container được hỗ trợ trong J2EE bao gồm,
Application Client, Applet, Web và EJB:
• Java Application – component này là 1 chương trình standalone chạy bên trong
Application Client container. Application Client container cung cấp những API hỗ trợ cho
messaging, remote invocation, database connectivity và lookup service. Application Client

container đòi hỏi những API sau: J2SE, JMS, JNDI, RIM-IIOP và JDBC. Container này
được cung cấp bởi nhà cung cấp application server
• Applet – Applet component là java applet chạy bên trong Applet container, chính là web
browser có hỗ trợ công nghệ Java. Applet phải hỗ trợ J2SE API.
• Servlet và JSP – đây là Web-based component chạy ở bên trong Web container, được hỗ
trợ bởi Web Server. Web container là một môi trường run-time cho servlet và jsp. Web
Container phải hỗ trợ những API sau: J2SE, JMS, JNDI, JTA, JavaMail, JAF, RIM-IIOP và
JDBC. Serlet và JSP cung cấp một cơ chế cho việc chuẩn bị, xử lý, định dạng nội dung
động
• Enterprise JavaBean (EJB) – EJB component là business component chạy bên trong EJB
container. EJB component là phần nhân, cốt lõi của ứng dụng J2EE. EJB container cung
cấp các dịch vự quản lý transaction, bảo mật, quản lý trạng thái, quay vòng tài nguyên
(resource pooling). EJB container phải hỗ trợ những API sau: J2SE, JMS, JNDI, JTA,
JavaMail, JAF, RIM-IIOP và JDBC.
4.5. Sự dụng EJB
EJB chứa những business logic của ứng dụng, cho nên có thể nói rằng EJB chính là phần
lõi của phần lớn các ứng dụng distributed cho enterprise. Một enterprise bean có những đặc
điểm sau:
• Chứa các business logic để thao tác với dữ liệu.
• Được tạo ra và được quản lý bởi một container.
• Xử lý các truy cập của client
• Chứa metadata, như là thuộc tính của transaction và security, riêng biệt với các bean.
• Cung cấp dịch vụ quản lý transation, quản lý trạng thái, quay vòng tài nguyên và bảo mật.
Nếu bạn thiết kế 1 ứng dụng không cần có hỗ trợ transaction hoặc bảo mật, lúc đó nên trở
lại câu hỏi có nên dùng đến EJB hay không.
Mỗi EJB bắt buộc phải có những interface và class sau:
Bài tập lớn Client – Server
Trang 13
Hệ thống Chấm công doanh nghiệp C2H4 Group
• Home Interface - home interface extend javax.ejb.EJBHome. Nó đóng vai trò như một

Factory pattern để khởi tạo các instance của EJB
• Remote Interface – remote interface extend javax.ejb.EJBObject. Remote interface chứa
các business method , được gọi từ client. Nó đóng vai trò như 1 proxy của EJB.
• Bean Class - chứa phần cài đặt của các method khai báo trong remote interface. Bean
class extend javax.ejb.SessionBean hoặc javax.ejb.EntityBean hoặc
javax.ejb.MessageDrivenBean.
4.5.1 Sự dụng Session và Entity Bean
Các ứng dụng cho enterprise cần những component linh động trong business logic. Các
component phải có khả đáp ứng stateless service, conversational state, và hỗ trợ việc chia
xẻ dữ liệu. EJB có 2 loại bean chính ứng với các nhu cầu khác nhau của component trong
ứng dụng: session và entity. Entity bean phục vụ cho việc persistence và sharing dữ liệu.
Như thế không có nghĩa là session bean không thể persist object được, nhưng entity bean
được thiết kế chuyện dụng cho mục đích này. Session bean thì phục vụ cho các bussiness
logic và wworkflow liên quan đến ứng dụng J2EE, tương ứng với nhu cầu về stateless
service và conversational state.
4.5.2 Stateless Bean và Stateful Bean
Có 2 loại session bean: stateless và stateful.
Stateless Beans
Stateless bean không giữ conversational state (tạm dịch là trạng thái giao tiếp) của client.
Tuy nhiên không có nghĩa là stateless bean không thể giữ được trạng thái, nhưng trạng thái
này không bảo đảm đủ để xác định client nào đã gọi đến bean này. Điều này có nghĩa là
bạn có thể dùng stateless bean để thực hiện bất cứ hành động nào trong ứng dụng
Stateful Beans
Stateful bean có khả năng giữ conversational state (tạm dịch là trạng thái giao tiếp) của
client. Tất nhiên là có nhiều cách để giử consersational state trong ứng dụng, nhưng nếu
state đó cần phải gắn với business logic thì nó nên được lưu giữ trong stateful bean. Ví dụ
điển hình nhất của session stateful bean là component shopping cart trong các ứng dụng
mua hàng trực tuyến.
4.5.3 Sự dụng MessageDrivenBean
MessageDrivenBean là một điểm mới trong chuẩn EJB 2.0 (EJB 1.1 chỉ định nghĩa 2 loại

bean là session và entity). Mục đích của MesssageDrivenBean là phục vụ cho nhu cầu về
các asynchronous service của các component. Bởi vì session và entity bean chỉ phục vụ các
dịch vụ loại synchronous. Do đó cách sử dụng MessageDrivenBean có phần giống với
Bài tập lớn Client – Server
Trang 14
Hệ thống Chấm công doanh nghiệp C2H4 Group
session stateless bean, chỉ khác ở cách gọi bean, với MDB thì client phải gửi message đến
MDB đó để thực hiện các hàm trong MDB.
4.5.4 Sự dụng Container-Managed Persistence
Có 2 cách để 1 entity bean persist object: container-managed persistence (CMP) và bean-
managed persistence (BMP). Trong CMP, container điều khiển việc cài đặt cần thiết cho
các tác vụ chèn, đọc, ghi, cập nhật object trong một data source. Còn trong BMP, thì LTV
phải tự cài đặt các code cho các tác vụ trên. CMP lý tưởng cho việc phát triển ứng dụng vì
nó không đòi hỏi LTV phải thay đổi code mỗi khi data model thay đổi. Tuy nhiên để có
được tính linh hoạt, CMP không cho phép sinh ra những câu lệnh SQL hiệu quả.
Hiện nay các công cụ phục vụ việc mapping object với cơ sở dữ liệu vẫn còn đang trogn
quá trình phát triển và chưa đủ chin muồi. Trong khi chờ đợi CMP phát triển hoàn thiện thì
BMP cộng với pattern DAO có lẽ là 1 giải pháp khá tốt.
4.5.5 Sự dụng Data Access Object
Khi bạn quyết định dùng BMP, có nghĩa là bạn sẽ phải tự coding các câu lệnh SQL trong
entity bean của bạn. Để giảm sự nối kết của entity bean với các câu lệnh SQL cần thiết cho
các việc đọc, ghi, xoá , cập nhật object, bạn có thể tạo ra một DAO pattern đóng gói các
câu lệnh SQL đó. Bằng cách này bạn đã làm giảm sự phụ thuộc của bạn vào code và sư
thay đổi của data model. Nói cách khác nếu có sự thay đổi thì BMP entity bean của bạn
vẫn có thể giữ nguyên và bạn chỉ phải sửa lại phần DAO thôi.
DAO chứa code phục vụ việc đọc , ghi, cập nhật xoá object trên 1 data source. Nó cho
phép 1 entity bean có thể định nghĩa như 1 BMP, nhưng sau này khi các công cụ hỗ trợ cho
CMP trở nên hoàn thiện hơn thi entity bean này có thể chuyển sang thành CMP, và DAO sẽ
được thay thế bởi sự hỗ trợ CMP của container.
Nếu bạn muốn tìm hiểu thêm về DAO pattern , bạn có thể xem ở địa chỉ sau:

/> Mô hình client-server sử dụng J2EE
Bài tập lớn Client – Server
Trang 15
Hệ thống Chấm công doanh nghiệp C2H4 Group
Bài tập lớn Client – Server
Trang 16
Hệ thống Chấm công doanh nghiệp C2H4 Group
5. Các công nghệ được sử dụng
5.1.1.Filter
a. Khái niệm:
Filter là một kỹ thuật ở mức thấp trong lập trình web của java. Nó được hiểu như là
một bộ lọc bao bọc lấy toàn bộ các Servlet và tài nguyên bên trong của server. Mọi request
đến và response trả về đều có thể được xử lý bởi những Filter này.
b. Mô hình:
Filter
Servlet
Request
Reponse
Filter

Request
Reponse
Server
Resource


c. Công dụng:
Theo mô hình trên, ta thấy Filter bao bọc lấy các tài nguyên trên server và có khả
năng quản lý đồng thời cả request lẫn response hoặc có thể chỉ quản lý đơn lẻ chúng. Một
request/response có thể phải đi qua không, một hoặc nhiều Filter trước khi đi đến đích của

nó là các trang jsp, servlet, các server pages hoặc các tài nguyên khác trên server.
Bài tập lớn Client – Server
Trang 17
Hệ thống Chấm công doanh nghiệp C2H4 Group
d. Ưu điểm:
Filter cho phép người lập trình có thể cấy các đoạn code để xử lý các luồng yêu cầu và
phản hồi hoặc loại bỏ chúng một cách một cách dễ dàng. Chính khả năng này đã giúp filter
hoàn toàn trong suốt với các tầng xử lý phía sau.
e. Các ứng dụng thực tế của Filter:
- Xác thực người dùng, ngăn chặn truy cập trái phép
- Thống kê người sử dụng khi truy cập hệ thống
- Nén dữ liệu trả về cho client
- Xác định vùng địa lý của người truy cập, thông qua đó có thể trả về được
nội dung phù hợp nhất.
- Chuyển đổi nội dung: cho phép chuyển đổi nội dung trả về ứng với từng
client. Ví dụ: sử dụng XSLT để chuyển đổi XML thành HTML đối với
người dùng sử dụng browser trên PC, WML đối với người dùng sử dụng
browser trên di động.
f. Ứng dụng trong bài tập lớn:
Trong bài tập lớn, Filter được dùng để thực hiện chức năng phân quyền người
dùng.
g. Cài đặt Filter:
Bản chất của filter là một Class đặc biệt được thừa kế từ interface javax.servlet.Filter. Do
đó cần phải implement các phương thức:
- public void init(FilterConfig config)
- public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
Trong đó phương thức:
- init: dùng để đọc các cấu hình của filter được quy định bởi người lập trình trong file
web.xml.
- doFilter: dùng để cài đặt nội dung nội dung của bộ lọc. Trong trường hợp xác thực

người dùng, thân phương thức được biểu diễn bởi đoạn mã giả sau:
Function doFilter
If Not Exist(Session) Then
Redirect(ExpiredPage)
End If
Bài tập lớn Client – Server
Trang 18
Hệ thống Chấm công doanh nghiệp C2H4 Group
User = GetUser(Session)
If Not Logined(User) Then
Redirect(LoginPage)
End If
If Not HavePermission(User) Then
Redirect(DeniedPage)
End If
DoNextFilter
End Function
Filter được cài đặt và cấu hình thực tế trong project java chấm công:
File UserFilter.java
package com.c2h4.timekeeping.common;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class UserFilter implements Filter {
//private FilterConfig filterConfig;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException{
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
// Authentication
HttpSession session = request.getSession();
if(session==null){
response.sendRedirect("/auth/expired.jsf");
return;
}
String contextPath = request.getContextPath();
if(contextPath.length() > 0 && contextPath.endsWith("/"))
contextPath = contextPath.substring(0,
contextPath.length()-1);
Bài tập lớn Client – Server
Trang 19
Hệ thống Chấm công doanh nghiệp C2H4 Group
String relativeURI =
request.getRequestURI().substring(contextPath.endsWith("/")?
contextPath.length()-1:contextPath.length());
UserProfileBean user =
(UserProfileBean)session.getAttribute("userprofilebean");
if(user==null||!user.getLogined()&&!
UserProfileBean.defaultPage.equals(relativeURI)){
response.sendRedirect("/auth/login.jsf?returnURL=" ());
return;

}
// End Authentication
// Authorization
if(user.hasPermissionOnPage(relativeURI)){
chain.doFilter(req, res);
return;
}
else{
response.sendRedirect("/auth/denied.jsf");
return;
}
// End Authorization
}
public void init(FilterConfig config) throws ServletException {
}
}
File web.xml
<filter>
<filter-name>UserFilter</filter-name>
<filter-class>com.c2h4.timekeeping.common.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/timekeeping/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/hr/*</url-pattern>
</filter-mapping>
<filter-mapping>

<filter-name>UserFilter</filter-name>
<url-pattern>/report/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/salary/*</url-pattern>
Bài tập lớn Client – Server
Trang 20
Hệ thống Chấm công doanh nghiệp C2H4 Group
</filter-mapping>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/system/*</url-pattern>
</filter-mapping>
Bài tập lớn Client – Server
Trang 21
Hệ thống Chấm công doanh nghiệp C2H4 Group
5.2. Java Server Faces (JSF)
5.2.1. Sự phát triển của các web application framework
Trải qua 3 giai đoạn chính:
- Không theo mô hình MVC (model, view, controller)
- MVC model 1 (Page-centric)
- MVC model 2 (Servlet-centric)
a/ Không theo mô hình MVC
Thời kì mới ra đời của các ứng dụng web, lúc đó chỉ tồn tại các ứng dụng
web tương tác trực tiếp với người sử dụng bằng các trang web tĩnh, không có sự xử lý và
ngôn ngữ phía máy chủ. Điều này đã gây cản trở rất lớn cho người lập trình cũng như
người sử dụng trong việc tiếp cận với các ứng dụng trên nền web.
b/ MVC model 1
Trong MVC model 1, các trang JSP đóng vai trò Hiển thị (View) và Điều khiển

(Controller). Có thể có nhiều trang JSP khác nhau đóng các vai trò khác nhau.
* Khi người sử dụng dùng các nút bấm, menu hoặc link … trên trình duyệt Web (Web
browser) để thực hiện một thao tác, một lệnh (có thể kèm theo các tham số) được gửi tới
một trang JSP tương ứng.
* Trang JSP này sẽ khởi tạo một hoặc nhiều Java Bean (nếu cần thiết), truyền các lệnh cần
thi hành tới Java Bean. Chú ý rằng đây là các Java Bean thông thường, chứ không phải
Enterprise Java Bean (EJB)
* Sau khi Java Bean thực hiện xong việc truy xuất hoặc cập nhật dữ liệu, trang JSP ban đầu
có thể hiển thị dữ liệu lấy từ Bean (JSP ban đầu đóng luôn vai trò View), hoặc chọn một
Bài tập lớn Client – Server
Trang 22
Hệ thống Chấm công doanh nghiệp C2H4 Group
trang JSP khác để hiện dữ liệu từ Bean (JSP ban đầu đóng luôn vai trò Controller). Trong
một thiết kế tốt, để bảo đảm việc tách rời phần trình bày và logic của chương trình, trang
JSP nhận request chỉ đóng vai trò Điều khiển (Controller).
MVC model 1 có một nhược điểm là phần logic điều khiển được viết trong trang
JSP, như vậy phần chương trình Java phức tạp dùng để điều khiển sẽ bị lẫn vào trong mã
HTML dùng để trình bày. Độ phức tạp của chương trình càng cao, thì trang JSP càng khó
bảo trì. Hơn nữa trong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSP
thường được làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chương trình
Java được viết bởi lập trình viên chuyên về lập trình. Trong các dự án phức tạp, dùng JSP
làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới trách nhiệm giữa nhóm thiết kế
đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì và phát triển trở nên rất khó khăn,
gần như không thể làm được.
Để khắc phục nhược điểm này, MVC model 2 ra đời
c/ MVC model 2
Trong MVC model 2, một hoặc nhiều servlet (thường là một) đóng vai trò Điều
khiển, các Java Bean đóng vai trò Mô hình và các trang JSP đóng vai trò hiển thị.
Trong model 2, các logic phức tạp của chương trình được viết hoàn toàn trong các
servlet, là các chương trình Java. Phần hiển thị chỉ gồm các trang JSP với một vài mã đơn

giản để lấy dữ liệu có sẵn, không có logic phức tạp, vì thế hoàn toàn có thể được tạo ra
bằng những người thiết kế Web.
Các yêu cầu của người dùng được gửi từ trình duyệt Web tới servlet. Servlet sẽ khởi
tạo Java Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin. Khi Java Bean hoàn
Bài tập lớn Client – Server
Trang 23
Hệ thống Chấm công doanh nghiệp C2H4 Group
thành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong Java Bean cho
người dùng.
5.2.2. JavaServer Faces là gì?
Công nghệ Java Server Faces là một UI framework cho việc xây dựng các ứng dụng web
chạy trên Java server và thay thế UI phía sau cho client. Các ứng dụng được viết bằng JSF
tuân theo mô hình MVC model 2, hỗ trợ tốt cho người phát triển web. Các thành phần
chính của công nghệ JSF bao gồm:
• Một API và các bổ sung tham khảo cho: thay thế các thành phần UI và quản lý trạng
thái của chúng; xử lý các sự kiện, kiểm tra phía server và chuyển đổi dữ liệu; định
nghĩa navigation của trang; hỗ trợ quốc tế hóa và accessibility; và cung cấp khả
năng mở rộng cho tất các đặc điểm này.
• Một thư viện thẻ tùy biến JavaServer Pages (JSP) cho việc định nghĩa các thành
phần UI trong một trang JSP
Mô hình lập trình được định nghĩa tốt này và thư viện thẻ thành phần UI tạo kỹ thuật dễ
dàng tải việc xây dựng và sửa chữa các ứng dụng web với các UI ở phía server. Với sự tổ
chức nhỏ đó, bạn có thể:
• Điều khiển việc tạo ra các sự kiện phía client từ việc viế mã ứng dụng phía server
• Ánh xạ các thành phần UI tren một trang cho dữ liệu phía server
• Khởi dựng một UI với các thành phần có thể tái sử dụng và có khả năng mở rộng
• Lưu trữ và phục hồi trạng thái UI ngay sau các request
5.2.3. Phần mềm yêu cầu
Để xây dựng, deploy và chạy các ứng dụng JSF bạn cần một môi trường deploy chẳng
hạn Java Web Software Development Pack và Java 2 Platform, Standard Edition (J2SE)

SDK 1.3 trở lên. Đồng thời download bổ sung công nghệ Java Server Faces. Có thể
download các phần mềm cần thiết tại các link dưới đây
• />• />• />5.2.4.Đặc điểm của JSF
Một trong những lợi điểm lớn nhất của công nghệ JSF là nó cho phép một sự phân chia
rạch ròi giữa behavior (cách xử lý) và presentation (cách trình bày). Xây dựng ứng dụng
web với công nghệ JSP lưu trữ từng phần của việc phân chia này. Tuy nhiên, một ứng dụng
JSP không thể ánh xạ những request HTTP thành những xử lý sự kiện các thành phần cụ hể
hoặc quản lý các thành phần UI như những đối tượng có trạng thái trên server. Công nghệ
JSF cho phép bạn xây dựng các ứng dụng Web nhằm bổ sung việc phân chia rõ ràng hơn
behavior và presentation được cho phép bởi kiến trúc UI.
Việc phân chia luận lý từ presentation cũng cho phép mỗi thành viên của một nhóm phát
triển ứng dụng Web tập trung vào những phần trong tiến trình phát triển của họ, và cung
Bài tập lớn Client – Server
Trang 24
Hệ thống Chấm công doanh nghiệp C2H4 Group
cấp một mô hình lập trình đơn giản để liên kết những phần đó với nhau. Một mục tiêu quan
trọng khác của công nghệ JSF là cung cấp các mức độ thân thuộc các thành phần UI và các
khái niệm tầng Web mà không giới hạn bạn trong một công nghệ scripting cụ thể hoặc một
ngôn ngữ đánh dấu. Trong khi công nghệ JSF bao gồm một thư viện thẻ tùy biến JSP dùng
thay thế các thành phần trên trang JSP, API của công nghệ JSP được phân lớp trực tiếp trên
đỉnh của JavaServlet API. Điều này cho phép bạn làm được vài điều: sử dụng công nghệ
trình bày khác bên cạnh JSP, tạo ra những thành phần tùy biến của bản thân bản trực tiếp từ
những lớp thành phần, và tạo ra luồng xuất cho những thiết bị client khác nhau.
Quan trọng hơn hết, công nghệ JSF cung cấp một kiến trúc dành cho việc quản lý trạng
thái các thành phần, xử lý dữ liệu thành phần, kiểm tra nhập liệu của người dùng và xử lý
các sự kiện. Trong hầu hết những phần đó, các ứng dụng JSF cũng tương tự như bất kỳ các
ứng dụng Java Web khác, Chúng chạy trên một Java Servlet container, và thông thường
chứa:
• Các thành phầns JavaBean (được gọi là những mô hình đối tượng trong công nghệ
JSF)

• Các event listener
• Các trang, chẳng hạn như JSP
• Các lớp helper phía server, chẳng hạn như các bean truy cập dữ liệu
Thêm vào những thành phần ở trên, một ứng dụng JSF cũng có:
• Một thư viện thẻ tùy biến thực thi các thành phần UI trên một trang
• Một thư viện thẻ tùy biến thay thế các xử lý sự kiện, kiểm tra và những hành động
khác
• Những thành phần UI thay thế trạng thái các đối tượng trên server
• Các kiểm tra, xử lý sự kiện, và xử lý navigation
Mỗi ứng dụng JSF phải bao gồm một thư viên thẻ tùy biến nhằm định nghĩa các thẻ thay
thế các thành phần UI và một thư viện thẻ tùy biến nhằm thay thế các hành động cốt lõi
khác, chẳng hạn như các kiểm tra và các xử lý sự kiện. Cả hai loại thư viện thẻ này được
cung cấp bởi việc bổ sung JSF.
Thư viện thẻ tùy biến xóa bỏ những gì cần thiết cho các thành phần UI trong HTML hoặc
ngôn ngữ đánh dấu khác, kết quả là những thành phần tái sử dụng hoàn toàn. Và thư viện
core tạo nên sự dễ dàng để đăng ký các sự kiện, kiểm tra và những hành động khác. Thư
viện thẻ tùy biến có thể là thư viện thẻ HTML cơ bản chứa cùng với công nghệ JSF tham
khảo bổ sung, hoặc bạn có thể định nghĩa thư viện thẻ của riêng mình nhằm tạo ra các
thành phần tùy biến hoặc xuất ra kiểu khác HTML.
Cuối cùng, công nghệ JSF cho phép bạn chuyển đổi và kiểm tra dữ liệu trên những thành
phần riêng biệt và thông báo bất kỳ lỗi gì trước khi dữ liệu phía server được cập nhật.
5.2.5.Vai trò của Framework
Bài tập lớn Client – Server
Trang 25

×