Веблоджик – это сервер, придуманный в спешке ненатуралами. Вот уже неделю занимаюсь написанием скрипта, который должен создавать или апдейтить ресурсы на сервере. Задача, вроде бы, элементарная, но постоянно натыкаюсь на подводные камни.
У веблоджика есть два режима его администрирования: online, когда всё редактируется на работающем сервере, и offline, когда редактируется файл конфигурации путём выполнения почти такого-же скрипта как и для online.
Когда применяю offline режим при работающем сервере то всё работает и никакой ругани не происходит. Но сервер, естесственно, не понимает что его конфиг поменяли. Перезапускаю сервер – никаких изменений не вижу. Оказывается сервер перед тем как завершить свою работу перезаписывает свой конфигурационный файл. В документации ни слова и зачем так делать – неизвестно.
Создаю queues, которые держат свою информацию в FileStore. Затем пытаюсь их обновить. Бросает WLSTException. Обрамляю в try/except WLSTException (это Python) – не ловит. Нахожу древний пост в форуме Dev2Dev, где говорят о том, что это ошибка в WLST. Меняю на except Exception – ловит. Тьфу!
Поначалу пытаюсь удалить FileStore. Не удаляет, бросает идиотскую ошибку что, мол, не сумел создать элементарную операцию. Оказывается оно так реагирует когда какая-нибудь очередь проассоциирована с FileStore. Ок, пытаюсь сказать очереди что она ассоциирована с FileStore с именем “” (пустая строка). Под Windows работает на ура. Пытаюсь тот-же самый скрипт пускать на Solaris – ругается на то, что нет FileStore с таким именем. Резонно. Пытаюсь ассоциировать с None (аналог null в java) – бросает NullPointerException. Блин! Ладно, щас, думаю присоединю эту очередь к стандартному FileStore временно. Теперь ругается на то, что параметер PersistentStore уже установлен и что последняя попытка привела к дуплицированию и была отменена. В документации – тишина. Пришлось лезть руками в config.xml и вырезать все очереди и файловые хранилища грязными руками.
Отдельная песня о том, что в offline режиме не представляется возможным определить – создан объект или нет. Функция find() ищет только в online режиме. В offline ничего подобного нет. Поэтому приходится пытаться создать объект и по результатам возникшего или не возникшего Exception понимать что делать дальше.
Ещё “радует”, что некоторые параметры надо создавать путём создания проперти бэгов, а некоторые уже созданы. Разобраться по какому принципу такое разнообразие практикуется не представляется возможным. “Это надо запомнить”
Но, с другой стороны, приобретаю бесценный опыт программирования на питоне! :о)