xpages - 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")
}
}
解决方案
Domino 对象不可序列化。
您应该只在类方法 中使用 Domino 对象。
将数据存储在类字段中,例如:
Domino 服务器的名称,
数据库路径,
视图的名称,
文档 ID 或文档 ID 列表,
文档项目的值,
这样,您可以在需要时轻松地再次获取 Domino 对象。
但是,切勿将会话、数据库、视图和文档等 Domino 对象存储在类字段中。
(除非您在每个新请求中实例化该类并使用它来实例化字段 - 但是当您使用“静态”时绝对不是这种情况。)
推荐阅读
- sql - 如何在 SQL 中使用交叉连接创建左连接?
- javascript - 检查 DOM 元素类型/属性以将值分配给 innerHTML 或 value
- angular - Angular Cli 6 如何在 proxy.conf.js 中使用命令参数
- sql - Spring JPA + Hibernate 获取无关数据
- c# - 控制台上的 C# 菜单和子菜单 - 菜单返回问题
- java - 如何在 java 10 或更高版本 java 11 中运行现有的 JAVA Web 启动应用程序
- sql - 在 sql 中获取任期为 2 到 5 年的员工
- python - Python:在自己的窗口中显示图像的每个对象
- javascript - 使用 Angular JS ui-router,有没有办法在实际路由检查开始之前为一组特定的 URL 提供路由?
- c# - 如何在 LINQ 查询中选择现有对象