EntityManager стал NULL через некоторое время (около 10 м) - PullRequest
1 голос
/ 05 июля 2011

в моем приложении JavaEE 6 (JBoss 6.0.0.Final) У меня есть иерархия классов, обрисованная в общих чертах следующим образом:

@Stateful public class UserFacade
{
  @Inject @MyRepository
  private EntityManager em;
}

@Stateful public class UserBl
{
  @EJB private UserFacade fUser;
}

public class MyServlet
{
  @EJB private UserBl blUser;
}

Сервлет используется во время процесса входа в систему и работает нормально.Но если сервлет вызывается из того же браузера после периода неактивности около 10 минут, EntityManager em in UserBl становится NULL (проверено это перед использованием).

В другом приложении(JBoss 5.1.0.GA) Я выпустил аналогичное решение и решил его путем явной проверки на NULL и поиска EntitiyManager из контекста в этом случае.

Интересно,есть фундаментальный недостаток дизайна или если я что-то пропустил.В этом сценарии @Stateless Бобы тоже возможны.Но в моем понимании это должно работать и с @Stateful Beans.

1 Ответ

1 голос
/ 05 июля 2011

Насколько я помню, внедрение bean-компонентов с состоянием было проблематичным (по крайней мере, в JavaEE 5).Это может быть проблема активации пассивации.

Но здесь вам не нужны бины с отслеживанием состояния - EntityManager для каждой транзакции (по умолчанию; вы можете установить его на расширенный, что позволяет охватывать несколько запросов)) и бин без гражданства - правильный путь.

...