アプリ内のオブジェクトに関する情報を検索/保存するために使用するキャッシュ Bean があります。各 Database.getView にはいくらかのコストがかかると想像するので、ビューのフェッチをできるだけ少なくしたいと思います。
「ビューがリサイクルされました」をトリガーする最も安価な方法は何ですか?
アプリ内のオブジェクトに関する情報を検索/保存するために使用するキャッシュ Bean があります。各 Database.getView にはいくらかのコストがかかると想像するので、ビューのフェッチをできるだけ少なくしたいと思います。
「ビューがリサイクルされました」をトリガーする最も安価な方法は何ですか?
さまざまな 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
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" )