2013-02-27 3 views
4

У меня есть webapp в военном архиве, который развернут на облачном уровне. Одна из библиотек («somelib.jar»), используемая приложением, создается другим разработчиком.Как динамически обновлять (горячую замену) банки в веб-приложении?

Я хотел бы, чтобы он мог загрузить несколько различных версий somelib.jar и проверить поведение приложения. Мне удалось загрузить банку в каталог WEB-INF/lib развертывания. Мне также удалось распаковать банку на WEB-INF/classes. Тем не менее, мне не удалось получить новую версию банки для использования. Я пробовал различные хаки, такие как описанные в this question и this question без всякой удачи.

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

Есть ли какой-либо простой способ достичь того, что я хочу?

Примечание: Поскольку у меня нет контроля над Tomcat (где он выполняется), я не могу настроить Tomcat или внести какие-либо изменения на сервер. Я просто контролирую свой файл войны, , поэтому все должно быть сделано программно.

EDIT: причина, по которой я хочу, это сократить время тестирования. В настоящее время кто-то дает мне новую версию somelib.jar, я переупаковываю ее в свое приложение, загружаю в CF, отправляю ему уведомление, а затем тестирует поведение новой банки. Я бы предпочел, чтобы он загружал свою банку непосредственно в CF и проводил тестирование, когда у него была новая версия без ненужной промежуточной задержки.

+0

вы можете удалить совершенно новый файл войны, потому что каталог webapp обычно выполняет горячее развертывание, если эта конфигурация не отключена в tomcat. Это позволяет вам одновременно запускать одну версию, но она «горячее развертывание» без перезагрузки.Есть проблемы с этим, и никто не всерьез подумает об этом в производственной среде. – Kevin

+0

Не могу поверить, что нет простого решения. С появлением PaaS все больше и больше вероятность того, что клиентам не понравится беспокоить или контролировать конфигурацию сервера. – Jus12

+0

У вас проблемы с процессом, а не с технологической проблемой. Если вы хотите простое решение, дайте каждому члену команды тестовую среду и возможность создавать свою собственную развернутую WAR. – parsifal

ответ

2

В коте 7, вы можете версию файла WAR и новые версии будут постепенно загнуться.

http://www.tomcatexpert.com/blog/2011/05/31/parallel-deployment-tomcat-7

+0

Как я уже сказал, я запускаю приложение на cloudfoundry, и у меня нет контроля или каких-либо утверждений о конфигурации или версии Tomcat, которые они используют. – Jus12

+0

Как сказал Али, вы можете управлять версией и конфигурацией Tomcat. Наряду с его ссылкой, у этого есть хорошая информация: http: //blog.cloudfoundry.org/2012/06/18/deploying-tomcat-7-using-the-standalone-framework/ –

+0

Кроме того, это не помогает вы сейчас, но Cloud Foundry реализует buildpacks, чтобы заменить существующий метод создания приложений. Изменение существующего сборщика будет простым способом настроить, как приложения будут организованы и настроены. Подробнее см. Здесь: http://cloudfoundry.github.com/docs/roadmap.html и здесь: https://groups.google.com/a/cloudfoundry.org/forum/#!forum/vcap-dev –

2

Everytime, классы/банки, которые загружаются в первый раз привыкают после этого , даже если заменить фактическую .class или .jar файл в указанных каталогах

Вот так, что нормальный сервер Tomcat (Java EE) classloading работы. При первом развертывании ваши классы загружаются, и любые изменения будут проигнорированы (JSP управляются несколько иначе, но только в среде разработки).

Вы должны решить эту проблему, используя Equinox OSGi bridge servlet. Я не делал этого сам, но here's написал человеку, которого я уважаю.

+0

можно настроить различные загрузчики классов для среды разработки? –

Смежные вопросы