Получить параметр из статического контекста в axis2 - PullRequest
0 голосов
/ 21 марта 2012

Пытаясь переместить веб-приложение axis2 из glassfish3 в tomcat6, я не могу найти способ получить параметр конфигурации из статического контекста.

В glassfish3 системное свойство было определено в далеком месте и считано из приложения с помощью System.getProperty(String name).Интернет не только согласен с тем, что это не тот путь, которым следует пользоваться веб-приложением, но этот трюк просто невозможен для tomcat (tomcat docs) .

Чтение параметров из ServletContext также неосуществимо, так как приложение использует axis2, и я не могу найти способ получить доступ к какому-либо сервлету вуду из статического контекста, который инициализирует конфигурацию приложения.

services.xml (файл, содержащий описание службы для axis2) может содержать <parameter> узлов, так что это кажется хорошим местом для настройки расположения конфигурации, но я не могу найти способ прочитатьэти параметры из приложения.

Короче говоря: есть идеи, как получить значение, сконфигурированное вне кода приложения, доступного из статического контекста?


(ответ, указанный здесь как StackOverflow, не позволяет мне ответитьмой собственный вопрос ...)

После еще одного поиска в Интернете было найдено решение с использованием реализации org.apache.axis2.engine.ServiceLifeCycle, которая могла бы считывать параметр в startUp -методе как таковой:

Parameter param = service.getParameter("name");
if (param != null) {
    saveParamValue(param.getValue().toString());
} else {
    // log warning on falling back to System.getProperty()
}

Класс жизненного цикла присоединяется с помощью class="fully.qualified.ClassName" к узлу <service> файла services.xml, используемого axis2.

Это работает, теперь приложение просто падает на что-то другое (но это не имеет ничего общего с этой проблемой).

1 Ответ

1 голос
/ 21 марта 2012

Доступ к параметрам в services.xml можно получить, получив объект ServiceContext для службы и вызвав ServiceContext.getParameter().Если ваш класс реализации сервиса реализует интерфейс Lifecycle , то Axis2 будет вызывать Lifecycle.init() каждый раз, когда создает новый экземпляр класса сервиса.Аргументом Lifecycle.init() является ServiceContext службы.Ваша реализация init() может сохранить объект контекста или найти интересующие вас параметры.

...