2011-10-31 31 views
0

我有一个JSF上的应用程序上传文件。非常基本。问题是,当我到达应用程序的最后一页时,是否有办法启动(或继续执行)另一个java程序?那就是:在最终网页后运行一个java程序

UploadFile.xhtml - > receiveFile.java - > Thanks.xhtml(用户将关闭该浏览器) - >其他程序就最近上传的文件进行一些处理(即使用户shutsdown的PC)

我以为使用守护程序来检查一个新文件是否到达,但我想知道是否有办法继续执行,即使用户关闭浏览器。

谢谢。

+0

请添加关于您的服务器环境的详细信息,将有助于更好地给出解决方案。 – r0ast3d

+0

JSF 2.1,Tomahawk 1.1.11(上传文件)和Tomcat 7 – BRabbit27

回答

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); 
+0

好吧,我不知道有关java Scheduler类的感谢。但我的问题仍然存在。即使在用户关闭Web浏览器之后,我如何让调度程序进程继续运行。我的意思是我有上传文件的页面,上传完成后重定向到“谢谢我们将处理文件,然后通知您”。在这一点之后,即使用户关闭了浏览器,我也想保持运行Java程序。谢谢 – BRabbit27

+0

调度程序与浏览器无关。如果你创建一个新的线程,那么即使在浏览器关闭之后,线程也会执行。 –

+0

好的,谢谢,我现在就试试看,如果我有问题,请到这里。谢谢埃米尔Raminfar! – BRabbit27

0

首先,从客户端接收文件,即使在客户端已经关闭了自己的浏览器后,文件现在是在服务器上,你可以处理它免费(现在不依赖于客户端):-D

作为您的问题,您希望在页面关闭后立即启动。如何在JSF中使用注释@PreDestroy@PostContructor与bean scope @ViewScoped

+0

是的,确实如此。也许我解释自己是错的,但实际上它应该在客户端上传文件后立即处理文件。我尝试使用线程,但主线程在返回“最终”网页之前等待新线程完成... – BRabbit27

0

来实现,这将是一个可靠的方式(在我的脑海里,你可以接收来自客户端上传文件后,这样做的权利)是具有某种形式保存在数据库中的元数据后的文件上传完成。

而像Quartz这样的独立侦听器可以定期读取元数据并进行后期处理。

相同的元数据可以包含更多的元数据状态标志,以避免文件处理期间的冲突。

这又取决于您的需求的复杂程度。