现有如下需求:
在当前数据库中生成2万条文档。
LS代理:
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim doc As NotesDocument
For i = 1 To 20000
Set doc = db.CreateDocument
doc.form = "test"
Call doc.Save(True,True)
Next
以上代码运行无问题,在数据库中查看,都有。
Java代理:
- Java code
import lotus.domino.*;public class JavaAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); Database db = agentContext.getCurrentDatabase(); Document doc; for(int i=1;i<=20000;i++){ doc = db.createDocument(); doc.appendItemValue("form", "test"); doc.save(true,true); } } catch(Exception e) { e.printStackTrace(); } }}
以上代码执行完毕,在控制台没有任何报错,但是查看数据库中发现条数并非2万条,而是10539条,每次都是如此,所以想问下大家这样大概是什么原因造成的,是因为JVM运行内存不够?还是什么问题。
还有一个问题,就是Java代理是否需要每次都垃圾收集一下?
------解决方案--------------------
应该是内存不足导致,你可以看看Java调试窗口,应该有错误信息。试试这个:
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
DocumentCollection dc = db.getAllDocuments();
System.out.println("-------------Start is "+dc.getCount()+"------------------");
for(int i=1;i<=20000;i++){
Document doc = db.createDocument();
doc.appendItemValue("form", "test");
doc.save(true,true);
doc.recycle();
}
dc = db.getAllDocuments();
System.out.println("-------------Is Over! Doc is "+dc.getCount()+"------------------");
} catch(Exception e) {
e.printStackTrace();
}
}
}