2009-12-28 39 views
7

Tôi muốn kết buộc một JPA EntityManager với luồng hiện tại trên mỗi yêu cầu (thông qua ThreadLocal), những gì có thể được thực hiện thông qua một ServletRequestListener hoặc Filter. Người nghe trông sạch hơn và tôi không cần thêm khả năng của bộ lọc trong trường hợp này. Nhưng có lẽ bộ lọc có một lợi thế mà tôi đã bỏ lỡ.Bộ lọc Servlet so với ServletRequestListener

Tôi có nên sử dụng Bộ lọc Servlet hoặc ServletRequestListener để làm điều đó không?

+1

Có đảm bảo luồng nào được thực hiện về ServletRequestListener không? Bạn chắc chắn nó được gọi đồng bộ, trên cùng một luồng với yêu cầu xử lý? –

+0

Đặc tả Servlet 3.0 cho biết: "11.5 Trường hợp nghe và luồng [...] Vùng chứa phải duy trì tham chiếu đến từng thể hiện đối tượng nghe cho đến khi yêu cầu cuối cùng được phục vụ cho ứng dụng Web. đồng thời. Vùng chứa không bắt buộc phải đồng bộ hóa các thông báo kết quả thành các lớp người nghe thuộc tính. Các lớp Listener duy trì trạng thái chịu trách nhiệm về tính toàn vẹn của dữ liệu và nên xử lý trường hợp này một cách rõ ràng. " Nhưng đó không phải là câu trả lời cho câu hỏi của bạn ... Tôi nghĩ * nó sẽ nằm trong cùng một chủ đề. – deamon

Trả lời

7

Vì mục đích của bạn, không có nhiều khác biệt. Nhưng người nghe là "sạch hơn" theo nghĩa là ai đó đọc mã của bạn sẽ ngay lập tức biết rằng mục đích của mã này không thể ngăn chặn yêu cầu hoặc thay đổi nó hoặc làm những việc khác mà bộ lọc có thể làm.

Mùa xuân, ví dụ, sử dụng ServletRequestListener để cho phép các ứng dụng dựa trên web mùa xuân không sử dụng khung MVC Web riêng của Spring để truy cập vào các chức năng dành riêng cho web chẳng hạn như hạt cà phê phiên. Xem this doc.

Chỉnh sửa: chỉ cần rõ ràng hơn, tôi đề cập đến RequestContextListener của Spring vì nó chính xác những gì bạn đang nói về: tạo đối tượng ThreadLocal để lưu trữ dữ liệu có thể truy cập trong suốt thời gian còn lại của vòng đời yêu cầu.

+0

Bạn có thể làm rõ điều này cho tôi không? 'ServletRequestListener' lắng nghe' ServletRequestEvent' là một sự kiện được kích hoạt cho mọi yêu cầu gửi đến. Nếu tôi muốn ghi lại tác nhân người dùng cho mọi yêu cầu đối với ứng dụng web của mình, tôi có nên sử dụng trình lắng nghe này hoặc bộ lọc không? – arun

+0

Hoặc là có thể là ok. – Dan

Các vấn đề liên quan