Я изучаю понимание EJB-поиска и пытаюсь понять, как работает контейнер и пул. Я создал тестовое приложение, каждое из которых я объясню.Внутри EJB lookup: constructor, @PostConstruct
Первая реализация: Lookup внутри конструктора
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ic.close();
}
public void test() {
ejbInjected.callSomeMethod();
return;
}
}
Инъекция выполняется внутри конструктора класса (плохая практика), но все работает. Конструктор извлекает прокси для EJB. Когда я вызываю метод test()
, он выполняется правильно.
Второе осуществление: LookUp внутри @PostConstruct
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
}
@PostConstruct
public start() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ic.close();
}
public void test() {
ejbInjected.callSomeMethod();
return;
}
}
В качестве предварительного Например, поиск работает хорошо, а испытание метода.
Третья реализация: Lookup внутри конструктора и функции исполнения
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ejbInjected.callSomeMethod();
ic.close();
}
}
С этой реализации, поиск работает, но функция привал/заморозить нить, как контейнер еще не готов к возвращению НЕ реализация прокси, но весь EJB и функция не могут быть выполнены.
Когда вызывающий конструктор вызывается, компонент еще не инициализирован и никакие зависимости не вводятся? Возвращается только прокси, но он еще не доступен и не может быть извлечен из EJB всего пула?
Вызывается метод EjbTest(), прокси EJB доступен, но EjbTest EJB еще не готов, пока не вызывается метод @PostConstruct (после выполнения конструктора класса). Но несколько раз третий пример прекрасно работает. Это просто вопрос завершения задачи времени? – StarsSky