3

アプリ内のオブジェクトに関する情報を検索/保存するために使用するキャッシュ Bean があります。各 Database.getView にはいくらかのコストがかかると想像するので、ビューのフェッチをできるだけ少なくしたいと思います。

「ビューがリサイクルされました」をトリガーする最も安価な方法は何ですか?

4

2 に答える 2

3

さまざまな Domino オブジェクトをテストするために設計されたテスター クラスはどうでしょうか。

null をテストするだけでなく、オブジェクトがリサイクルされた場合に例外をスローする操作を実行できます。次のコードのようなものは機能しますか、それとも単純すぎますか?

package com.azlighthouse.sandbox;

import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;

public class NPHchecker {

    public static boolean isRecycled(Document source, boolean printStackTrace) {
        try {
            return (source.getUniversalID().length() > 0);
        } catch (NotesException e) {
            if (printStackTrace)
                e.printStackTrace();
            return true;
        }
    } // isRecycled(Document, boolean)

    public static boolean isRecycled(Database source, boolean printStackTrace) {
        try {
            return (source.getReplicaID().length() > 0);
        } catch (NotesException e) {
            if (printStackTrace)
                e.printStackTrace();
            return true;
        }
    } // isRecycled(Database, boolean)


}  // NPHchecker
于 2012-10-05T10:17:26.860 に答える
2

Sven Hasselbach からインスピレーションを得て、この方法を作成しました。

/*
Classes that need to be imported:
import java.lang.reflect.Method;
import lotus.domino.Base;
import lotus.domino.local.NotesBase;
*/

public static boolean isRecycled( Base object ) {
    boolean isRecycled = true;
    if( ! ( object instanceof NotesBase ) ) { 
        // No reason to test non-NotesBase objects -> isRecycled = true
        return isRecycled;
    }

    try {
        NotesBase notesObject = (NotesBase) object;
        Method isDead = notesObject.getClass().getSuperclass().getDeclaredMethod( "isDead" );
        isDead.setAccessible( true );       

        isRecycled = (Boolean) isDead.invoke( notesObject );
    } catch ( Throwable exception ) {
        // Exception handling
    }

    return isRecycled;
}

更新:このメソッドを使用するには、java.policy を変更する必要があるようです。具体的には次の行: notesObject.getClass().getSuperclass().getDeclaredMethod( "isDead" )

于 2012-10-11T10:23:17.190 に答える