У меня есть управляемый компонент с областью действия приложения, основная цель которого — обслуживать остальную часть приложения с менее динамичными данными, такими как все доступные языки и еще несколько вещей.
Контроллер приложений
@ManagedBean(eager=true)
@ApplicationScoped
public class ApplicationController implements Serializable {
private static final long serialVersionUID = 25488214212L;
private List<Language> languages;
private Map<Language, List<LevelDescription>> descriptionsPersonal;
private Map<Language, List<LevelDescription>> descriptionsTechnical;
private List<Integer> levels = new ArrayList<Integer>();
@EJB private LanguageDao languageDao;
@EJB private LevelDescriptionDao levelDescriptionDao;
@EJB private IntraConnectionBean intraBean;
@EJB private ApplicationBean appBean;
public ApplicationController() {
}
@PostConstruct
public void init(){
languages = languageDao.findAll();
descriptionsTechnical = new HashMap<Language, List<LevelDescription>>();
descriptionsPersonal = new HashMap<Language, List<LevelDescription>>();
for(int i = 0; i < 6; i++)
levels.add(i);
for(Language l : languages){
List<LevelDescription> desc = levelDescriptionDao.findAll(l, true);
if(!desc.isEmpty())
descriptionsTechnical.put(l, desc);
desc = levelDescriptionDao.findAll(l, false);
if(!desc.isEmpty())
descriptionsPersonal.put(l, desc);
}
}
public List<Language> getLanguages(){
if(lang)
return languages;
}
public List<LevelDescription> getTechnicalItems(Language lang) {
return descriptionsTechnical.get(lang);
}
public List<LevelDescription> getPersonalItems(Language lang) {
return descriptionsPersonal.get(lang);
}
public List<Integer> getLevels(){
return levels;
}
}
Кажется, это работает нормально. Некоторое время. Когда я оставляю приложение в покое на некоторое время, может быть, на час, я получаю крайне странное поведение. Методы get, кажется, либо начинают возвращать пустые коллекции, либо возвращают коллекции с объектами, которые кажутся правильными, но не работают с публикацией selectOneMenus. Повторное развертывание заставляет его снова работать, что также затрудняет эксперименты, поскольку включение режима отладки заставит его снова работать путем повторного развертывания.
Какое временное событие могло вызвать это? Это не тайм-аут сеанса, я пробовал установить его на одну минуту и позволить сеансу умереть, не вызывая этой проблемы, в основном это происходит утром после того, как сервер разработки работал всю ночь без помех. Все EJB не имеют состояния, и я не могу представить, чтобы они были проблемой. Возможно, это проблема сериализации?
Прошу прощения за такую расплывчатость, возможно, я как-то неправильно понял, как работают bean-компоненты с областью действия приложения. Любая помощь будет оценена по достоинству.