首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最佳实践

最佳实践
EN

Stack Overflow用户
提问于 2014-07-14 17:29:21
回答 1查看 232关注 0票数 0

我又回到了构建一个hashMap的托管Bean。( Creating a HashMap of type )我定义了一个类

代码语言:javascript
运行
复制
public class AppProperties {
    private String appRepID;
    private String helpRepID;
    private String ruleRepID;
    private String filePath;
    private Vector formNames;
    private Database appDB;
    // all the getters and setters
}

托管bean将创建hashMap的应用程序范围变量。在Bean的构造函数中,我通过收集来自多个不同地方的所有信息来构建每个应用程序的值(键)。爬行动物是非常直接的。我的问题/关注的是,将appBD存储在应用程序作用域变量中是明智的。我已经读过,不应该将Notes对象存储在一个作用域变量中,这在这里是个问题吗?其次,如果是这样的话,我可以向AppProperties中添加一个方法,在调用application的方法时打开DatabaseByReplicaID,这会给进程增加相当大的开销,因为数据库对象将在应用程序的生命周期中多次被调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 17:53:13

对,您不应该将Notes对象存储在bean的作用域变量和属性中。

因为它们是不可串行化的(对于某些作用域来说是必须的),并且它们将在生命周期之间被回收。更准确地说,由于XSP引擎基于C句柄,因此在请求-响应周期之间创建Notes对象,当响应写入用户时,它们都将被回收。试图将它们保存在内存中将使它们对您的服务器“有毒”。

您可以在bean中定义一个方法(如GetHelpDb()),在需要时创建并返回它。这并不是一个巨大的性能成本。因为Domino服务器实现了数据库的缓存。当您一次又一次地打开数据库时,不会生成额外的磁盘I/O。

在这种情况下与Notes数据交互的最佳实践是缓存。我经常在我的应用程序中使用这种方法。您可以在单个方法中获取值,将它们缓存到HashMap(s)中,并在需要时从映射中获取它们。使用getter方法,您还可以检查一个基于时间的值来处理超时.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24742311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档