從傳統的Notes開發中,我們瞭解到在腳本中檢索Domino對象(如數據庫和視圖)無效,應避免在循環中使用。託管bean和緩存視圖查找
在XPages中,我們不能序列化Domino對象,而且我們經常會多次檢索同一個對象。我們舉一個例子,根據存儲在項目相關文檔中的項目編號檢索項目數據。該bean的作用域爲applicationScope
,結果被緩存。
public class Projects{
private TreeMap<String, Project> projectList;
public Projects() {
}
public Project getProjectInfo(String projNum) {
Project project = null;
if (projectList==null) {
projectList = new TreeMap<String,Project>();
}
if (projectList.containsKey(projNum)) {
project = projectList.get(projNum);
} else {
try {
Database projDb = DominoAccess.getDatabase("projects");
View v = projDb.getView("(projLookup)");
ViewEntry ve = v.getEntryByKey(projNum);
if (ve != null) {
project = new Project(ve);
projectList.put(projNum, project);
}
} catch (Exception e) {
}
}
return project;
}
}
當這首次用於例如重複時,將爲每個文檔創建數據庫和視圖對象。這是最佳實踐還是有更好的解決方法?
我知道我們可以在第一次使用時將所有項目放入Map中,但也不確定這是否是關於內存的最佳實踐?
只是幾個麪包屑尋找:你的bean可以實現地圖界面和大部分的邏輯去得到()方法;使用延遲初始化和/或內部的WeakHashMap來節省內存。 – 2013-04-25 13:09:30