Java – how to inject beans using EJB 3.1 before the class constructor runs?
I have a facade with persistence units I need the facade and initialize its dependencies before the rolecontroller constructor runs. Can I do this in EJB 3.1?
In spring, you only need to add some parameters (preconstruction = "true") to @ configurable
But I can't find a method in EJB. I always get a 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);
}
Solution
It is often a bad idea to perform any logic in constructors (not just on EJB operators) Use @ postconstruct instead:
@postconstruct
public init(){
listOfRoles = roleFacade.getListOfRoles();
listChoosenRoles = new ArrayList();
listOfDualRoles = new DualListModel<Roles>(listOfRoles,listChoosenRoles);
}
Using this annotation, the container will first instantiate the EJB object, the JVM will run the (empty) constructor, inject the dependency container through reflection, and call all methods annotated with @ postconstruct in unspecified order when everything is ready The EJB is now ready to service the request
I think some container / updated EJB specifications allow constructor injection, but I never use it
