Как я могу предоставить комплексные параметры времени выполнения для Tomcat? - PullRequest
1 голос
/ 18 февраля 2012

Я пишу веб-приложение JSF 2.1, которое размещается на Tomcat 6.

Во время выполнения я хотел бы получить набор сложных параметров, связанных с внешними службами.

Во время разработки я не знаю, какими будут эти параметры или как они могут быть.

Параметры будут установлены нашим оперативным персоналом и поэтому должны быть определены вне файла .war..

Я думал, что context.xml поможет (т. Е. TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml), но он может принимать только скалярные параметры, и, похоже, я никак не могу перебрать их.

Вот пример того, к чему я хотел бы получить доступ во время выполнения.

<services>
    <service id="bbc" name="BBC Weather" url="http://www.bbc.co.uk/weather/" />

    <service id="underground" name="Weather Underground" url="http://www.wunderground.com/weather/api/">
        <login username="test" password="test" />
    </service>

    <service id="network" name="The Weather Network" url="http://www.theweathernetwork.com/">
        <method type="post" />
    </service>
</services>

Есть ли надежный способ, которым я могу программно получить доступ к TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml? я знаю, как получить путь к TOMCAT_HOME , но наши сотрудники могут изменить имя хоста или движка Tomcat.

В качестве обходного пути я всегда могу записать один параметр в контекст.xml следующим образом.

<Parameter name="config.file" value="C:/Program Files/Apache Software Foundation/Tomcat 6.0/conf/Catalina/localhost/MyConfigFile.xml" />

Но это также дополнительная ошибка, дополнительный шаг в инструкциях по установке, необходимо сохранить и т. д.

Я уверен, что долженбыть простым способом сделать это, чего мне не хватает?

Заранее спасибо, Адам.

1 Ответ

2 голосов
/ 18 февраля 2012

Создайте свой собственный XML-файл и поместите его в один из существующих путей, охватываемых стандартным путем выполнения Tomcat по умолчанию, например Tomcat/lib, или добавьте его путь к пути выполнения, указав его в свойстве shared.loader свойства Tomcat /conf/catalina.properties .

Когда он находится в пути к классам, вы можете просто получить его через загрузчик классов.

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream("services.xml");
// ...
...