在此JavaBean中,我将某些对象写为(静态)。但是,当我到达logDoc.save()方法时,它将返回错误。删除所有(静态),所有运行正常。 控制台中的错误是:
HTTP JVM: lotus.domino.local.Document method: save, row: -1:
NotesException: Notes error: You are not authorized to perform that operation
或
HTTP JVM:lotus.domino.local.NotesBase method: CheckObject, row: -1:
NotesException: Object has been removed or recycled
取决于“匿名”的ACL设置。
任何人都可以在这里向我解释静态对象的问题吗?
public class AnyRest extends CustomServiceBean implements Serializable {
private static final long serialVersionUID = 3548995909847938225L;
private (static) Database logDB=null;
private (static) Document logDoc=null;
private (static) RichTextItem logBody=null;
private (static) void log(String text) {
if (logDB==null) logDB= ExtLibUtil.getCurrentDatabase();
try {
if (logDoc==null) {
logDoc=logDB.createDocument();
logDoc.replaceItemValue("form","log");
logBody=logDoc.createRichTextItem("Body");
}
logBody.appendText(text);
logBody.addNewLine();
logDoc.save();
} catch(NotesException ne) {
logStackTrace(ne);
}
}
private (static) void destroyLog() {
try {
if (logDoc!=null) {
logDoc.save();
logDoc.recycle();
logDoc=null;
}
if (logDB!=null) {
logDB.recycle();
logDB=null;
}
} catch (Exception e) {
logStackTrace(e);
}
}
public String doPost(String strObject){
//do useful things
log("useful post data")
}
}
答案 0 :(得分:4)
Domino对象不可可序列化。
您只能在类方法中内使用Domino对象。
在类字段中存储数据,例如:
Domino服务器的名称
数据库路径
视图名称
文档ID或文档ID列表,
文档项目的值,
这样,您可以在需要时轻松地再次获得Domino对象。
但是,切勿将Domino对象(如会话,数据库,视图和文档)存储在类字段中。
(除非您在每个新的请求及其字段都实例化该类,但是使用“静态”绝对不是这种情况。)
答案 1 :(得分:1)
后端对象,将在每个请求结束时回收。您应该重写该类以重新获取每个请求的文档,或者每次创建一个新请求,或者在创建文档时存放该文档的UNID,然后使用getDocumentByUNID。