执行后从缓存中删除Java Jar

时间:2012-04-30 16:54:07

标签: java caching jnlp itar

我们开发了一个Java RMI应用程序,其中包含一个集中式服务器和一个客户端,该客户端捆绑在一个jar包中,并使用Java WebStart下载到主机。由于客户端应用程序在主机上的缓存,可能会出现与ITAR相关的复杂情况。我们希望允许用户执行客户端应用程序(jar),然后将其从他们的机器中删除,这样如果用户将他们的笔记本电脑带到国际商务旅行中,就不会出现遗留物。

有没有办法告诉Java WebStart,“不要缓存此文件。”?我知道这可以在每台客户机上完成,但我们的组织负责ITAR安全,而不是用户,因此我们需要在系统中构建一些东西,以确保不会在用户的计算机上留下任何文件。

谢谢!

2 个答案:

答案 0 :(得分:3)

  

Java Web Start将始终从缓存启动应用程序,如果   可能,它将同时执行背景检查   服务器进行更新。如果有可用更新,则会通知   用户,并在下次启动更新版本。这种方法   在没有更新的常见情况下确保快速启动时间,   并确保可以离线启动应用程序。

     

对于1.0版本,可以通过添加来覆盖此行为   在客户端的javaws.cfg文件中输出javaws.cfg.forceUpdate = true。这个   将强制Java Web Start第一次检查更新。   不幸的是,设置此标志将导致脱机模式不会   工作正常。

     

在Java Web Start的未来版本中,我们希望改变它   更新检查的行为立即启动更新版本   应用程序,如果有可用的更新,仍然保留   离线发布

  1. 尝试javaws.cfg.forceUpdate = false

  2. 您可以尝试删除客户端计算机上的缓存文件夹。查看https://stackoverflow.com/a/1517367/643500

  3. 您还可以修改jnlp以自定义管理缓存。阅读http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html

    import javax.jnlp.*;
    
    DownloadService ds; 
    
    try { 
        ds = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService"); 
    } catch (UnavailableServiceException e) { 
        ds = null; 
    } 
    
    if (ds != null) { 
        try { 
            // determine if a particular resource is cached
            URL url = new URL("http://java.sun.com/products/javawebstart/lib/draw.jar"); 
            boolean cached = ds.isResourceCached(url, "1.0"); 
            // remove the resource from the cache 
            if (cached) { 
                ds.removeResource(url, "1.0"); 
            } 
            // reload the resource into the cache 
            DownloadServiceListener dsl = ds.getDefaultProgressWindow(); 
            ds.loadResource(url, "1.0", dsl); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    

答案 1 :(得分:1)

我从来没有尝试过,但您可以查看DownloadService method summary以“删除”开头的方法。