Tôi có một hạt CDI @RequestScoped mà tôi muốn biến thành một EJB để nhận các giao dịch khai báo. (Tôi đang sử dụng EJB 3.1, Java EE 6)Chuyển trạng thái giữa các phương thức EJB/@RequestScoped và @Stateless
Hiện tại, tôi đang chuyển trạng thái giữa các chương trình con, theo giả định rằng cá thể chỉ được sử dụng trong một yêu cầu duy nhất. Nếu tôi thêm @Stateless
thì giả định đó sẽ thay đổi.
Ví dụ, tôi muốn làm một cái gì đó giống như
@Stateless
@Named
@RequestScoped
public class Foo {
private String var1; // can't use instance vars in @Stateless?
private String var2;
public void transactionForRequest() {
var1 = value;
var2 = value;
....
subroutine();
}
}
tôi giả định trên không work- đó là chính xác?
Tôi đang suy ngẫm về hai lựa chọn:
- Sử dụng @Stateful thay vì @Stateless, cùng với @Named và @RequestScoped.
- Giữ @Stateless và sử dụng
EJBContext.getContextData
bản đồ để thay thế các biến mẫu.
Điều nào tốt hơn? Và có một số thay thế khác mà tôi không nghĩ đến? (Bên cạnh việc chờ Java EE 7 hoặc chuyển sang Spring. :-))
Sử dụng '@ Stateful' có thể là một kỹ năng quá mức. Bạn đã cân nhắc sử dụng bean không bình thường và '@ ConversationScoped' được quản lý để vượt qua các tiểu bang? –
cách thức hoạt động - bạn có thể tạo EJB '@ Stateless' sau đó' @ Tiêm' một hạt CDI không? Đậu CDI này có thể là '@ RequestScoped' không? – wrschneider
Tôi sẽ giữ bean là '@ Stateless' và sử dụng' @ ConversationScoped' bean để chuyển các biến từ trang này sang trang khác. Hãy xem [bài viết] này (http://blog.goyello.com/2011/06/08/jee6-cdi-and-conversation-scope/) về cách tạo thuật sĩ. –