我开发了一个应用程序,其中文件存储在文件服务器(自定义)上。有两个 Web 服务相互通信。“WebServiceA”和“WebServiceB”。在两台不同的机器上。
WebServiceB 在 WebServiceA 的调用上存储/从 fileServer 上/获取文件。
当客户端想要下载文件时,他调用WebServiceA 的方法。WebServiceA 调用 WebServiceB 的下载方法。我启用了 MTOM 和 StreamingAttachment,因为我的文件非常大,有些是 4KB,有些高达 2GB。我在 WebServiceB 上的 WebMethods 步骤是从 FileServer (在不同的机器上)获取本地机器上的文件。通过将文件作为参数传递,从 FileDataSource 创建 DataHandler。将 DataHandler 对象返回给 WebServiceA 的方法。
问题是,经过一些操作,WebServiceB 的本地计算机存储了大量在下载操作期间创建的文件。
我试过1)删除WebServiceB中finally块中的文件,这导致WebServiceA上的文件为空
2)创建一个临时文件。temp = File.createTempFile("temp", ".txt"); temp.deleteOnExit(); 但这不会删除,因为我的 webserviceB 永远不会关闭。
3)我无法在 WebServiceA 到 WebServiceB 之间实现“确认”或“按时间间隔删除”,因为我的经理拒绝了该解决方案。
java中是否存在任何真正的解决方案,它告诉我文件目前没有被任何人使用。
我所有的机器都在 freebsd 8.2、java6、glassfish 3.1 和 jaxws 2.2 上运行。