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