barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

четверг, 27 сентября 2012 г.

Уменьшение размера war-файлов моков веб-сервисов soapUI

У war-файлов с моками веб-сервисов, которые генерирует soapUI, есть одна существенная проблема - они очень большие (около 68Мб). Особенно эта проблема ощущается, когда нужно развернуть много моков сразу, а канал до сервера очень узкий. 
99% размера мока занимают библиотеки, которые у всех моков одинаковые. Поэтому первая идея, которая возникла - положить все эти библиотеки в /lib томката, на котором производится развертывание. Тогда в war-никах перед их деплоем можно удалять все jar-файлы из WEB-INF/lib (не руками конечно, написать для этого ant-билдфайл не проблема, тем более, что он позволит сразу и автоматизировать развертывание, чтобы не делать это через веб-интерфейс Tomcat Manager`а).
Но тут возникла следующая курьезная ситуация: мок, развернутый последним, каким-то чудесным образом заменял конфигурацию всех ранее развернутых моков на свою, и в результате все мок-сервисы на томкате начинали работать как один - выдавать одинаковые wsdl`ки и т.п. Конечно, такому поведению можно найти логичное объяснение, но лучше от этого не становится =)
Поэтому пришлось поступить хитрее. Во-первых, я переместил все soapui-шные библиотеки из /lib томката   в другое место (не суть важно, в какое). Во-вторых, процесс деплоя стал выглядеть так: 
  1. Мок деплоится без библиотек
  2. Только что развернутое веб-приложение останавливается
  3. В его WEB-INF/lib делаются симлинки на все необходимые библиотеки (чтобы не копировать и не занимать тем самым лишнее место на диске сервера)
  4. Приложение стартует
Для автоматизации такого процесса одним только ant-билдфайлом на стороне клиента (машины, с которой производится развертывание) не обойтись (если только поднять ssh / ftp на сервере, что мне показалось не лучшей идеей), пришлось на сервере разместить небольшой сервлет, выполняющий создание симлинков и вызываемый из клиентского билдфайла. Всё, задача решена, моки размером в несколько десятков килобайт деплоятся влет.

Комментариев нет:

Отправить комментарий