【问题标题】:Invoking Java standalone program in servlet or any other J2EE technologies在 servlet 或任何其他 J2EE 技术中调用 Java 独立程序
【发布时间】:2013-06-30 17:08:48
【问题描述】:

这就是我需要的。我有一个 UI,用户可以在其中上传文件并根据输入(上传)的数据提取报告。由于要提取大量数据,一旦用户上传了数据,我希望从 servlet 控件中出来,这样用户就不必在同一页面中等待,并且将控件传递给 java通过使用户可以处理其他事情来实现独立程序。因此,一旦控件继续到 java 独立,它将调用后端 sps 并从中构建一个提取并将其放置在服务器上的文件路径中。

用户可以从 UI 中检查数据提取是否可供他们下载。

所以这里的问题是,实现相同目标的最佳做法或可能性是什么?请告诉我您宝贵的cmets。

谢谢!

【问题讨论】:

  • 我想说:普通的、旧的 AJAX :)
  • 谢谢伙计们.. -- Ajax 是一个不错的选择,但它不符合这个要求,因为我不希望控件回到我的 UI 中。一旦我上传了一个文件,就是这样。控制完全遍历到独立程序,然后将负责提取的所有处理和创建。 -- 正如亚当所说,我不想产生一个分离的线程..
  • 是否建议从我的 Java servlet 程序调用 unix 脚本,然后调用 Java 独立程序来处理我的需求?
  • 你是什么意思“我不希望控件回到我的 UI”?您说您希望用户能够同时做其他事情。
  • 是的,没错。我的意思是,如果我们在这篇文章中使用 Ajax,我们将不得不提供成功的处理程序和其他东西。我不想要.. 它非常简单,UI--> Java Servlet--> 触发独立程序--> 结束。在独立程序中,我将完整地处理我的所有代码...如果我错了,请纠正我,你需要我有一个 servlet 来完成我的所有处理并创建提取并通过 Ajax 调用调用它是是吗?

标签: java jakarta-ee servlets


【解决方案1】:

如果您在 Java EE 环境中运行,我建议让 servlet 将任务分派到 JMS 队列并使用 message driven bean 进行(异步)处理。

正如其他人所建议的那样,让上传 servlet 将用户重定向到某个启用 ajax 的页面来轮询后端以完成作业是相当简单的。

如果您不在 EE 环境中,您可以创建一个独立(线程池)应用程序以从队列中使用并提供信号,例如。通过数据库(我假设结果无论如何都会进入数据库)。 The Spring framework 提供了非常强大和广泛的工具来将它们绑定在一起。

但实际上,有several free/open source EE containers available,从轻量级到企业级,所以没有必要自己构建必要的东西。

干杯,

【讨论】:

  • 谢谢安德斯,使用 MDB 是否有其他方法?
  • 我已经扩充了答案。
【解决方案2】:

很简单。

  • 在您的 servlet 类中有一个线程。

  • 运行线程(线程将提取数据等)。

  • 在运行线程后将用户重定向到您具有自动刷新功能的页面或显示提取完成量的页面。(您提到您有办法找到它)

【讨论】:

  • 它会起作用,但是不建议在 JEE 中生成自己的线程
  • @AdamDyga:由谁,为什么?
【解决方案3】:

如果您不能使用消息驱动的 bean,您可以让您的 servlet 将数据上传到文件系统上的某个位置,并在 DB 表中记录一行来说明有要处理的工作。

然后您的独立程序会轮询作业、处理数据并在完成时更新数据库行(包括失败原因等)。

最后,您可以使用 ajax 请求从 UI 轮询作业的状态。

允许用户在执行其他操作时建立要处理的数据作业队列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多