2011-10-07 18 views
6

Tôi có một Mặt tiền có một đơn vị bền vững. Và tôi cần Facade và các phụ thuộc của nó được khởi tạo trước khi Conconstructor RoleController chạy, có thể trong EJB 3.1 để làm điều đó không?Làm thế nào để tiêm một Bean với EJB 3.1 trước khi constructor lớp chạy?

Vào mùa xuân, bạn chỉ cần thêm một số tham số (preConstruction = "true") vào @configurable và được thực hiện.

Nhưng trong EJB tôi không thể tìm thấy một cách để làm điều đó tôi luôn có được một NullPointer ...

@FacesConverter("rolesConverter") 
@Named("roleController") 
@SessionScoped 
@TransactionManagement(TransactionManagementType.CONTAINER) 
public class RoleController implements Serializable, Converter{ 

    private List<Roles> listOfRoles; 
    private List<Roles> listChoosenRoles; 
    private DualListModel<Roles> listOfDualRoles; 
    @EJB 
    private RoleFacade roleFacade; 

    public RoleController(){ 
     listOfRoles = roleFacade.getListOfRoles(); 
     listChoosenRoles = new ArrayList(); 
     listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
    } 

Trả lời

11

Nói chung đây là một ý tưởng tồi để thực hiện bất kỳ logic trong các nhà xây dựng (không chỉ trên sân chơi EJB) . Sử dụng @PostConstruct thay vì:

@PostConstruct 
public init(){ 
    listOfRoles = roleFacade.getListOfRoles(); 
    listChoosenRoles = new ArrayList(); 
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
} 

Với chú thích này container đầu tiên sẽ tạo một đối tượng EJB, JVM chạy một (trống) constructor, container thông qua phản ánh tiêm phụ thuộc và khi mọi thứ là cuộc gọi đã sẵn sàng tất cả các phương pháp chú thích với @PostConstruct theo thứ tự không xác định . Bây giờ EJB đã sẵn sàng để phục vụ các yêu cầu.

Tôi nghĩ rằng một số thùng chứa/thông số EJB mới hơn cho phép phép xây dựng, nhưng tôi chưa bao giờ sử dụng nó.

+0

Chính xác những gì tôi cần! –