Reputation: 23834
For example in this question I see:
@ManagedBean
@SessionScoped
public class LoginBean {
@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;
Does @EJB annotation automatically inject these instances to this class?
Thank you.
Upvotes: 0
Views: 1029
Reputation: 68715
The @EJB annotation (and @Resource, @WebServiceRef, etc.) serves two purposes:
It declares a reference in the component namespace. For example, @EJB(name="myEJB") creates a reference java:comp/env/myEJB. If you annotate a field and do not specify a name, then it creates a reference java:comp/env/com.example.MyClass/myField. If the annotation is declared on a field or setter method, then the container performs injection when the component is created. How the reference is resolved varies, independent of whether the reference is being resolved for a lookup("java:comp/env/myEJB") or due to injection:
If EE 6+ is used, the lookup attribute requires a JNDI lookup to resolve the target. Some application servers support mappedName, which is specified to be vendor specific. This is usually implemented by performing a lookup. Application servers support bindings at deployment time. This is usually implemented by performing a lookup. If no other binding information is provided and the bean interface (beanInterface or the field type) is only implemented by a single EJB in the application, then the EJB specification requires that it fall back to that. If no other binding information is provided and #4 cannot work, some application servers will attempt to perform a lookup in the server namespace based on the ref name (for example, java:comp/env/myEJB might cause a lookup of myEJB in the server namespace).
Upvotes: 3