您的位置:首页 > 编程语言 > Java开发

管理Java中的Notes、Domino后台对象

2011-11-09 11:07 579 查看
熟悉Domino/Notes开发的朋友应该都知道Notes.jar。Notes.jar为我们提供了一整套的Java API,帮助我们访问、操纵Domino/Notes后台中的对象。包括Database,View,Document,ACL等等。Java程序员可以很方便的在Agent,XPages或者独立Java程序中使用这些API来访问后台对象,实现新功能或者和第三方系统进行整合。不过,在使用这些对象的过程中,我们需要注意管理好这些对象的生存周期,否则,这些对象将在不知不觉中,占用大量的后台资源。

由于Java天生带有的垃圾回收机制,Java程序员往往对Java对象的回收并不需要过多关心。当我们不需要某个对象之后,我们只需要把对应的对象应用设置为NULL,之后Java的垃圾回收机制会在”适当的“时候回收对象所占用的内存。不过,这一机制对Domino后台对象并不适用,除了内存空间之外,Domino后台对象还占用了相应的后台资源,Java的垃圾回收将无法知道何时”必须“回收这些资源,因此其回收是不及时的。我们无法依赖Java的垃圾回收来有效管理后台资源。对于Domino
Java对象的管理,我们有一些必须要注意的原则。

图一 Domino对象间的包含关系





规则一:每一个Domino对象都需要被释放。每一个Domino对象类都有一个方法叫recycle(),我们可以通过显示调用对象的recycle对象以释放我们不再需要的Domino对象。
规则二:每一个Domino对象在释放时,都会自动释放他所包含的对象。比如我们通过Document获取的Item和RichTextItem对象,会随着Document的释放而释放。而Session对象释放时,我们获得的Database、View、Document对象都会被自动释放。因此:

子规则一:当我们还需要使用某个子对象时,我们必须注意保证其父容器对象没有超出其作用域。
子规则二:当我们需要访问某容器的少数子对象时,我们可以通过释放容器对象隐性释放子对象;当我们需要在循环中访问很多个子对象或者容器类需要长期存在时,我们需要在使用完毕后显式的释放每一个子对象。

规则三:尽快释放不需再使用的对象。
规则四:DateTime和Name对象直接包含在Session对象中,因此我们在使用完毕后必须立即主动释放。对于DataTime,我们可以调用ViewEntry、Document等对象的setPreferJavaDates()方法来要求返回Java的Data对象,以替代Domino的Datatime对象。

在我们书写代码的时候,也需要注意回避Java的垃圾回收机制。比如:

例一:

不合适的写法:

document = null;

正确的写法:

document.recycle();

例二:

不合适的写法:

view=viewNavigator.getNext(view);

正确的写法:

tmpView = viewNavigator.getNext(view);

view.recycle();

view = tmpView;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: