2010-06-30 22 views
6

Có ý nghĩa khi nói về Mô hình phiên mở trong chế độ xem trong các ứng dụng JSF2 không? Ứng dụng của tôi có JSF2 Managed Beans gọi EJB dịch vụ kinh doanh làm tất cả các công cụ liên quan đến db (có một lớp DAO nhưng điều đó không quan trọng ngay bây giờ).JSF2: Phiên mở trong Chế độ xem với EJB?

Có mô hình OSIV có nghĩa là Bean được quản lý sẽ phải bằng cách nào đó đảm bảo rằng phiên cơ bản đã được mở.

Tôi cũng đang sử dụng JPA.

Trả lời

2

Về mặt lý thuyết, vấn đề hoàn toàn giống nhau: thực thể sẽ trở thành gián đoạn khi họ rời khỏi EJB trừ khi có điều gì đó giữ phạm vi của EntityManager mở. (Đây là một bài viết tuyệt vời về chủ đề nói chung: JPA implementation patterns: Lazy loading).

Từ một blog post tôi đọc:

8) Không mở Entity Manager Trong Xem hỗ trợ. [...] Trong EJB3, khi tổ chức của bạn lá đậu với giao dịch scoped EntityManager, nó được tách ra từ sự kiên trì bối cảnh và bạn có thể không còn dựa vào lười tải (trên thực tế, JPA đặc điểm kỹ thuật không xác định các hành vi trong tình hình như vậy, có lẽ một số nhà cung cấp ngoại lệ phụ thuộc sẽ được ném ...) Tất nhiên, bạn có thể sử dụng EntityManager với mở rộng bền bỉ bối cảnh, giữ giao dịch và kiên trì bối cảnh như miễn là yo bạn muốn. Nhưng tính năng này là chỉ khả dụng cho SFSB, trong khi các lớp DAO là các ví dụ điển hình của các dịch vụ không quốc tịch, vì chúng chỉ gửi các cuộc gọi đến lớp kiên trì . Ngoài ra, có cá thể đậu DAO chuyên dụng cho mỗi khách hàng có vẻ là một mức quá lớn.

Tuy nhiên, tôi không chắc nó có thực sự đúng hay không. Từ sự hiểu biết của tôi, bạn sẽ có thể viết một bộ lọc servlet sử dụng UserTransaction để bắt đầu và cam kết giao dịch (như bộ lọc thông thường trong OSIV). EJB sau đó sẽ tham gia vào giao dịch bắt đầu trong bộ lọc và EntityManager sẽ vẫn mở. Tôi đã không thử nghiệm nó mặc dù, nhưng đề nghị của tôi sẽ là để cho nó một thử.

+0

Caucho có bộ lọc như bộ lọc bạn đã mô tả: http://wiki.caucho.com/TransactionFilter – cdmckay

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