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