EJB 3.1. Нужна ли аннотация @Local?

До сих пор я почти всегда работал с 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 бобом? У меня есть некоторые сомнения, потому что он реализует интерфейс косвенно.

7
задан jFrenetic 29 January 2012 в 10:26
поделиться