Xpages 循环收集会导致锁定
我正在进行搜索,然后循环搜索结果。这会导致我的代码被锁定,更糟糕的是,它会将该数据库从任何进一步的使用中锁定。即使在浏览器关闭之后。在我再次尝试我的代码之前,这个“锁定”似乎会在一段时间后被清除。我将改变我执行这项特殊任务的方式,但我很好奇是什么导致了这种锁定Xpages 循环收集会导致锁定,xpages,Xpages,我正在进行搜索,然后循环搜索结果。这会导致我的代码被锁定,更糟糕的是,它会将该数据库从任何进一步的使用中锁定。即使在浏览器关闭之后。在我再次尝试我的代码之前,这个“锁定”似乎会在一段时间后被清除。我将改变我执行这项特殊任务的方式,但我很好奇是什么导致了这种锁定 var collection = database.search("Form = 'Request01' & Status='Approved'"); if (collection.getCount() == 0) {
var collection = database.search("Form = 'Request01' & Status='Approved'");
if (collection.getCount() == 0)
{
getComponent("panel1").setRendered(false);
getComponent("panel2").setRendered(true);
getComponent("panel4").setRendered(true);
return;
}
dBar.info("Approved Requests Found= " + collection.getCount());
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
var doc:NotesDocument = collection.getFirstDocument();
while (doc != null)
{
try
{
var tmpDoc = collection.getNextDocument(doc);
item.appendToTextList(doc.getNoteID());
dBar.info("Processing document: " + doc.getNoteID() )
doc.recycle();
doc = tmpDoc;
}
catch(e)
{
dBar.error(e.message);
}
}
document1.save();
我不知道你的数据库中有多少文档。我看到两个潜在问题: (一) 我认为不建议使用db.search,因为它会导致性能问题。 不确定这是否与您的问题有关,但我建议您使用其他方法,例如。G具有与查询匹配的选择公式的视图
2) 如果数据库中有许多文档与查询匹配,那么java代码可能会导致问题。据我所知,您不应该使用java获取超过10k个domino对象 我不确定您的数据库中有多少文档。我看到两个潜在问题: (一) 我认为不建议使用db.search,因为它会导致性能问题。 不确定这是否与您的问题有关,但我建议您使用其他方法,例如。G具有与查询匹配的选择公式的视图
2) 如果数据库中有许多文档与查询匹配,那么java代码可能会导致问题。据我所知,您不应该使用java获取超过10k个domino对象 至少有两种方法可以调试此功能 在服务器上安装XPages工具箱。使用CPU探查器查看最耗时的内容 将代码重写为java,在服务器上启用调试,然后进行远程调试。 以下是一段视频,向您展示了如何做到这一点:
至少有两种调试方法 在服务器上安装XPages工具箱。使用CPU探查器查看最耗时的内容 将代码重写为java,在服务器上启用调试,然后进行远程调试。 以下是一段视频,向您展示了如何做到这一点: 下一行
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
。。。返回void,变量项未定义。下一个操作将使用此
item.appendToTextList(doc.getNoteID());
抛出一个错误,结果总是在您的catch块中。然后,下一个文档是从不获取,您有一个无限循环
编辑:replaceItemValue方法通常返回NotesItem,但不返回notesxpdocument 下面一行
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
。。。返回void,变量项未定义。下一个操作将使用此
item.appendToTextList(doc.getNoteID());
抛出一个错误,结果总是在您的catch块中。然后,下一个文档是从不获取,您有一个无限循环
编辑:replaceItemValue方法通常返回NotesItem,但不返回notesxpdocument replaceItemValue应该返回一个项,所以我不确定这是无限循环的原因,但Sven是对的:try应该在循环的周围,而不是在循环的内部。@Tim:不,notesxpdocument的replaceItemValue方法返回void。对于Java和LS,它返回NotesItem。那么如何获得NotesItem的句柄呢?他们会这样实现什么呢?我认为他们这样实现是为了防止数据不一致(想想老派notes应用程序中良好的旧UI/后端问题)。您可以通过以下方式访问该项:document1.getDocument().getFirstItem(“docId”)replaceItemValue应该返回一个项,所以我不确定这是无限循环的原因,但Sven是对的:尝试应该围绕循环,而不是在循环内。@Tim:不,NotesXspDocument的replaceItemValue方法返回void。对于Java和LS,它返回NotesItem。那么如何获得NotesItem的句柄呢?他们会这样实现什么呢?我认为他们这样实现是为了防止数据不一致(想想老派notes应用程序中良好的旧UI/后端问题)。您可以通过以下方式访问该项:document1.getDocument().getFirstItem(“docId”)