すべての 5 分間の xAgent に対して単一のエントリ ポイントを使用することを計画しています。つまり、1 つの XPage が 5 分間のすべての「Java エージェント」 (5 分ごとに起動する必要があるクラス) を起動します。そのようなエージェントを真に並行して起動するために、新しい異なるスレッドでそのJavaコードを起動したいと思います。
前述の「Java エージェント」は、他の NSF アプリケーション クラスと強い相互依存性を持っています。それらの多くは、FacesContext やその他の XSP / JSF グローバル変数に依存しています。
「Java エージェント」のコード例:
import javax.faces.context.FacesContext;
import com.ibm.domino.xsp.module.nsf.NSFComponentModule;
import com.ibm.domino.xsp.module.nsf.NotesContext;
import com.ibm.xsp.extlib.util.ExtLibUtil;
public class Agent1 implements Runnable {
private NSFComponentModule module;
public Agent1() {
this.module = NotesContext.getCurrent().getModule();
System.out.println("Agent1: test 1.1: " + (ExtLibUtil.getCurrentSessionAsSigner() == null)); // FALSE here
System.out.println("Agent1: test 1.2: " + (FacesContext.getCurrentInstance() == null)); // FALSE here
}
public void run() {
NotesContext context = new NotesContext(this.module);
NotesContext.initThread(context);
System.out.println("Agent1: test 2.2: " + (ExtLibUtil.getCurrentSessionAsSigner() == null)); // TRUE here
System.out.println("Agent1: test 2.2: " + (FacesContext.getCurrentInstance() == null)); // TRUE here
// Threaded xAgent job here...
NotesContext.termThread();
}
}
問題: FacesContext.getCurrentInstance()、ExtLibUtil.getCurrentSessionAsSigner() などのメソッドは、新しいスレッドで NULL を返します。
質問:新しいスレッド内で XSP / JSF エンジンを初期化して、FacesContext などにアクセスすることは可能ですか (「Agent1: test 2.1」および「Agent1: test 2.2」の行で null 以外を取得するため)?
前もって感謝します!