【问题标题】:Access FacesContext in xAgent (in new Thread)在 xAgent 中访问 FacesContext(在新线程中)
【发布时间】:2015-06-23 10:28:58
【问题描述】:

我计划对所有 5 分钟的 xAgent 使用单个入口点,这意味着一个 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:测试 2.1”和“Agent1:测试”行中不为空2.2")?

提前致谢!

【问题讨论】:

  • 在运行通过FacesServlet 的HTTP 请求线程之外的FacesContext 究竟需要什么?只需在线程构建期间传递 那个 信息。
  • @BalusC,感谢您的建议,在这种特殊情况下,我需要访问 IBM Domino XPages 的特定环境变量,例如 ExtLibUtil.getCurrentSessionAsSigner() 等。我会调查这也是.. .
  • ...是的,已经找到这篇文章:FacesContext and “Servlet” Context,将调查它对我的情况有何帮助...
  • 经验法则 - 切勿跨线程混合笔记对象。使用 HTTP (XPages),您可以获得致命的组合。
  • @FrantisekKossuth 谢谢,是的,我牢记这一点......但这有点不同,特别是因为主线程将等待所有辅助线程结束。我最初的帖子有什么想法吗?是否可以在新线程中获取 SessionAsSigner?谢谢!

标签: java jsf xpages facescontext


【解决方案1】:

我在 OpenNTF Domino API 中使用 XOTS 进行开发时遇到了类似的问题。最好的选择是传递构造函数中需要的任何对象。这是 XOTS http://www.intec.co.uk/xots-background-and-multithreaded-tasks-the-openntf-domino-api-way-part-two/ 上的相关博文(将“二”替换为“一”,“三”用于该系列的其他部分)。

XOTS 非常适合并行处理,允许配置线程数,默认为 10。

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

【讨论】:

  • 谢谢保罗,这也是我考虑走的路。最近几天在这个主题上工作,我已经在 XPages 帖子中阅读了很多 xAgents / Thread,包括你所有关于 XOTS 的系列帖子。 )关于“当我查看 XPages 中的线程文档时”,您能否分享该文档的来源或名称?谢谢!
  • 我认为是 XPages Insights in Big Data 项目和视频openntf.org/internal/home.nsf/…
  • 啊哈,好的,谢谢! ...将查看视频以在我的记忆中刷新它。
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2014-03-20
  • 2017-09-24
  • 2016-05-09
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多