Как внедрить один EJB 3.1 в другой EJB - PullRequest
3 голосов
/ 26 августа 2010

Я разрабатываю простое приложение, в котором один EJB-компонент должен вводиться в другой. Я разрабатываю в IDEA Jetbrains IDE. Но после того, как я сделал аннотацию @EJB в локальном бесстатичном классе Ejb, моя IDE выделила его с ошибкой: EJB '' с интерфейсом компонента 'ApplicationController' не найден.

Может кто-нибудь сказать, почему?

Ответы [ 2 ]

13 голосов
/ 26 августа 2010

Внедрение ссылки EJB в другой EJB может быть выполнено с использованием аннотации @EJB. Вот пример, взятый из Внедрение других EJB-файлов Пример из документации OpenEJB:

Код

В этом примере мы разрабатываем два простых сессионные компоненты без сохранения состояния (DataReader и DataStore), и покажем, как мы можем используйте аннотацию @EJB в одном из эти бобы, чтобы получить ссылку на другой сессионный компонент

Сессионный компонент хранилища данных

Bean

@Stateless
public class DataStoreImpl implements DataStoreLocal, DataStoreRemote{

  public String getData() {
      return "42";
  }

}

Локальный бизнес-интерфейс

@Local
public interface DataStoreLocal {

  public String getData();

}

Удаленный бизнес-интерфейс

@Remote
public interface DataStoreRemote {

  public String getData();

}

Сессионный компонент DataReader

Bean

@Stateless
public class DataReaderImpl implements DataReaderLocal, DataReaderRemote {

  @EJB private DataStoreRemote dataStoreRemote;
  @EJB private DataStoreLocal dataStoreLocal;

  public String readDataFromLocalStore() {
      return "LOCAL:"+dataStoreLocal.getData();
  }

  public String readDataFromRemoteStore() {
      return "REMOTE:"+dataStoreRemote.getData();
  }
}

Обратите внимание на использование аннотации @EJB на DataStoreRemote и DataStoreLocal поля. Это минимум, необходимый для EJB ref разрешающая способность. Если у вас есть две бобы, которые реализовать тот же бизнес интерфейсы, вы хотите, чтобы атрибут beanName выглядит следующим образом:

@EJB(beanName = "DataStoreImpl") 
private DataStoreRemote dataStoreRemote;

@EJB(beanName = "DataStoreImpl") 
private DataStoreLocal dataStoreLocal;

Локальный бизнес-интерфейс

@Local
public interface DataReaderLocal {

  public String readDataFromLocalStore();
  public String readDataFromRemoteStore();
}

(Удаленный бизнес-интерфейс не показано для краткости).

Если он не работает должным образом, возможно, покажите какой-нибудь код.

5 голосов
/ 20 августа 2012

Я считаю, что это ошибка IntelliJ IDEA. Эта тема решила проблему для меня:

добавление EJB Facet (в структуре проекта> модули) помогло

...