Xpages JavaBean静态注释对象导致保存错误
Xpages JavaBean static Notes Object cause error saving
在这个 JavaBean 中,我写了一些对象作为(静态)。但是当我到达 logDoc.save() 方法时,它 returns 错误。删除所有(静态),所有 运行 都很好。
控制台中的错误是:
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")
}
}
通过提供的会话检索的后端对象将在每个请求结束时回收。您应该重写 class 以在每次请求时重新检索文档,每次创建一个新文档或在创建文档时存储文档的 UNID,然后使用 getDocumentByUNID。
Domino 对象不可序列化。
您应该只在 一个 class 方法中使用 Domino 对象。
在 class 字段中存储数据,例如:
Domino 服务器的名称,
数据库路径,
视图名称,
文档的 ID 或文档的 ID 列表,
记录项目的值,
这样您就可以在需要时轻松地再次获取 Domino 对象。
但是,切勿在 class 字段中存储会话、数据库、视图和文档等 Domino 对象。
(除非您在每个新请求中实例化 class 并使用它来实例化字段 - 但是当您使用 "static" 时绝对不是这种情况。)
在这个 JavaBean 中,我写了一些对象作为(静态)。但是当我到达 logDoc.save() 方法时,它 returns 错误。删除所有(静态),所有 运行 都很好。 控制台中的错误是:
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")
}
}
通过提供的会话检索的后端对象将在每个请求结束时回收。您应该重写 class 以在每次请求时重新检索文档,每次创建一个新文档或在创建文档时存储文档的 UNID,然后使用 getDocumentByUNID。
Domino 对象不可序列化。
您应该只在 一个 class 方法中使用 Domino 对象。
在 class 字段中存储数据,例如:
Domino 服务器的名称,
数据库路径,
视图名称,
文档的 ID 或文档的 ID 列表,
记录项目的值,
这样您就可以在需要时轻松地再次获取 Domino 对象。
但是,切勿在 class 字段中存储会话、数据库、视图和文档等 Domino 对象。
(除非您在每个新请求中实例化 class 并使用它来实例化字段 - 但是当您使用 "static" 时绝对不是这种情况。)