【发布时间】:2014-09-07 03:41:03
【问题描述】:
我在回收Notes对象方面一直相当严格,但是我遇到了无法回收对象的情况,因为它是从方法传递回调用代码的。所以在课堂上我有这个代码:
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;
}finally{
Utils.recycleObjects(s);
}
}
这会打开一个数据库,然后将 appDB 传递回调用程序。显然,如果我在调用程序中实例化数据库,我将需要回收它,但在这个类方法中,我无法回收它,因为它正在被传回。我是在用这个制造一个定时炸弹吗?如果是这样,有没有办法解决这个问题?该方法在会话的生命周期内可以被调用数百次。
【问题讨论】:
-
只是为了好奇 - getAppRepID() 中有什么?
-
此方法是 AppProperties 类的一部分,它存储在字符串类型的 HashMap 中,对象
HashMap 存储一个或多个应用程序定义(请参阅stackoverflow.com/questions/24746448/…)所以 getAppRepID 得到当前应用程序数据库副本 ID 的值。 AppProperties 类存储了关于可以从主数据库调用的每个应用程序的几条信息。通过使用这种方法,我可以重用我的大部分 XPage 和自定义控件。 90% 的应用程序设计在主数据库中是通用的。