Я занимаюсь разработкой веб-приложения на Java, которое основывает свое поведение на больших файлах конфигурации XML, загружаемых из веб-службы. Поскольку эти файлы фактически не требуются до тех пор, пока к определенному разделу приложения не будет получен доступ, они загружаются лениво. Когда требуется один из этих файлов, в веб-службу отправляется запрос для получения соответствующего файла. Поскольку некоторые из файлов конфигурации, вероятно, будут использоваться гораздо чаще, чем другие, я бы хотел настроить какое-либо кэширование (возможно, со сроком действия 1 час), чтобы избежать запроса одного и того же файла снова и снова.
Файлы, возвращаемые веб-службой, одинаковы для всех пользователей во всех сеансах. Я не использую JSP, JSF или любые другие модные фреймворки, просто простые сервлеты.
Мой вопрос: что считается наилучшей практикой для реализации такого глобального статического кэша в веб-приложении Java? Подходит ли одноэлементный класс, или будут странные поведения из-за контейнеров J2EE? Должен ли я что-то выставить где-нибудь через JNDI? Что мне делать, чтобы мой кеш не был поврежден в кластерных средах (нормально, но не обязательно иметь один кеш на кластерный сервер)?
Учитывая приведенную выше информацию, будет ли правильной реализацией помещать объект, отвечающий за кэширование, в качестве атрибута ServletContext?
Примечание: я не хочу загружать их все при запуске и покончить с этим, потому что это
1). перегружать веб-сервис всякий раз, когда запускается мое приложение
2). Файлы могут измениться во время работы моего приложения, поэтому мне все равно придется их запрашивать
3). Мне по-прежнему нужен глобально доступный кэш, поэтому мой вопрос по-прежнему содержит
Обновление: использование кэширующего прокси (такого как squid) может быть хорошей идеей, но каждый запрос к веб-сервису будет отправлять довольно большой XML-запрос в данных поста, который может каждый раз отличаться. Только веб-приложение действительно знает, что два разных вызова веб-службы фактически эквивалентны.
Спасибо за вашу помощь