Chúng ta cần triển khai một cơ chế tắt máy duyên dáng vào ứng dụng Servlet của chúng ta.Cách xử lý các yêu cầu servlet trong quá trình tắt máy dài
EDIT: Chúng tôi muốn làm cho nó đơn giản nhất có thể, mà sẽ được xử lý một tín hiệu giết được gửi qua chức năng của hệ điều hành. Điều này sẽ cho phép các quản trị viên hệ thống sử dụng các tiện ích shell (kill hoặc taskkill trên Windows), nếu không họ sẽ phải cài đặt một tiện ích khác chỉ để "nói chuyện" với máy chủ.
Cơ chế này vận hành theo hai giai đoạn:
- theo yêu cầu tắt máy, từ chối hoạt động quan trọng nhất định
- khối cho đến khi hành động quan trọng được khởi xướng trước đó được hoàn thành; có thể mất vài giờ
Giai đoạn số 1 được triển khai trong lớp DAO của chúng tôi. Giai đoạn # 2 được triển khai trong phương thức ServletContextListener # contextDestroyed của chúng tôi
Vấn đề của chúng tôi là khi contextDestroyed được gọi là vùng chứa Servlet ngừng phục vụ các yêu cầu HTTP tiếp theo.
EDIT: contextDestroyed được gọi khi ai đó đang gọi chức năng giết của hệ điều hành trên quy trình của máy chủ.
Chúng tôi muốn cho phép ứng dụng hoạt động trong Giai đoạn 2, thông báo cho người dùng rằng một số hoạt động không khả dụng.
Câu hỏi hay. Nếu các hoạt động bị từ chối được thực hiện trong các servlet cụ thể, bạn luôn có thể thực hiện (và chỉ những) này trả về một trạng thái trong phạm vi 4xx nếu một tra cứu DB cho thấy tắt máy đang diễn ra? –
Một số hoạt động được khởi xướng bởi các hành động giao diện người dùng và một số hoạt động được khởi tạo bởi một người lên lịch - đó là lý do tại sao tôi đang nghĩ đến việc kiểm soát chúng ở lớp DAO. –