Java 在xAgent中访问FacesContext(在新线程中)

Java 在xAgent中访问FacesContext(在新线程中),java,jsf,xpages,facescontext,Java,Jsf,Xpages,Facescontext,我计划对所有5分钟xAgents使用单一入口点,这意味着一个XPage将启动所有5分钟java代理类,这些类应该每5分钟启动一次。我想在新的不同线程中启动java代码,以实现此类代理的真正并行启动 提到的java代理与其他NSF应用程序类具有很强的相互依赖性。其中许多依赖于FacesContext和/或其他XSP/JSF全局变量 Java代理代码示例: import javax.faces.context.FacesContext; import com.ibm.domino.xsp.modul

我计划对所有5分钟xAgents使用单一入口点,这意味着一个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


提前谢谢

在OpenNTF Domino API中使用XOT进行开发时,我遇到了类似的问题。最好的选择是传递构造函数中需要的任何对象。下面是关于XOT的相关博客文章,该系列的其他部分用1替换2,用3替换3

XOT在并行处理中工作得非常好,允许配置线程数,默认情况下为10


当我查看XPages中的线程文档时,我发现的博客文章提出了该文章中未涉及的潜在问题,但没有详细说明。我没有进一步调查。

在通过FacesServlet运行的HTTP请求线程之外,您到底需要从FacesContext中得到什么?只需在线程的构造过程中传递这些信息即可。@BalusC,谢谢你的建议,在这种特殊情况下,我需要访问IBM Domino XPages的特定环境变量,如ExtLibUtil.getCurrentSessionAsSigner等。我将对此进行调查……是的,已经找到此帖子:,将研究它如何在我的情况下提供帮助…经验法则-永远不要跨线程混合notes对象。使用HTTP XPages,您将获得致命的组合。@FrantisekKossuth谢谢,是的,我会记住这一点。。。但情况有点不同,尤其是当主线程将等待所有辅助线程结束时。你对我最初的帖子有什么想法吗?是否可以在新线程中获取SessionAsSigner?谢谢谢谢保罗,这也是我对这样做的考虑。在最后几天的工作中,我已经阅读了很多Xages文章中的xAgents/Thread,包括您关于XOT的所有系列文章。当我在XPages中查看关于线程的文档时,您能分享该文档的来源或名称吗?非常感谢。我认为是XPages Insights在大数据项目和视频中的作用啊哈,好吧,谢谢。。。我将回顾视频以刷新我的记忆。