Say I have the following EJB (using ejb3):
@Stateless(name='Queries') @Remote(Queries.class) @Local(Queries.class) public final class QueriesEJB implements Queries { ... }
The class is available through both a local and a remote interface.
How can I inject the local interface for this EJB in another part of the app?
Specifically, I’m not sure how to create an @EJB annotation that selects the local interface. For example, is the following sufficient?
@EJB(name='Queries') private Queries queries;
In particular I want to avoid creating separate local and remote interfaces simply for the purpose of distinguishing via @EJB’s ‘beanInterface’ property.
According to the spec you cannot have an interface that is Remote and Local at the same time. However, you create a super-interface, put all methods there, and then create 2 sub-interfaces. Having done that, simply use @EJB. This way you need to maintain only one interface at all.
EDIT: See section 3.2 in ‘EJB3 spec simplified’ at http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html