Xpages JavaBean static Notes Object вызывает сохранение ошибок - PullRequest
0 голосов
/ 06 октября 2018

В этом 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 для Anonymous.

Кто-нибудь может объяснить мне, в чем здесь проблема со статическими объектами?

    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")
    }
}

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Объекты Domino не сериализуемые.

Вы должны использовать объекты Domino в только метод класса.

Хранить в полях класса данные, такие как:

  • Имя сервера Domino,

  • путь к базе данных,

  • имя представления,

  • идентификатор документа или список идентификаторов документов,

  • значения элемента документа,

Таким образом, вы можете легко получить объекты Domino снова, когда они вам нужны.
Но никогда не храните объекты Domino, такие как сеанс, база данных, представление и документ, в полях класса.
(Если вы не создаете экземпляр класса при каждом запросе новых и вместе с ним полей - но это, безусловно, не тот случай, когда вы используете «static».)

0 голосов
/ 06 октября 2018

Внутренние объекты, полученные через предоставленные сеансы, например, будут перерабатываться в конце каждого запроса.Вам следует переписать класс для повторного извлечения документа каждый запрос, либо каждый раз создавая новый, либо сохраняя UNID документа при его создании, а затем используя getDocumentByUNID.

...