До сих пор я почти всегда работал с no-interface EJBs и немного понимаю необходимость аннотации @Local. Рассмотрим следующий пример:
public interface MyBeanIntf { void doStuff(); }
@Stateless
public class MyBean implements MyBeanIntf { public void doStuff(){ } }
Должен ли MyBeanIntf
быть помечен как @Local
? Я не вижу в этом никакой пользы, потому что даже если я не аннотирую его как @Local
, я все равно могу использовать DI, чтобы правильно внедрить его в UI Controller:
@Named
@SessionScoped
public class TestController implements Serializable {
// injection works perfectly, even when MyBeanIntf is not marked as @Local
@Inject
private MyBeanIntf myBean;
// or even like this:
// @EJB
// private MyBeanIntf myBean;
}
Давайте усложним задачу:
public interface MyBeanIntf { void doStuff(); }
public class MySuperBean implements MyBeanIntf { public void doStuff() { } }
@Stateless
public class MyBean extends MySuperBean { }
Считается ли MyBean
теперь допустимым Local EJB
бобом? У меня есть некоторые сомнения, потому что он реализует интерфейс косвенно.