2011-11-22 25 views
9

Làm thế nào là phiên được xác định trong @SessionScoped Đậu CDI?
Chú thích này chỉ có hiệu lực khi được gọi từ vùng chứa Servlet, trong đó phiên được xác định rõ ở dạng HttpSession?@SessionScoped hoạt động như thế nào với EJB? CDI chỉ dành cho web-tier không?

Nếu không, cách EJB với @Inject @SessionScoped MyBean myBean có thể biết phiên thực sự là gì? Ý tôi là, các phương thức của EJB này có thể đã được gọi bởi một máy khách độc lập, RESTful WS hoặc bởi một số khung nhìn khác.
Điều gì sẽ xảy ra trong trường hợp này? Nếu chú thích không có ý nghĩa, nó có nên tiêm cá thể MyBean tươi cho mỗi yêu cầu hoặc có thể nó sẽ giữ nguyên cùng một cá thể trên tất cả các yêu cầu không?

Trả lời

3

Taken từ @SessionScoped specification

Phạm vi phiên đang hoạt động:

trong phương pháp dịch vụ() của bất kỳ servlet trong ứng dụng web, trong phương pháp doFilter() của bất kỳ bộ lọc servlet và khi hộp chứa gọi bất kỳ HttpSessionListener, AsyncListener hoặc ServletRequestListener nào.

Vì vậy, trong ngắn gọn, có. Nó liên kết với HttpSession. Đồng thời:

Ngữ cảnh phiên được chia sẻ giữa tất cả yêu cầu servlet xảy ra trong cùng một phiên HTTP. Ngữ cảnh phiên bị hủy khi số lần truy cập HTTPShết hiệu lực, sau khi tất cả HttpSessionListeners đã được gọi là và cuối cùng của bất kỳ yêu cầu nào trong đó invalidate() là , sau khi tất cả các bộ lọc và ServletRequestListeners đã được gọi là .

+0

Thực sự, phiên khác được xác định như thế nào ngay cả đối với một cái gì đó giống như SFSB? Tất nhiên không có gì cấm bạn tạo ra phạm vi của riêng bạn và buộc nó vào bất cứ điều gì bạn thích. – LightGuard

+0

@LightGuard, tôi đoán rằng trong SFSB, "phiên" kéo dài từ việc khởi tạo SFSB để loại bỏ nó (hoặc hết thời gian chờ). Vì vậy, miễn là tôi có một tham chiếu đến nó, tôi sẽ nhấn cùng một môi trường (phiên). –

+0

@Gonzalo, cảm ơn thông tin này. Tôi tự hỏi - điều gì sẽ xảy ra nếu tôi sử dụng hạt '@ SessionScoped' trong môi trường không có phạm vi như vậy (tức là REST WS như được đề cập trong câu hỏi). Mỗi yêu cầu được coi là một phiên mới? Điều gì về SFSB, như LightGuard đã đề cập. Liệu '@ SessionScoped' có tham chiếu đến phiên' HttpSession' hoặc phiên SFSB không? –

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