I know roughly what this construction does: it creates a SomeType EJB and injects the object into another EJB.
@EJB(name="name1")
SomeType someVariable
Now I have a class which starts like this: (I give all class-level annotations, even though I think only the @EJBs
is relevant)
@Remote(SomeClass.class)
@Stateless(name="someName")
@EJBs({@EJB(name="name1",beanInterface=Type1.class),
@EJB(name="name2",beanInterface=Type2.class)})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class X extends Y{
//code
What do the @EJB
s do here? They probably get or create the "name1" ... objects from JNDI, but where do they put the result? I don't see a .lookup
call anywhere near, but the codebase is huge so I'm not very sure about this.
Bonus question: I presume the two @Transaction
annotations simply repeat defaults?
UPDATE: Multiple persons claimed at this point that @EJBs
is a proprietary extension. It is not. It is a core part of java EE5. See the JavaDoc for details.. It is simply a container for the individual @EJB
annotations.
I believe everyone who claims these EJB annotations do a lookup. I just want to know what happens with the result of this lookup.
The @EJB
annotation (and @Resource
, @WebServiceRef
, etc.) serves two purposes:
@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
.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:
lookup
attribute requires a JNDI lookup to resolve the target.mappedName
, which is specified to be vendor specific. This is usually implemented by performing a lookup.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.java:comp/env/myEJB
might cause a lookup of myEJB
in the server namespace).