Справочная информация:
У меня есть требование, чтобы сообщения, отображаемые пользователю, различались в зависимости от языка и подразделения компании.Таким образом, я не могу использовать готовые комплекты ресурсов, поэтому я пишу свою собственную версию комплектов ресурсов, используя файлы PropertiesConfiguration.
Кроме того, у меня есть требование, что сообщения должны изменяться динамически впроизводство без перезапусков.
Я загружаю три разных итерации файлов свойств:
-basename_division.properties
-basename_2CharLanguageCode.properties
-basename.properties
Эти файлы существуют в пути к классам.Этот код входит в библиотеку тегов, которая будет использоваться несколькими портлетами в портале.
Я создаю возможные файлы .properties, а затем пытаюсь загрузить каждый из них с помощью следующего:
PropertiesConfiguration configurationProperties;
try {
configurationProperties = new PropertiesConfiguration(propertyFileName);
configurationProperties.setReloadingStrategy(new FileChangedReloadingStrategy());
} catch (ConfigurationException e) {
/* This is ok -- it just means that the specific configuration file doesn't
exist right now, which will often be true. */
return(null);
}
Если он успешно обнаружил файл, он сохраняет созданную PropertiesConfiguration в хэш-карту для повторного использования, а затем пытается найти ключ.(В отличие от обычных пакетов ресурсов, если он не находит ключ, он затем пытается найти более общий файл, чтобы посмотреть, существует ли ключ в этом файле - так что только специфические для переопределения исключения должны быть помещены в специфичное для языка / подразделения свойствофайлы.)
Проблема:
Если файл не существовал при первой проверке, он вызывает ожидаемое исключение.Тем не менее, если позднее файл затем будет добавлен в путь к классам, а затем этот код будет перезапущен, исключение все равно будет сгенерировано.Перезапуск портала, очевидно, устраняет проблему, но для меня это бесполезно - мне нужно иметь возможность разрешить им сбрасывать новые сообщения для переопределения language / companyDivision без перезапуска.И я не очень заинтересован в создании пустых файлов для всех возможных подразделений, так как делений довольно много.
Я предполагаю, что это проблема classLoader, поскольку она определяет, что файл не существуетв пути к классам в первый раз, и кешируются в результате при попытке перезагрузить тот же файл.Я не заинтересован в том, чтобы делать что-то слишком причудливое с classLoader.(Я был бы единственным, кто смог бы понять / поддерживать этот код.) Конкретной средой является WebSphere Portal.
Есть какие-то способы обойти это или я застрял?