如何防止同一应用程序的并行Java Web Start下载?

时间:2012-04-12 14:18:49

标签: java jnlp java-web-start

我们已将Java Swing应用程序部署到Intranet Web服务器,以便客户端计算机可以使用Java Web Start访问和下载它。所有应用程序文件(jar文件)的总大小为130 MB。

我们现在面临这个问题:当用户点击链接并启动下载程序时,会出现一个带进度条的对话框。在下载时,如果他/她再次单击链接,Java Web Start将启动另一个下载过程。此时,同一应用程序将有两个并行下载(两个进度对话框)。最终,当下载完成后,用户(或系统)缓存中将有大约260 MB的文件,证明实际上已经下载了两个(相同的)应用程序。

有没有办法阻止同时多次下载同一个应用程序?是否可以配置Java Web Start启动程序,以便它可以检测何时已经下载了正在进行的同一个应用程序?

只是澄清一下:我们的客户端计算机实际上不是传统客户端 - 它们是为数百个终端用户提供服务的Citrix服务器。因此,很容易发生同时下载同一个应用程序的情况。

1 个答案:

答案 0 :(得分:0)

由于没有人回答,我会这样做,所以也许有一天它会对遇到同样问题的人有所帮助。基于我所拥有的信息和测试,我发现没有办法指示Java Web Start检测当前已经下载的同一应用程序(由同一台机器上的同一用户制作)的请求。

显然,Java Web Start将启动另一个下载过程,因此两个相同的应用程序内容将有两个相同的下载 - 因此不必要地消耗网络,Web服务器和磁盘资源。这在Citrix XenApp等虚拟应用交付系统中是一个相当大的问题。

我想到的一个解决方案是创建自定义java启动器应用程序,该应用程序将下载请求与锁定文件同步。类似的东西:

  1. 等待循环(向用户显示某个进度指示器),直到创建锁定文件(获取锁定)。
  2. 从服务器下载更新的应用资源(如果有):javaws -import -silent http://someserver/jnlp-app.jnlp
  3. 开始申请:javaws http://someserver/jnlp-app.jnlp
  4. 删除锁定文件(释放锁定)