Поиск EJB в элементе управления
У меня есть проблема сохранения ссылки на EJB в качестве члена из класса, не являющегося EJB (который используется как статический член в EJB)
скажи, что у меня есть
@EJB(...)
@Stateless
public Class SessionBean implements MySession{
protected static MyHelper helper = new MyHelper();
}
public Class MyHelper{
protected AnotherSessionBean ejb = lookup("jndi");
public void doSomething(){
ejb.foo();
}
}
Так как вспомогательный класс не является EJB, тогда у меня есть метод для поиска, называемый int экземпляром члена. с этим кодом я получил во время выполнения исключение java.lang.NoClassDefFoundError: Не удалось инициализировать класс в классе SessionBean.
когда я изменил MyHelper на это, он работал:
public Class MyHelper{
protected AnotherSessionBean getEjb(){
return (AnotherSessionBean)lookup("jndi");
}
public void doSomething(){
getEjb().foo();
}
}
интересно, почему первый способ не сработал...
1 ответ
Это может быть возможно, потому что AnotherSessionBean, возможно, не был инициализирован, когда просмотр JNDI произошел в первом фрагменте кода. Это означает, что SessionBean сначала инициализировался. При инициализации SessionBean вызывался конструктор MyHelper. Это в свою очередь называется jndi для AnotherSessionBean, который еще не загружен.
Это работало во втором фрагменте кода, потому что к моменту вызова getEjb() все EJB уже были инициализированы. Так что JNDI может найти AnotherSessionBean.