【发布时间】:2012-10-12 19:19:30
【问题描述】:
我想遍历(可能很大)Lotus Domino 数据库中的每个文档,如果处理中断(网络连接错误、应用程序重新启动等),我能够从最后一个文档继续它。我没有对数据库的写入权限。
我正在寻找一种无需从服务器下载已处理的文档的方法。因此,我必须将一些启动信息传递给服务器,哪个文档应该是(可能重新启动的)处理中的第一个文档。
我检查了
AllDocuments属性和DocumentColletion.getNthDocument方法,但该属性未排序,所以我猜两个调用之间的顺序可以改变。另一个想法是使用formula query,但这些查询似乎无法进行排序。
-
第三个想法是
Database.getModifiedDocuments方法和对应的Document.getLastModified方法。看起来不错但是 在我看来,返回集合的顺序没有记录,并且基于创建时间而不是上次修改时间。这是一个基于official example的示例代码:
System.out.println("startDate: " + startDate); final DocumentCollection documentCollection = database.getModifiedDocuments(startDate, Database.DBMOD_DOC_DATA); Document doc = documentCollection.getFirstDocument(); while (doc != null) { System.out.println("#lastmod: " + doc.getLastModified() + " #created: " + doc.getCreated()); doc = documentCollection.getNextDocument(doc); }它打印以下内容:
startDate: 2012.07.03 08:51:11 CEDT #lastmod: 2012.07.03 08:51:11 CEDT #created: 2012.02.23 10:35:31 CET #lastmod: 2012.08.03 12:20:33 CEDT #created: 2012.06.01 16:26:35 CEDT #lastmod: 2012.07.03 09:20:53 CEDT #created: 2012.07.03 09:20:03 CEDT #lastmod: 2012.07.21 23:17:35 CEDT #created: 2012.07.03 09:24:44 CEDT #lastmod: 2012.07.03 10:10:53 CEDT #created: 2012.07.03 10:10:41 CEDT #lastmod: 2012.07.23 16:26:22 CEDT #created: 2012.07.23 16:26:22 CEDT(我这里没有使用任何
AgentContext来访问数据库。数据库对象来自session.getDatabase(null, databaseName)调用。)
有没有办法通过 Lotus Domino Java API 可靠地做到这一点?
【问题讨论】:
-
由于您没有对源数据库的写入权限,您必须将您处理过的所有文档的 UniversalID 存储在另一个数据库甚至本地文本文件中,并跳过那些已经处理过的文件一次。 UNID 不会改变,因此它为您提供了更多保证,您只处理每个文档一次。
-
@srini.venigalla:目前的解决方案与此非常相似,但我想避免再次下载并跳过已处理的文档。重新启动似乎是一个很大的开销。
-
我打算建议使用 NotesDatabase 类的 UnprocessedDocuments 属性,但它看起来需要 AgentContext。 publib.boulder.ibm.com/infocenter/domhelp/v8r0/…
标签: java lotus-notes lotus-domino