Внедрение ссылки 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();
}
(Удаленный бизнес-интерфейс не
показано для краткости).
Если он не работает должным образом, возможно, покажите какой-нибудь код.