как вывести значения context-param в web.xml - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь перенести какое-то устаревшее веб-приложение (на основе struts2) с Jboss на сервер Open-Liberty, и мне интересно, есть ли способ экстернализировать значения context-params (или фильтр init-params) ) из web.xml, как это возможно с помощью синтаксиса $ {} в server.xml или с помощью функции mpConfig микропрофиля eclipse. В исходном проекте значения параметров вводились в web.xml во время сборки с использованием подстановки подстановки, но, согласно 12-факторной третьей рекомендации, я бы предпочел устанавливать эти значения вне программного обеспечения, например, в переменных среды. В моем конкретном случае мне нужно настроить фильтр сервлета и пользовательскую библиотеку тегов со значениями параметров, зависящими от среды.

Я уже пытался использовать синтаксис $ {} в web.xml, но не повезло:

...
  <context-param>
    <param-name>remincl.resource.provider</param-name>
    <param-value>${remincl.resource.provider}</param-value>
  </context-param>
...

значение контекста-параметра во время выполнения: «$ {remcl.resource.provider}» вместо фактического значения, которое хранится в переменной среды.

Я думаю, что спецификации JEE не допускают такого поведения, но я хотел бы знать, предлагает ли open-liberty некоторую дополнительную функцию для решения этой проблемы. В противном случае я должен продолжать вводить значения во время сборки (или менять стратегию конфигурации как фильтра, так и библиотеки тегов).

1 Ответ

1 голос
/ 10 мая 2019

Стандартный способ JavaEE для этого будет использовать javax.servlet.ServletContextListener.

Например:

@WebListener
public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Get the context value from wherever is most convenient:
        // System.getProperty(), System.getenv(), MP Config API, etc
        String value = System.getProperty("remincl.resource.provider");
        event.getServletContext().setInitParameter("remincl.resource.provider", value);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {}

}
...