我什么时候需要回收?
When do I need to 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 是返回值。 Session 很容易被回收。
现在很清楚,如果我从一些 SSJS 调用这个方法:
var thisDB:NotesDatabase = appProps[ssApplication].appDB;
我需要在 SSJS 中回收 thisDB。
如果我在 SSJS 中做这样的事情:
var cNames = appProps[ssApplication].appDB.getView("vwFTSearch").getColumnNames();
我假设没有什么可回收的?
详细答案在克努特粘贴的其他两个问题中。
对您的具体问题的简短回答是,您不应该 回收 getAppDB()
方法中的那些对象。
会话将在页面提供后自动回收。数据库对象应该由这个方法的调用者回收(SSJS,对于你的情况)。
一般规则是:你销毁(回收)你创造的东西。你留下所给的。会话和数据库是系统提供的对象(给定的),因此即使您使用不同的函数来获取它们,您也不要管它们。
对于其余部分,我找到了一个合理的做法:在创建对象的函数中它被回收,而不是在其他任何地方。你必须采取 "created" 一点务实的态度。例如。当你有类似的东西时:
var custDB = getCustDB(curUser);
那么你不会认为 getCustDB 是创建者,而是那行代码和 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 是返回值。 Session 很容易被回收。 现在很清楚,如果我从一些 SSJS 调用这个方法:
var thisDB:NotesDatabase = appProps[ssApplication].appDB;
我需要在 SSJS 中回收 thisDB。
如果我在 SSJS 中做这样的事情:
var cNames = appProps[ssApplication].appDB.getView("vwFTSearch").getColumnNames();
我假设没有什么可回收的?
详细答案在克努特粘贴的其他两个问题中。
对您的具体问题的简短回答是,您不应该 回收 getAppDB()
方法中的那些对象。
会话将在页面提供后自动回收。数据库对象应该由这个方法的调用者回收(SSJS,对于你的情况)。
一般规则是:你销毁(回收)你创造的东西。你留下所给的。会话和数据库是系统提供的对象(给定的),因此即使您使用不同的函数来获取它们,您也不要管它们。
对于其余部分,我找到了一个合理的做法:在创建对象的函数中它被回收,而不是在其他任何地方。你必须采取 "created" 一点务实的态度。例如。当你有类似的东西时:
var custDB = getCustDB(curUser);
那么你不会认为 getCustDB 是创建者,而是那行代码和 recycle();在该代码所在的函数中。