我在JSF上有一个应用程序,我上传了一个文件。非常基本的。问题是,当我到达我的应用程序的最后一页时,有没有办法启动(或继续执行)另一个java程序?那就是:
UploadFile.xhtml - > receiveFile.java - > Thanks.xhtml(用户将关闭此浏览器) - >另一个程序对最近上传的文件进行一些处理(即使用户关闭了PC)
我想过使用一个守护程序来检查新文件是否到达,但我想知道即使用户关闭浏览器也有办法继续执行。
感谢。
答案 0 :(得分:2)
当然,执行此操作的最佳方法是让a scheduler每隔x个时间间隔查找某些文件,并在线程中对其执行某些操作。
建议,确保在上下文卸载时关闭调度程序。以下是有关如何使用SchedulerService的示例。
您可能想要在context listener中执行某些操作。
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable handler = new Runnable() {
public void run() {
// handle file
}
};
scheduler.scheduleAtFixedRate(handler, 10, 10, SECONDS);
答案 1 :(得分:0)
首先,在从客户端接收文件后,即使客户端关闭了浏览器,文件现在也在服务器上,您可以免费处理它(现在不依赖于客户端):-D
作为您的问题,您希望在关闭页面后立即启动某些内容。如何在JSF中使用带有bean范围@PreDestroy
的注释@PostContructor
或@ViewScoped
?
(在我看来,您可以在收到客户端上传的文件后立即执行此操作)
答案 2 :(得分:0)
实现这一目标的一种可靠方法是在文件上传完成后将某种形式的元数据保存在数据库中。
和Quartz这样的单独监听器定期读取元数据并进行后期处理。
相同的元数据可以包含该元数据的更多状态标志,以避免在文件处理期间发生冲突。
这又取决于你的要求的复杂程度。