循环收集会导致锁定

时间:2012-11-21 14:26:55

标签: xpages

我正在搜索然后循环结果。这导致我的代码锁定,更糟糕的是,它阻止了该数据库的任何进一步使用。即使在浏览器关闭后也是如此。似乎这个“锁定”在一段时间后被清除,直到我再次尝试我的代码。我将改变我执行此特定任务的方式,但我很好奇导致此锁定的原因。

     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();

3 个答案:

答案 0 :(得分:4)

以下一行......

var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");

...返回 void ,您的变量 item 未定义。使用此

的下一个操作
item.appendToTextList(doc.getNoteID());

抛出错误并始终在 catch -Block中结束。然后,下一个文档从不获取,你有一个无限循环。

修改
replaceItemValue 方法通常返回NotesItem,但不返回NotesXspDocument!

答案 1 :(得分:1)

我不确定您的数据库中有多少个文档。我看到两个潜在的问题:

1) db.search(我认为)不建议使用,因为它会导致性能问题。 不确定它是否与您的问题有关,而不是使用db.search我建议使用其他东西,例如。 G。具有与您的查询匹配的选择公式的视图。

2)如果您的数据库有许多与您的查询匹配的文档,则Java代码可能会导致问题。据我所知,你不应该使用java获取超过10k的多米诺骨牌对象。

答案 2 :(得分:0)

至少有两种方法可以调试它。

在服务器上安装XPages Toolbox。使用CPU分析器查看花费最多时间的内容。

http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=xpages%20toolbox

将代码重写为java,在服务器上启用调试并远程调试。 这是一个视频,告诉你如何做到这一点:

http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Debug_Java_for_XPages_in_NSFs