从传统的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