Как перенести файл config.xml в Weblogic на несколько компьютеров? - PullRequest
4 голосов
/ 01 октября 2009

наша команда разработчиков разрабатывает приложение J2EE, которое работает на Weblogic 10.3. На каждой машине для разработки работает собственная копия сервера приложений Weblogic 10.3. Домен среды разработки Weblogic изначально создавался на одном компьютере, а затем копировался на все компьютеры с помощью инструмента конфигурации Weblogic (bea10 / wlserver_10.3 / common / bin / config.cmd).

Каждая машина разработки имеет свою собственную копию config.xml. Все парольные фразы (для источников данных JDBC и т. Д.) В этом файле зашифрованы, и шифрование, очевидно, использует разные начальные числа на каждой машине, поскольку один и тот же пароль имеет разные зашифрованные формы на разных машинах.

Проблема заключается в том, что время от времени файл config.xml необходимо обновлять (например, при добавлении нового EJB), и обновления необходимо применять на всех машинах. Как мы должны делать это? Если мы просто поместим файл в CVS и обновим другие машины оттуда, зашифрованные пароли на каждой машине будут перезаписаны. Это приводит к уродливым исключениям заполнения, когда сервер пытается расшифровать парольные фразы, изначально зашифрованные на другом компьютере.

Существует ли задача ant (я не смог ее найти) или аналогичный механизм, который позаботился бы о правильном объединении изменений в config.xml без перезаписи зашифрованных паролей? Или можно как-то указать парольные фразы в виде открытого текста и зашифровать их при первом запуске (я слабо помню, что это было возможно в предыдущих версиях, но не в 10.3).

Как команды разработчиков, работающие над Weblogic, справляются с этим?

BR

Marko

Ответы [ 4 ]

6 голосов
/ 03 октября 2009

[...] Каждая машина разработки имеет свою собственную копия файла config.xml. Все парольные фразы (те, что для JDBC источники данных и т. д.) в этом файле зашифровано ...

Да, WebLogic Server шифрует все пароли в виде простого текста, хранящиеся в файле (файлах) конфигурации домена. Это сделано для предотвращения доступа к конфиденциальной информации. Когда пароли вводятся с помощью консоли администрирования или инструментов сценариев, они автоматически шифруются перед их сохранением в файлах XML конфигурации.

... и шифрование по-видимому, использует другое семя на каждая машина с одним и тем же паролем имеет разные зашифрованные формы на разные машины.

Об утилите encrypt (из утилит Oracle WebLogic Server Java) в документации сказано:

weblogic.security.Encrypt шифрует строки открытого текста для использования с WebLogic Server. Утилита использует службу шифрования текущего каталога или службу шифрования для указанного корневого каталога домена WebLogic Server.

Примечание: Зашифрованная строка должна быть зашифрована службой шифрования в домене WebLogic Server, где она будет использоваться. В противном случае сервер не сможет расшифровать строку.

Это не упоминается в документации, но, AFAIK, Weblogic использует файл соли пароля домена (SerializedSystemIni.dat) для шифрования строки открытого текста.

[...] Если мы просто поместим файл в CVS и обновим оттуда другие машины, зашифрованные пароли на каждой машине будут перезаписаны.

Вы можете использовать пароли в виде открытого текста в файле config.xml, хранящемся в вашей VCS (если это не проблема). На самом деле, до WebLogic Server 9.0 пароли шифровались при последующем перезапуске. Начиная с WebLogic Server 9.0, использование паролей в текстовом виде в файлах конфигурации «полностью» поддерживается только для домена разработки, и Weblogic не будет повторно шифровать пароли. В обоих случаях это позволило бы людям без проблем проверить файл конфигурации.

Существует ли задача ant (я не смог ее найти) или аналогичный механизм, который позаботился бы о правильном объединении изменений в config.xml без перезаписи зашифрованных паролей? ...

Я не уверен, что это отвечает непосредственно на ваш вопрос, но Oracle WebLogic Server предоставляет Задачи Ant для большинства (если не всех) своих утилит Java. Возможно, вы найдете там что-нибудь полезное (см. Настройка домена сервера WebLogic с помощью Ant-задачи wlconfig )

Или можно как-то указать парольные фразы в виде открытого текста и зашифровать их при первом запуске (я слабо помню, что это было возможно в предыдущих версиях, но не в 10.3).

Как я писал выше, это было поведение по умолчанию до Weblogic Server 9.0. Я не знаю, можно ли заставить это поведение для более поздних версий. Конечно, вы всегда можете использовать для этого муравей и encrypt , но, если честно, если вы позволите людям один раз видеть пароли в виде открытого текста, я не вижу смысла шифровать их после фактов.

1 голос
/ 25 октября 2009

Мы сделали это, используя WLST. Мы используем некоторую простую декларативную «модель предметной области» в python, которая является довольно абстрактной (то есть она не указывает конфигурацию различных серверов в кластере, в наших средах все узлы должны быть идентичны). Эта модель довольно короткая (2-3 страницы для самых больших приложений, имеющих более 30 пулов соединений, куча JMS-материалов и некоторые зарубежные JMS-провайдеры). После этого у нас есть 2 сценария: первый создает пустой домен в целевой среде, второй применяет модель домена. Чтобы собрать изменения, которые разработчики делают в «основной» среде, у нас есть скрипт, который проходит через конфигурацию домена и выводит файл модели. Используя diff для этих файлов модели, мы можем увидеть, что было изменено.

Это похоже на тяжелый фреймворк, но оно действительно экономит много времени, когда нам приходится управлять средами разработки, тестирования, подготовки и производства для более 100 приложений.

Для небольших случаев достаточно просто скопировать файлы и использовать тот же SerializedSystemIni.dat. Просто убедитесь, что ваше доменное имя остается прежним, настройте адреса / порты. Если вы хотите использовать другой SerializedSystemInit.dat, это также довольно легко сделать, основываясь на этом коде (http://gustlik.wordpress.com/2008/08/06/decryption-of-configuration-passwords-in-weblogic/), довольно просто написать утилиту, которая будет декодировать пароль с оригинальным SerializedSystemIni.dat и кодировать с новым. Это должно сработать.

1 голос
/ 13 октября 2009

Лично я бы заглянул в WLST для массовых обновлений доменов. Это действительно просто, даже если у вас нет опыта работы с python или WLST

  1. включить запись для домена (веб-интерфейс администратора)
  2. вносить изменения в один домен (веб-интерфейс администратора)
  3. активировать изменения (веб-интерфейс администратора)
  4. вы должны получить скрипт Python в папке вашего домена по умолчанию
  5. для каждой среды
    1. подключиться к админ-серверу с помощью WLST
    2. примени свой сценарий
    3. перезапустить домен или управляемые серверы, если требуется

В настоящее время компания, в которой я работаю, делает нечто похожее на то, что вы описываете - взламываете файлы домена weblogic и затем развертываете те же файлы с небольшими изменениями во всех наших средах. За эти годы мы оказались в полном беспорядке. Это просто не путь.

1 голос
/ 01 октября 2009

Я бы использовал что-то вроде mercurial или git, и использовал бы функцию экспорта / импорта, чтобы изменения перемещались в diff, а не в полные файлы.

Краткие инструкции

Что ж, если вы застряли с CVS (извините, я до некоторой степени разделяю вашу боль), вы можете подумать о создании CVS-репо diffs. Например. когда создается новая версия файла конфигурации, новый файл передается в старый файл, и файл diff добавляется в репозиторий, извлечение других хостов из cvs и исправление файла конфигурации.

Это взлом, но должно работать.

...