Поиск 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.

Другие вопросы по тегам