1

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

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

谢谢!

4

2 回答 2

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(); 
        } 
    } 
    
于 2012-04-30T17:07:38.963 回答
1

我从未尝试过,但您可能会查看以“删除”开头的方法的DownloadService方法摘要。

于 2012-04-30T17:17:17.733 回答