Koray Tugay
Koray Tugay

Reputation: 23834

What is @EJB annotation used for in class fields?

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

Answers (1)

Juned Ahsan
Juned Ahsan

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

Related Questions