Managed-Bean最佳实践

时间:2014-07-14 17:29:21

标签: java xpages

我回到构建hashMap的Managed-Bean。 (Creating a HashMap of type <String , Object>)我已经定义了一个类

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的Application Scope变量。在Bean的构造函数中,我通过从许多不同的地方收集所有信息来为每个应用程序(密钥)构建值。 repID非常简单。我的问题/关注是将appBD存储在Application Scope变量中是明智的。我已经读过一个永远不应该在Scoped变量中存储Notes对象这会是一个问题吗?其次,如果是这种情况,我可以向AppProperties添加一个方法,当调用获取应用程序数据库的方法时,该方法将打开DatabaseByReplicaID,这会给进程增加一些开销,因为数据库对象将被调用许多许多时候在应用程序的生命周期中。

1 个答案:

答案 0 :(得分:5)

是的,您不应将Notes对象存储在范围变量和bean的属性中。

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

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

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