56

session bean Stateful được định nghĩa như sau:Khi nào sử dụng bean phiên trạng thái trên bean phiên không trạng thái?

Stateful Session Beans Trạng thái của một đối tượng bao gồm các giá trị của các biến cá thể của nó. Trong bean phiên trạng thái, các biến số thể hiện trạng thái của một phiên khách bean duy nhất. Bởi vì khách hàng tương tác ("đàm phán") với đậu của nó, trạng thái này thường là được gọi là trạng thái đàm thoại.

Stateless session bean được định nghĩa như sau:

Stateless Session Beans Một stateless session bean không duy trì một trạng thái đàm thoại với khách hàng. Khi khách hàng gọi phương thức của đậu không quốc tịch, biến mẫu của bean có thể chứa trạng thái cụ thể cho ứng dụng khách đó, nhưng chỉ trong khoảng thời gian yêu cầu . Khi phương pháp kết thúc, không được giữ lại trạng thái máy khách cụ thể . Tuy nhiên, khách hàng có thể thay đổi trạng thái của các biến mẫu trong các bean không trạng thái gộp, và trạng thái này được giữ cho lần gọi tiếp theo của bean không trạng thái gộp chung. Ngoại trừ trong khi gọi phương thức, tất cả các phiên bản của một bean không quốc tịch là tương đương, cho phép vùng chứa EJB gán một cá thể cho bất kỳ ứng dụng nào. Nghĩa là trạng thái của phiên phiên không trạng thái sẽ áp dụng trên tất cả các máy khách.

Nó cũng được đề cập đến lợi thế của stateless session bean như sau:

Bởi vì đậu stateless session có thể hỗ trợ nhiều khách hàng, họ có thể khả năng mở rộng phục vụ tốt hơn cho các ứng dụng đòi hỏi phải có một số lượng lớn của khách hàng. Thông thường, một ứng dụng yêu cầu phiên không có trạng thái ít hơn đậu hơn đậu phiên trạng thái để hỗ trợ cùng số lượng các khách hàng .

Vì vậy, câu hỏi mà bạn nghĩ đến là khi nào nên sử dụng đậu phiên trạng thái? Theo sự hiểu biết ngây thơ của tôi về vấn đề này, người ta nên dính vào sử dụng đậu phiên không trạng thái khi có thể.

Điều gì sẽ là ứng viên mà trong đó một người nên sử dụng bean phiên trạng thái? Bất kỳ ví dụ tốt nào?

Session Bean

+0

Liên quan: http://stackoverflow.com/questions/8887140/jsf-request-scoped-bean-keeps-recreating-new-stateful-session-beans-on-every-req – BalusC

Trả lời

95

Trước tiên, bạn phải hiểu như thế nào thì cà phê được tạo ra và xử lý trên máy chủ.

Đối với đậu phiên không trạng thái máy chủ có thể duy trì số lượng biến thể trong một nhóm. Mỗi khi một khách hàng yêu cầu một bean không trạng thái (ví dụ: thông qua một phương thức), một cá thể ngẫu nhiên được chọn để phục vụ yêu cầu đó. Điều đó có nghĩa là nếu khách hàng thực hiện hai yêu cầu tiếp theo, có thể hai trường hợp khác nhau của bean không trạng thái phục vụ các yêu cầu. Trong thực tế không có trạng thái đàm thoại giữa hai yêu cầu. Ngoài ra nếu khách hàng biến mất, đậu không trạng thái không bị hủy và có thể phục vụ yêu cầu tiếp theo từ một ứng dụng khách khác.

Mặt khác, đậu phiên trạng thái được kết nối chặt chẽ với khách hàng. Mỗi cá thể được tạo và được giới hạn cho một máy khách và chỉ phục vụ các yêu cầu từ một máy khách cụ thể đó. Vì vậy, xảy ra rằng nếu bạn làm hai yêu cầu tiếp theo trên một bean stateful, yêu cầu của bạn sẽ được phục vụ luôn từ cùng một trường hợp của bean. Điều đó có nghĩa là bạn có thể duy trì trạng thái đàm thoại giữa các yêu cầu. Vào cuối vòng đời, máy khách gọi phương thức remove và bean đang bị hủy/sẵn sàng để thu gom rác.

Khi nào nên sử dụng không quốc tịch hoặc nhà nước?

Điều đó chủ yếu phụ thuộc vào việc bạn muốn duy trì trạng thái hội thoại . Ví dụ: nếu bạn có một phương thức thêm số và trả lại kết quả, bạn sử dụng bean không trạng thái vì thao tác một lần của nó. Nếu bạn gọi phương thức này lần thứ hai với các số khác, bạn không quan tâm đến kết quả của lần thêm trước đó nữa.

Nhưng nếu bạn muốn ví dụ đếm số lượng yêu cầu mà khách hàng đã thực hiện, bạn phải sử dụng bean trạng thái. Trong kịch bản này, điều quan trọng là phải biết tần suất khách hàng đã yêu cầu phương thức bean trước đó, vì vậy bạn phải duy trì trạng thái đàm thoại trong bean (ví dụ: với một biến). Nếu bạn sẽ sử dụng một bean không trạng thái ở đây, yêu cầu của khách hàng sẽ được phục vụ mỗi lần từ một bean khác, điều làm rối loạn kết quả của bạn.

+13

"* Nếu khách hàng biến mất đậu bị phá hủy quá * ". Trên thực tế, các bean phiên trạng thái không tự động bị hủy trừ khi một phương thức được trang trí bởi '@ Remove' (' javax.ejb') được gọi một cách rõ ràng (phương thức đó không cần phải được mã hóa ngay cả. được chú thích bằng '@ Remove'). Nếu khách hàng liên quan quên hủy một bean phiên trạng thái, bean đó sẽ được giữ trên lơ lửng trên máy chủ cho đến khi chính thùng chứa quyết định xóa nó bằng chính sách riêng của nó. Tôi có sai không? – Tiny

+3

Tất nhiên là bạn đúng. Thông tin thêm về vòng đời đậu có thể tìm thấy ở đây: http://docs.oracle.com/javaee/6/tutorial/doc/giplj.html – tobiasdenzler

27

Tôi nghĩ rằng ví dụ điển hình nhất khi sử dụng Đậu phiên trạng thái là dành cho Giỏ hàng, nơi bạn lưu trữ tất cả các sản phẩm mà người dùng muốn mua.

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