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