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”)