我什么时候需要回收?

时间:2015-02-06 16:22:20

标签: java xpages recycle

我有一个applicationScope托管bean,它将一系列应用程序的大量信息加载到Map中。然后,以下方法是bean的一部分:

public Database getAppDB() {
    Database appDB = null;
    try{
       Session s = ExtLibUtil.getCurrentSession();
       serverName = s.createName(s.getCurrentDatabase().getServer()).getCommon();
       appDB = s.getDbDirectory(serverName).openDatabaseByReplicaID(this.getAppRepID());
       return appDB;
  }catch (NotesException e){
      System.out.println(e.toString());
      return appDB;
  }

}

现在这个方法声明了两个对象(Session和appDB)。不确定它们是否需要在返回之前进行回收,如果是这样,那么如何做到这一点因为appDB是返回值。会议可以很容易地回收。 现在很清楚,如果我从某个SSJS调用这个方法:

var thisDB:NotesDatabase = appProps[ssApplication].appDB;

我需要在SSJS中回收这个数据库。

如果我在SSJS中做了类似的事情:

var cNames =  appProps[ssApplication].appDB.getView("vwFTSearch").getColumnNames();

我假设没有什么可以回收的?

2 个答案:

答案 0 :(得分:2)

Knut粘贴的其他两个问题的详细答案。

对您的具体问题的简短回答是,您不应回收getAppDB()方法中的这些对象。

会话将在页面提供后自动回收。数据库对象应该由此方法的调用者回收(SSJS,对于您的情况)。

答案 1 :(得分:0)

一般规则是:您销毁(回收)您创建的内容。你留下了所给的东西。会话和数据库是系统提供的对象(给定),因此即使您使用不同的函数来获取它们也不要管它们。

其余的我找到了一个合理的练习:在创建对象的函数中,它被回收,而不是其他任何地方。你必须把“创造”一点点务实。例如。当你有类似的东西时:

 var custDB = getCustDB(curUser);

然后你不会认为getCustDB是创建者,但是那行代码并且有了recycle();在该代码所在的函数中。