我有一個應用程序範圍的託管bean,主要目的是用較少的動態數據爲應用程序的其餘部分提供服務,比如所有可用的語言和其他一些東西。應用程序範圍受管理的bean正在死亡?
的ApplicationController
@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是如何工作的。任何幫助,將不勝感激。
我想問你,什麼是語言加入?應用程序應該始終在服務器上運行,因此,如果我們添加任何內容,數據將不會被更改..? – 2015-09-12 23:56:28