Проблема - удаленное горячее развертывание, многомодульный проект Maven
Я знаю, что здесь много информации... но могут быть и другие люди с такими проблемами, и я думаю, что было бы очень полезно обсудить это, или, по крайней мере, получить какой-то приличный материал.
Хорошо, позвольте мне начать с обзора нашей окружающей среды.
У нас есть многомодульный проект Maven с около 11 JAR. В зависимости от этих внутренних JAR-файлов 9 файлов WAR, из которых 8 помещаются в файл EAR. Оставшийся файл WAR развертывается отдельно как отдельное приложение. Когда создаются 8 WAR-файлов (которые находятся в EAR), они создаются как тощие WAR-файлы, поэтому результирующий EAR-файл имеет минимальный размер со всеми зависимостями в разделе APP-INF/lib. Все это работает без проблем. В настоящее время мы развертываем на удаленном сервере WebLogic 10.3, который имеет много памяти и процессора, поэтому нагрузка не на наши отдельные машины. Мы также публикуем ночные снимки, используя сервер непрерывной интеграции.
Артефакты, которые мы разворачиваем:
EAR-файл, содержащий 8 WAR-файлов, 11 внутренних JAR-файлов и сторонние библиотеки: ~70 МБ
Другой файл WAR: ~110 МБ
Некоторые из наших разработчиков программного обеспечения хотели бы работать дома, через VPN-подключение и иметь варианты инкрементного / горячего развертывания. В противном случае из-за того, что мы развертываем с помощью веб-логики /maven, они вынуждены создавать весь файл EAR или файл WAR размером 110 МБ и загружать их через VPN. Это не весело и не быстро. Я читал о JRebel, и мне было интересно, если кто-нибудь еще использует JRebel с многомодульным проектом maven для удаленного развертывания и как это сделать эффективно.
Из некоторых моих чтений рекомендуется "загрузить изменения" на сервер и иметь конфигурации rebel.xml, которые читают эти каталоги для данного конкретного развертывания, что... хорошо, подводит нас к данной проблеме. Как сказать Maven, чтобы дамп измененных ресурсов / вновь скомпилированных файлов классов в какой-то другой каталог, чтобы я мог загрузить их на сервер и в соответствующие папки (наш сервер содержит что-то вроде 10+ экземпляров WebLogic, работающих на разных портах, по одному экземпляру на разработчик). Или просто попросите разработчиков поделиться своей папкой рабочего пространства с сетью и настроить файлы rebel.xml (например, в JAR-файле), указав соответствующую папку //COMPUTERNAME/workspace/jarProjectName/target/classes. Проблема, с которой я столкнулся, заключается в том, что каждый раз, когда они запускают WebLogic, он собирает все файлы.class и конфигурации и JSP-файлы по сети, потому что файл rebel.xml выигрывает первым, и это будет ужасно по VPN. ПОСЛЕ ТОГО, КАК развертывание завершено, тогда горячее развертывание должно работать как обычно. Я просто не хочу ненужных накладных расходов на передачу всех классов по сети для первой загрузки, и не только, что разработчики иногда находятся в офисе, выключают свой компьютер и затем идут домой. Что происходит с JRebel/WebLogic?
Кажется, гораздо лучше увидеть только те файлы, которые изменились в различных проектах maven, и отправить их по FTP в нужное место на сервере, чтобы JRebel мог выполнить свою задачу полностью на стороне сервера. У кого-нибудь есть хороший способ сделать это? Или, может быть, у кого-то есть решение, которое вообще не связано с JRebel. Давайте поговорим.
3 ответа
Теперь можно использовать JRebel и для удаленного развертывания. Действительно прост в настройке, нет необходимости в особых сетевых настройках, открытии портов на удаленном компьютере и т. Д.
http://zeroturnaround.com/jrebel/remoting
Он в значительной степени опирается на плагин IDE, но в этом случае создается впечатление, что вы работаете на локальной машине.
Что вы должны сделать - это заставить каждого разработчика запускать свои собственные локальные экземпляры WebLogic.
WebLogic использует довольно много памяти, но развертывание через VPN будет проигрышным предложением. Единственный способ, которым это может работать, - использовать LiveRebel. Но опять же, вы все равно заплатите большой штраф за передачу по сети, особенно по медленному соединению.
Скорее всего, вам лучше запустить свое приложение в JDeveloper WLS и отбросить огромный общий экземпляр WebLogic.
Почему бы не использовать для этого протокол samba (http://en.wikipedia.org/wiki/Samba_(software))? Вам просто понадобится сетевой диск, который будет использоваться в качестве общего ресурса. Разработчик может установить путь к компилятору, чтобы он указывал на это местоположение, а в развернутом приложении пути rebel.xml должны указывать на одни и те же каталоги. Это бы сработало. Даже если разработчик выключит свою машину, Weblogic будет продолжать работать.