我将Apache FOP 1.0构建为servlet,在Linux CentOS 5.7-64bit上的Tomcat 5.5中运行。
如果我使用图像构建文档,则此文档可以正常显示。然后我更新图像,并进行另一次渲染。渲染文档仍然是旧图像。我已经确认PDF是从头开始重建的,但由于未知原因,它仍会显示旧图像。
如果我将FOP作为独立程序运行,则不会发生这种情况。 Tomcat的缓存似乎被禁用了。
这是如何引起的?如何解决?
答案 0 :(得分:2)
解决方案: 在Fop 1.0 documentation中有以下句子:
FOP在运行之间缓存图像。每个FopFactory实例都有一个缓存。 URI用作标识图像的密钥,这意味着当再次出现特定URI时,图像将从缓存中获取。如果你有一个servlet,每次使用相同的URI调用它时都需要生成一个不同的图像,你需要在URI上使用不断变化的虚拟参数来避免缓存。
重新设计的代码中图像缓存已大大改进。因此,重置图像缓存应该已成为过去。如果您仍然遇到OutOfMemoryErrors,请通知我们。
如果所有其他方法都失败了,可以像这样清除图像缓存:
fopFactory.getImageManager().getCache().clearCache();
我已经将指令添加到servlet的代码中,问题似乎已经消失。