我有一个JSF上的应用程序上传文件。非常基本。问题是,当我到达应用程序的最后一页时,是否有办法启动(或继续执行)另一个java程序?那就是:在最终网页后运行一个java程序
UploadFile.xhtml - > receiveFile.java - > Thanks.xhtml(用户将关闭该浏览器) - >其他程序就最近上传的文件进行一些处理(即使用户shutsdown的PC)
我以为使用守护程序来检查一个新文件是否到达,但我想知道是否有办法继续执行,即使用户关闭浏览器。
谢谢。
我有一个JSF上的应用程序上传文件。非常基本。问题是,当我到达应用程序的最后一页时,是否有办法启动(或继续执行)另一个java程序?那就是:在最终网页后运行一个java程序
UploadFile.xhtml - > receiveFile.java - > Thanks.xhtml(用户将关闭该浏览器) - >其他程序就最近上传的文件进行一些处理(即使用户shutsdown的PC)
我以为使用守护程序来检查一个新文件是否到达,但我想知道是否有办法继续执行,即使用户关闭浏览器。
谢谢。
当然,最好的办法是让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);
首先,从客户端接收文件,即使在客户端已经关闭了自己的浏览器后,文件现在是在服务器上,你可以处理它免费(现在不依赖于客户端):-D
作为您的问题,您希望在页面关闭后立即启动。如何在JSF中使用注释@PreDestroy
或@PostContructor
与bean scope @ViewScoped
?
是的,确实如此。也许我解释自己是错的,但实际上它应该在客户端上传文件后立即处理文件。我尝试使用线程,但主线程在返回“最终”网页之前等待新线程完成... – BRabbit27
来实现,这将是一个可靠的方式(在我的脑海里,你可以接收来自客户端上传文件后,这样做的权利)是具有某种形式保存在数据库中的元数据后的文件上传完成。
而像Quartz这样的独立侦听器可以定期读取元数据并进行后期处理。
相同的元数据可以包含更多的元数据状态标志,以避免文件处理期间的冲突。
这又取决于您的需求的复杂程度。
请添加关于您的服务器环境的详细信息,将有助于更好地给出解决方案。 – r0ast3d
JSF 2.1,Tomahawk 1.1.11(上传文件)和Tomcat 7 – BRabbit27