我们正在将我们的应用程序从 JBoss 4 升级到 JBoss 6。
我们的应用程序的几个部分以一种不寻常的方式交付给客户端:在我们的应用程序内部查找 jars 并从 servlet 发送给客户端,客户端提取它们以运行某些支持功能。
在 JBoss 4 中,我们将使用类加载器查找这些 jar,并找到一个 jar:// URL,该 URL 将用于读取 jar 并将其内容发送到客户端。
在 JBoss 6 中,当我们执行查找时,我们会得到一个 vfs:/ URL。我知道这是来自 org.jboss.vfs 包。不幸的是,当我在这个 URL 上调用 openStream() 并从流中读取时,我立即得到一个 EOF(read() 返回 -1)。
是什么赋予了?为什么我无法读取此 URL 引用的资源?
我尝试访问底层 VFS 包以通过 JBoss VFS API 打开文件,但大多数 API 似乎是私有的,我找不到从 vfs:/ URL 转换为 VFS 的例程VirtualFile 对象,所以我无处可去。
我可以尝试在 JBoss 中找到磁盘上的文件,但这种方法在升级时听起来很容易失败。
我们的旧方法是使用 Java Web Start 将 jar 分发到客户端,然后在 Java Web Start 的缓存中查找它们以提取它们。但是由于缓存的布局发生了变化,这在 Java 的每一次小升级中都被打破了。