【问题标题】:What is the best approach for long running Java code in an XPage?在 XPage 中长时间运行 Java 代码的最佳方法是什么?
【发布时间】:2012-12-12 21:25:46
【问题描述】:

所以我有一些 Java 代码需要一些时间才能完成(大约 2 分钟)。我对此无能为力。

但我想知道如何最好地在 XPages UI 中处理这个问题,这样用户可能仍然需要等待,但在它运行时有更多的控制/交互(不仅仅是一个旋转的轮子)。

因此,据我所知,我可以执行以下操作。

  • 在 XPage 中调用的 Java 类包装在一个线程中。
  • 从线程中的 XPage 调用的 Java 代理。
  • 从 XPage 调用的 Java 代理,但正在等待更新文档。
  • Eclipse 插件(用于客户端)已激活。不确定它会如何与 XPage 对话(通过文档?)。

还有其他方法吗?

如果您在 XPage 中创建了线程,那会在服务器端引起任何问题吗?我是否必须避免在 Java 类中使用 Notes 对象?

【问题讨论】:

标签: xpages


【解决方案1】:

我建议使用 OSGi Tasklet 服务,也就是 DOTS。这种方法允许 Java 任务被调度或绑定到事件,就像代理一样,但执行效率明显高于代理。也许与您的需求最相关的是通过控制台触发 DOTS 任务的附加功能,这将允许您的 XPages 代码仅通过通过session 对象发出远程控制台命令来启动 Java 代码。

此外,查看XSP Starter Kit 中使用的技术以提供serverScope 变量。如果您的代码在 DOTS 任务(甚至是代理)中运行,它在不同的 Java 应用程序中运行,因此它不能直接与标准范围变量对话。 serverScope 方法理论上允许您存储可以从 XPage 和触发任务访问的对象。这有助于使用 Mark 的技术,正如 Per 上面提到的,在任务运行时向用户传达进度:您只需将进度信息存储在 serverScope 而不是 sessionScope

【讨论】:

  • 谢谢。你给了我很多阅读和思考。 serverScope 方法看起来对我想做的事情很有用。
  • 另一种方法是在 XPages 中使用线程:wissel.net/blog/d6plinks/SHWL-99U64Q。对于 XPiNC 应用程序,我求助于经典插件并扩展客户端复制器
【解决方案2】:

一种解决方案是让代理对在数据库中保存新文档做出反应,而不是在您的应用程序中踢代理并使用线程(因为线程可能非常危险并且很容易杀死您的 http 任务)

您可以研究的另一件事是为什么您要执行的代码需要 2 分钟才能完成。代码是干什么用的?在其他数据库中做事或连接到其他非笔记资源?

【讨论】:

  • 我赞同第二个建议。 Java 运行时在 XPages(相对于代理)中进行了高度优化,因此您可以在几毫秒内完成很多事情。如果这段代码需要 120,000 毫秒,我有信心保证它可以得到显着优化。话虽如此,您可能不太可能将其从 2 分钟优化到 2 秒。因此,一旦您确定代码与现实一样高效,请参阅下面的答案以了解代理的替代方案。
  • 工作流程为 2 分钟(并且已优化),但我通过线程将其分解,以便让它在后台运行而不会受到太多干扰。它正在调用旧的后端服务器,因此存在延迟。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 2011-01-05
  • 1970-01-01
  • 2013-02-24
  • 2014-12-28
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多