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" 时绝对不是这种情况。)