Apache FOP как сервлет не обновляет изображения - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть Apache FOP 1.0, собранный как сервлет, работающий в Tomcat 5.5 в Linux CentOS 5.7-64bit.

Если я создаю документ с изображением, этот документ отображается нормально.Затем я обновляю изображение и делаю еще один рендеринг.Отрендеренный документ имеет прежнее изображение.Я проверил, что PDF-файл перестраивается с нуля, но по неизвестной причине он все еще показывает старое изображение.

Этого не произойдет, если я запускаю FOP как отдельную программу.Кеш Tomcat, кажется, отключен.

Как это вызвано и как я могу решить это?

1 Ответ

2 голосов
/ 05 декабря 2011

Решение: В документации Fop 1.0 есть следующее предложение:

FOP кэширует изображения между прогонами. Для каждого экземпляра FopFactory существует один кэш. URI используется в качестве ключа для идентификации изображений, что означает, что при повторном появлении определенного URI изображение берется из кэша. Если у вас есть сервлет, который генерирует разное изображение каждый раз, когда он вызывается с одним и тем же URI, вам нужно использовать постоянно изменяющийся фиктивный параметр в URI, чтобы избежать кэширования.

Кэш изображений значительно улучшен в переработанном коде. Поэтому сброс кеша изображений должен быть в прошлом. Если вы все еще испытываете ошибки OutOfMemory, сообщите нам об этом.

Если ничего не помогает, кэш изображений можно очистить следующим образом: fopFactory.getImageManager().getCache().clearCache();

Я добавил инструкцию в код сервлета, и проблема, похоже, исчезла.

...