2011-11-19 42 views
7

Nếu đậu phiên trạng thái sẽ thụ động, trạng thái của nó được ghi vào đĩa cứng và sau đó cá thể bean sẽ được giải phóng để phục vụ yêu cầu khác (ít nhất đây là sự hiểu biết của tôi). Khi cùng một máy khách hoạt động trở lại, cá thể bean sẽ đọc trạng thái từ đĩa cứng để lấy lại trạng thái. Nhưng làm thế nào cá thể đậu biết rằng khách hàng nào mà tập tin đó phải đọc để duy trì trạng thái?Làm thế nào một bean phiên trạng thái lấy lại trạng thái khi máy khách quay trở lại?

Tôi rất mới với J2EE, vì vậy hãy tha thứ cho tôi nếu tôi hỏi một nghi ngờ rất ngây thơ. Nếu tôi cần phải biết bất kỳ chủ đề nào khác để hiểu điều này, hãy chỉ cho tôi đi đúng hướng.

Trả lời

13

Tốt nhất là nên trực quan hóa một phiên phiên trạng thái (SfSB) như rất gần với một thể hiện của một lớp Java bình thường. Bạn tra cứu (hoặc tiêm) một cá thể của một SfSB, và thùng chứa sẽ tạo một đối tượng cho bạn và trả về cá thể. Sau đó bạn làm việc với cá thể đó như bạn sẽ làm bất kỳ cá thể Java nào khác.

Điều đó có nghĩa rằng bạn có thể lưu trữ các ví dụ trong một phiên, serialize nó vào đĩa vv

Các chi tiết là trường hợp bạn đang làm việc với thực sự là một proxy để thực tế, tiềm ẩn SfSB dụ. Nó không phải là SfSB thực tế.

Khi bạn thực hiện cuộc gọi trên proxy cục bộ của mình với bean, đó là công việc vùng chứa để biểu thị hạt đậu đó vào bộ nhớ cho bạn. Sự thụ động và kích hoạt của bean được thực hiện phía sau hậu trường cho bạn (mặc dù bạn có thể chạm vào quá trình này thông qua vòng đời của bean).

Bất kỳ thông tin nào mà vùng chứa cần tìm SfSB thụ động được lưu trữ trong proxy mà bạn đang làm việc, nhưng điều này không rõ ràng đối với bạn. Bạn không cần phải lo lắng về nó. Vì vậy, trong một kịch bản dựa trên web điển hình, vòng đời sẽ là bạn có được cá thể đậu của bạn, lưu trữ nó trong một phiên web, và sau đó chỉ cần sử dụng nó như bình thường. Quay lại đầu trang | Nếu container quyết định nó cần phải passivate đậu của bạn để làm cho phòng hoặc bất cứ điều gì, nó sẽ passivate nó tự động cho bạn. Khi người dùng của bạn quay trở lại, ứng dụng của bạn sẽ kéo cá thể từ phiên web và thực hiện cuộc gọi. Vào thời điểm đó, nếu đậu được thụ động, thùng chứa sẽ kích hoạt hạt cho bạn, một lần nữa tự động. Toàn bộ cơ chế này phụ thuộc vào container, nhưng minh bạch cho bạn. Điều quan trọng để bạn nhớ lại là bạn phải treo vào SfSB mà bạn nhận được từ thùng chứa, giống như bạn làm bất kỳ đối tượng java nào.

Cảnh báo cuối cùng là nếu bạn cho phép SfSB bị thụ động quá lâu, vùng chứa sẽ tự động xóa nó cho bạn.

+0

Cảm ơn bạn đã giải thích. Nhưng có thể người dùng trả về sau khi SfSB bị xóa không? Và nếu có thể, điều gì sẽ xảy ra trong kịch bản đó? – Bhushan

+2

Vâng, điều đó hoàn toàn có thể. Nếu nó xảy ra, bạn sẽ nhận được một ngoại lệ khi bạn cố gắng truy cập vào SfSB (ngoại lệ chính xác, tôi không thể nói). Thời gian chờ của SfSB có thể được cấu hình (thông qua chú thích trong EJB 3.1, hoặc thông qua một cơ chế cụ thể của thùng chứa trong EJB 3), vì vậy mục tiêu sẽ là gắn thời gian chờ với tuổi thọ mong đợi của tiểu bang. Điều đó nói rằng, tôi sẽ không cung cấp cho họ mức độ không giới hạn. Ngoài ra, rất có khả năng SfSB sẽ không tồn tại việc triển khai lại ứng dụng. Khởi động lại máy chủ, có, nhưng không triển khai lại. –

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