2011-10-07 15 views
6

Tengo una fachada que tiene una unidad de persistencia. Y necesito la Fachada y sus dependencias inicializadas antes de que se ejecute RoleController Conconstructor, ¿es posible en EJB 3.1 hacer eso?Cómo inyectar un frijol con EJB 3.1 antes de que se ejecute el constructor de la clase?

En Spring usted simplemente agrega algunos parámetros (preConstruction = "true") al @configurable y listo.

Pero en EJB no puedo encontrar una manera de hacer eso siempre consigo un 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); 
    } 

Respuesta

11

Es generalmente una mala idea realizar ninguna lógica en el constructor (no sólo en el patio EJB) . Utilice @PostConstruct lugar:

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

Con esta anotación el contenedor primera instancia de un objeto EJB, JVM se ejecuta una constructora (vacío), recipiente a través de la reflexión inyecta dependencias y cuando todo esté llamadas listos todos los métodos anotados con @PostConstruct el fin no especificado . Ahora el EJB está listo para atender solicitudes.

Creo que algunos contenedores/nuevas especificaciones EJB permiten la inyección del constructor, pero nunca lo he usado.

+0

¡Exactamente lo que necesitaba! –

Cuestiones relacionadas