6. Tổng quan tài liệu nghiên cứu
3.5.1. Kiến trúc chương trình
Trong hệ thống chương trình phân chia thành 3 cụm quản lý khác nhau: cụm sở, ban ngành tương đương; cụm huyện và cụm xã. Cụm xã chỉ quản lý thông tin nhân sự của xã mình, thông tin sau khi thêm mới hoặc cập nhật lập tức cập nhật lên cụm huyện và cụm sở, ban ngành tương đương. Đối với cụm huyện, ngoài thông tin nhân sự phòng của huyện mình còn thấy nhân sự ở tất cả các xã mà mình quản lý, đặc thù của phòng nội vụ trực thuộc huyện thấy toàn bộ nhân sự trong huyện và các xã trực thuộc. Riêng cụm các sở, ban ngành tương đương có thể thấy nhân sự ở huyện và xã theo sự phân quyền và chức năng quản lý, tương tự như phòng nội vụ của huyện, sở nội vụ có thể
Kiến trúc chương trình thể hiện qua Hình 3.10, các thành phần nằm trong thể hiện các chức năng phục vụ ở đầu cuối đối với người sử dụng, chương trình xây dựng trên ngôn ngữ JSP và Java triển khai dưới dạng MVC đảm bảo tính bảo mật và cung cấp giao diện thông qua các trình duyệt Web (Web Browser) thuận tiện cho người dùng mọi lúc mọi nơi qua mạng. Thành phần nằm trong là hệ thống giám sát, ở đây hệ thống mới chỉ phát triển ở mức giám sát CSDL để đảm bảo tính gắn bó và tính trong suốt của hệ phân tán như đã đề cập ở chương 1. Thành phần quan trọng nhất nằm trong , tại đây các vấn đề phân tích, thiết kế và triển khai hệ tổng hợp tất cả các nguyên lý và các thuật toán đã được mô tả trong chương 1 và 2 được áp dụng để xây dựng hệ; các vấn đề về phân tán CSDL và chương trình mà người dùng không nhìn thấy được.
Đối với hệ thống người sử dụng ở , chức năng lấy thông tin cung cấp dịch vụ, để lấy các thông tin cơ bản và cần thiết để cung cấp cho người sử dụng theo mô tả phân tán dữ liệu trên các cụm Server, thể hiện qua đoạn mã lệnh như sau:
if(action.equals("FormAdd")){ // Lấy thông tin về sở if(!so_id.equals("00")){
PhongDAO phongDAO=new PhongDAO(); ArrayList<Phong>
danhSachPhong=phongDAO.danhSachCacPhongThuocSo(so_id); request.setAttribute("danhSachPhong", danhSachPhong);
}
else {
// Lấy thông tin về phòng thuộc huyện so_id="00";
PhongDAO phongDAO=new PhongDAO(); ArrayList<Phong>
danhSachPhong=phongDAO.danhSachCacPhongThuocSo(so_id); request.setAttribute("danhSachPhong", danhSachPhong);
// Lấy thông tin về xã
XaDAO xaDAO=new XaDAO(); ArrayList<Xa>
danhSachXa=xaDAO.danhSachCacXaThuocHuyen(huyen_id); request.setAttribute("danhSachXa", danhSachXa);
}
// Lấy thông tin về chức danh
ChucdanhDAO chucdanhDAO =new ChucdanhDAO(); ArrayList<Chucdanh>
danhSachChucdanh=chucdanhDAO.danhSachCacChucdanh(); request.setAttribute("danhSachChucdanh", danhSachChucdanh); DantocDAO dantocDAO =new DantocDAO();
ArrayList<Dantoc> danhSachDantoc=dantocDAO.danhSachCacDantoc(); request.setAttribute("danhSachDantoc", danhSachDantoc);
request.setAttribute("danhSachTongiao", danhSachTongiao); request.setAttribute("chon", request.getParameter("chon")); urlDispatcher="cbvc_add.jsp";
}
Việc phân tán dữ liệu và cập nhật mảnh thể hiện qua Hình 3.11, CSDLPT trên cụm 3 đặc trưng cho dữ liệu ở cấp xã, tương ứng cụm 2 cấp huyện và cụm 1 cấp sở, ban ngành tương đương. Một dữ liệu ở cụm 3 được chèn vào cụm 3 ngay lập tức sẽ cập nhật mảnh của mình ở cụm 2 và 1, cụm 2 khi chèn dữ liệu vào chỉ cập nhật ở cụm 1. Như vậy, cụm 1 sẽ không thực hiện cập nhật phân mảnh ở các cụm khác mà chỉ cập nhật cục bộ.
Hình 3.11. Mô hình phân tán và cập nhật mảnh trên các cụm Server
Câu truy vấn để tạo bảng dữ liệu trên cụm 3 thể hiện như sau: CREATE TABLE `cbvc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`macbvc` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, `holot` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `ten` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`diachi` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `sodienthoai` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `soCMND` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `dantoc_id` int(11) DEFAULT NULL,
`tongiao_id` int(11) DEFAULT NULL, `dang` date DEFAULT NULL,
`doan` date DEFAULT NULL,
`loaicanbo` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, `noisinh` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `trangthai` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Câu lệnh truy vấn liên kết tạo mảnh dọc từ xa trên cụm 2 thể hiện: CREATE TABLE `cbvc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`macbvc` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, `holot` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `ten` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `ngaysinh` date DEFAULT NULL,
`gioitinh` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://root:123456@192.168.1.170:3306/nhansu_qb';
Câu lệnh truy vấn liên kết tạo mảnh dọc từ xa trên cụm 1 thể hiện: CREATE TABLE `cbvc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`macbvc` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, `holot` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `ten` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
cạnh đó, việc thực hiện cập nhật cũng thực hiện tại cụm thứ 3, câu truy vấn thực hiện cập nhật trên các mảnh thực hiện như sau:
DELIMITER $$
CREATE TRIGGER cbvc BEFORE UPDATE ON cbvc FOR EACH ROW BEGIN
UPDATE cbvc
SET macbvc = NEW.macbvc, WHERE id = OLD.id;
END $$ DELIMITER ;
Chúng ta phân biệt bảng cbvc đứng trước từ khóa BEFORE là bảng cục bộ, còn bảng cbvc đứng sau từ khóa ON là bảng ở cụm Server khác.