当前位置: 代码迷 >> Lotus >> Domino中Java代理的困惑,该怎么处理
  详细解决方案

Domino中Java代理的困惑,该怎么处理

热度:110   发布时间:2016-05-05 07:14:44.0
Domino中Java代理的困惑
现有如下需求:
在当前数据库中生成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();
}
}
}
  相关解决方案