管理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;
由于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;
相关文章推荐
- 深入研究java对String字符串对象的创建以及管理
- 用 java 的 List<> 对象管理客户端连接的服务线程
- JAVA对象及属性的内存堆栈管理(通过小程序简单说明)
- 深入研究java对String字符串对象的创建以及管理
- Java80商城系统第九节-前端订单操作后台订单评论管理
- 巧妙管理Domino服务器notes.ini实用参数
- 前台如何将多个json对象传入java后台
- 管理造成的问题:京东商城后台语言改用java
- (原创)深入研究java对String字符串对象的创建以及管理
- JavaDay05--Notes(关键字,对象,类)
- Java Notes: Synchronized的类锁和对象锁以及谈谈线性安全类
- C++的引用计数j控制智能指针——>Java的引用计数管理共享对象
- JAVA对象及属性的内存堆栈管理(通过小程序简单说明)
- 用 Java 访问 Domino 的对象(三)
- 详解Java String字符串对象的创建及管理(1)
- Java乔晓松-权限管理中的系统权限和对象权限的管理
- Java开发自己的IDE(已经有界面、编译、运行、后台工程管理功能)
- JS中直接从java后台获得对象的值(数组的值)
- Java Notes: Synchronized的类锁和对象锁以及谈谈线性安全类
- 2009年Lotus Domino/Notes十大管理技巧