Поскольку EJB 3.1, компоненты не должны иметь локальный интерфейс, и я обычно не использую один:EJB 3.1 - Почему безжизненный bean-компонент должен быть введен его интерфейсом (если он есть)?
@Stateless
public class MyService(){
public void buisnesssMethodA(){
...
}
public void buisnesssMethodB(){
...
}
}
и в моем КДИ боб я просто
@Inject
private MyService myService;
Это легко и просто, и все работает отлично.
Теперь я недавно что-то обнаружил.
Представьте себе, что мне нужен интерфейс, который представляет собой подмножество моего бизнес-метода.
public interface MyInterface{
void businessMethodA();
}
Теперь, если я сделаю мой Stateless боб реализовать этот интерфейс, JBoss не удается развернуть и бросает ошибку
WELD-001408 Unsatisfied dependencies for type [MyService] with qualifiers [@Default] at injection point [[field] @Inject
Так что я считаю, что я соблюдая следующее правило:
Если у компонента без состояния нет интерфейса, его можно ввести с помощью класса. Если он реализует интерфейс, он должен быть введен с использованием интерфейса.
Вот мои вопросы:
- Является ли это правило верно?
- Если это так определено спецификациями EBJ?
- В чем причина этого ограничения?
Я не могу отмените свои quetions, но если вам нравится обходной путь, вы можете попробовать аннотацию '@ LocalBean'. Это помогло мне в аналогичной ситуации. – Tom
@Tom То, что мне нужно, спасибо! – phoenix7360