我有一个缓存 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" )