4
votes

Is is possible to inject JSF Managed Bean into an EJB? I have injected JSF Managed Beans in to another JSF Managed Bean as a @ManagedProperty. But when I do the same to the EJB, I get a null point exception.

1
Why would you want to do that? What exactly is the problem for which you incorrectly thought that this would be the right solution? Ask and elaborate about the concrete functional requirement instead.BalusC
I have included business logic into a JSF Managed Bean erroneously. As you suggested, I will re factor so that the business logic in the JSF Managed Bean methods needed by EJBs shifted to a new EJB. Thank you. But how can i accpet this as the answer?Buddhika Ariyaratne

1 Answers

11
votes

No, that's not possible. The @ManagedProperty works inside @ManagedBean classes (JSF managed beans) only. You can only use @EJB or @Inject to inject another EJB or a CDI managed bean (a @Named class).

However, it makes design technically no sense to inject a front-end class like a JSF or CDI managed bean in a business service class like an EJB. An EJB should be designed in such way that it can without changes be reused together a completely different front-end like JAX-RS webservice or even a plain vanilla servlet. An EJB should absolutely not have any javax.faces.* imports/dependencies (like as that it should not have any javax.ws.rs.* nor javax.servlet.* ones).

If you intend to pass data from the JSF managed bean to an EJB, then just pass it as method argument. Such data is usually in flavor of a JPA @Entity or at least an ID/keyword which returns an entity.