我们开发了一个Java RMI应用程序,其中包含一个集中式服务器和一个客户端,该客户端捆绑在一个jar包中,并使用Java WebStart下载到主机。由于客户端应用程序在主机上的缓存,可能会出现与ITAR相关的复杂情况。我们希望允许用户执行客户端应用程序(jar),然后将其从他们的机器中删除,这样如果用户将他们的笔记本电脑带到国际商务旅行中,就不会出现遗留物。
有没有办法告诉Java WebStart,“不要缓存此文件。”?我知道这可以在每台客户机上完成,但我们的组织负责ITAR安全,而不是用户,因此我们需要在系统中构建一些东西,以确保不会在用户的计算机上留下任何文件。
谢谢!
答案 0 :(得分:3)
Java Web Start将始终从缓存启动应用程序,如果 可能,它将同时执行背景检查 服务器进行更新。如果有可用更新,则会通知 用户,并在下次启动更新版本。这种方法 在没有更新的常见情况下确保快速启动时间, 并确保可以离线启动应用程序。
对于1.0版本,可以通过添加来覆盖此行为 在客户端的javaws.cfg文件中输出javaws.cfg.forceUpdate = true。这个 将强制Java Web Start第一次检查更新。 不幸的是,设置此标志将导致脱机模式不会 工作正常。
在Java Web Start的未来版本中,我们希望改变它 更新检查的行为立即启动更新版本 应用程序,如果有可用的更新,仍然保留 离线发布
尝试javaws.cfg.forceUpdate = false
您可以尝试删除客户端计算机上的缓存文件夹。查看https://stackoverflow.com/a/1517367/643500
您还可以修改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以“删除”开头的方法。