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