我有一个想要从 J2EE Web 应用程序触发的 shell 脚本。
该脚本做了很多事情——处理、FTP 等——这是一个遗留问题。
运行需要很长时间。
我想知道最好的方法是什么。我希望用户能够单击链接、触发脚本并向用户显示一条消息,说明脚本已启动。我希望 HTTP 请求/响应周期是即时的,不管我的脚本需要很长时间才能运行。
我可以想到三个选项:
- 在处理用户点击的过程中产生一个新线程。但是,我认为这不符合 J2EE 规范。
- 在触发脚本之前将一些输出发送到 HTTP 响应流并提交。这给出了 HTTP 请求/响应周期已经完成的错觉,但实际上处理请求的线程仍然坐在那里等待 shell 脚本完成。所以我基本上为了自己的目的劫持了容器 HTTP 处理线程。
- 创建一个包装脚本,在后台启动我的主脚本。这将使请求/响应循环在容器中正常完成。
以上所有内容都将使用 servlet 和 Runtime.getRuntime().exec()。
这是在 Java 1.4.2 上使用 Oracle 的 OC4J 应用服务器在 Solaris 上运行的。
请问有没有人对哪个是最简单的解决方案有任何意见,为什么?
或者有人有更好的方法吗?我们有 Quartz 可用,但我们不想将 shell 脚本重新实现为 Java 进程。
谢谢。