Tôi muốn đưa người dùng hiện tại sử dụng @Inject @Current User
trên tất cả các lớp (ví dụ: lớp web, lớp EJB). Để làm được điều này, tôi có theo phương pháp CDI Nhà sản xuất:Gọi phương thức sản xuất theo phạm vi phiên CDI từ bean phiên không trạng thái EJB
@Named
@SessionScoped
public class UserController {
@Resource SessionContext sessionContext;
@EJB UserDao userDao;
@Produces @Current
public User getCurrentUser() {
String username = sessionContext.getCallerPrincipal().getName();
User user = userDao.findByUsername(username);
}
}
@Qualifier
@Target({TYPE, METHOD, PARAMETER, FIELD})
@Retention(RUNTIME)
public @interface Current{}
Bây giờ, tôi muốn tiêm cho người sử dụng hiện tại vào một EJB stateless session bean như sau:
@Stateless
public class SomeBackendService {
@Inject @Current
private User user;
}
Câu hỏi của tôi: Liệu đối tượng người dùng hiện tại luôn được tiêm lại sau khi phiên thay đổi, bởi vì các phụ thuộc của bean phiên không trạng thái thường được tiêm một lần vào thời gian tạo và bean có thể được gộp lại và được sử dụng trong các phiên khác nhau?
Hoàn toàn quên proxy. Tôi đã thử nó và nó hoạt động như mong đợi. Cảm ơn. – Theo