До сих пор я почти всегда работал с без интерфейсом EJB и немного разбирался в необходимости аннотации @Local. Рассмотрим следующий пример:EJB 3.1. Нужна ли @Local аннотация?
public interface MyBeanIntf { void doStuff(); }
@Stateless
public class MyBean implements MyBeanIntf { public void doStuff(){ } }
Если MyBeanIntf
быть помечено как @Local
? Я не вижу никакой пользы от этого, потому что даже когда я не аннотировать его как @Local
, я все еще могу использовать DI правильно внедрить его в контроллер пользовательского интерфейса:
@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
боб? У меня есть некоторые сомнения, потому что он реализует интерфейс косвенно.
Спасибо за ответ. Что касается ссылки на спецификацию, у меня все еще есть некоторые сомнения. В нем явно обсуждаются суперклассы, которые сами являются сеансовыми. Но что, если они просто абстрактные классы без аннотации '@ Stateless' или' @ Stateful'? – jFrenetic
Конечно, я не уверен в этом на 100%, но взгляните на отредактированный пост - возможно, это поможет. –
Спасибо за внимание. Я сам прочитал эту часть в спецификации, но почему-то ее пропустил. – jFrenetic