Получить файлы свойств из нескольких контекстов сервлета - PullRequest
1 голос
/ 09 декабря 2011

Я работаю над веб-приложением, которое распространяется по нескольким контекстам, работающим внутри одного экземпляра tomcat. Контексты помечены crossContext="true", чтобы мы могли разделить часть jsp между различными контекстами. Существует также набор общих классов, которые являются частью common.loader для tomcat. Мы должны уйти в проект, чтобы изменить эту структуру, поэтому, пожалуйста, будьте внимательны к этой структуре, отвечая на вопрос.

Я бы хотел получить все ресурсы, скажем, com.something.messages, которые присутствуют во всех различных контекстах. Это вообще возможно? Должен ли я записывать загрузчик классов для каждого созданного контекста и использовать его для загрузки ресурсов? Что вы рекомендуете?

1 Ответ

1 голос
/ 09 декабря 2011

Если вы уже используете Servlet 3.0, вы можете использовать ServletContext#getClassLoader() для получения собственного загрузчика классов контекста сервлета:

ServletContext otherContext = servletContext.getContext("/other");
ClassLoader otherClassLoader = otherContext.getClassLoader();
// ...

(если выбрасываетсяисключение безопасности, измените файл политики соответствующим образом)

Затем вы можете передать этот загрузчик классов, например, ResourceBundle#getBundle():

ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, otherClassLoader);
// ...

Если это невозможно по различным причинам(например, пока не используете Servlet 3.0 или не хотите возиться с файлами политики (очень разумно ...) и т. д.), тогда лучше всего предоставить каждому веб-приложению свой собственный ServletContextListener, который загружаетнужный пакет и сохраняет его как атрибут ServletContext во время метода contextInitialized().Таким образом, вы можете просто получить его как атрибут обычным способом.

...