首页 > 解决方案 > Xpages JavaBean 静态注释对象导致错误保存

问题描述

在这个 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")
    }
}

标签: xpagesjavabeanslotus-domino

解决方案


Domino 对象不可序列化。

您应该只在类方法 中使用 Domino 对象。

将数据存储在类字段中,例如:

  • Domino 服务器的名称,

  • 数据库路径,

  • 视图的名称,

  • 文档 ID 或文档 ID 列表,

  • 文档项目的值,

这样,您可以在需要时轻松地再次获取 Domino 对象。
但是,切勿将会话、数据库、视图和文档等 Domino 对象存储在类字段中。
(除非您在每个新请求中实例化该类并使用它来实例化字段 - 但是当您使用“静态”时绝对不是这种情况。)


推荐阅读