Лучший способ развертывания на Glassfish V3 - PullRequest
17 голосов
/ 03 сентября 2010

Каков наилучший способ развертывания моего веб-проекта (или проекта ear) на удаленном сервере и glassfish?

Как использовать ant-deploy.xml и build-impl.xml, создаваемые netbeans для этой цели?

Используя папку автоматического развертывания и отдельно добавляя sun-resources.xml в GF или используя ant и ....

Не могли бы вы объяснить мне шаг за шагом?

Привет

Ответы [ 6 ]

23 голосов
/ 05 сентября 2010

Ну, вы можете вручную развернуть свое приложение через консоль администратора.

Или вы можете использовать команду asadmin. Удаленное развертывание в самом простом виде выглядит так:

asadmin deploy --user=<adminuser> --host=<hostname> <path to jar/war/ear>

И это может быть сценарий оболочки, или завернутый в Ant или Maven.

Или вы можете использовать более специализированные инструменты ( Ant Task , плагин maven glassfish , плагин maven asadmin , Cargo ).

Все зависит от вашего контекста, нет однозначного ответа и есть много возможностей. Если вы не знаете, что ищете, просто используйте сценарии сборки Ant, созданные NetBeans.

16 голосов
/ 23 октября 2012

1. Сначала короткий ответ

Используйте комбинацию:

  1. maven для управления всем процессом строительства и развертывания ( профили и фильтрация ресурсов будут для вас очень полезными функциями)
  2. shell скрипты, использующие команду asadmin (альтернатива одному из плагинов Glassfish maven
  3. jenkins для запуска сборок maven либо на периодической основе, либо в результате отправки нового кода в вашу систему управления версиями.
  4. Netbeans имеет отличную интеграцию как со Glassfish, так и с maven и является моей любимой Java EE IDE:

2. Теперь немного предыстории ...

Чтобы ответить на этот вопрос, полезно взять более широкую перспективу и рассмотреть весь жизненный цикл разработки / развертывания . Фактическое развертывание архива .war или .ear в Glassfish - это только один шаг цикла.

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

Я подробно остановлюсь на этих пунктах в следующих параграфах. В частности, я объясню, почему я считаю, что сегодня пользовательские сценарии оболочки, управляемые maven, лучше, чем плагины glassfish maven, доступные в сообществе.

3. Управление сборкой с maven

Для многих людей, занимающихся java разработкой, maven является хорошо известным инструментом. Для других, здесь очень краткое введение. Цель maven - автоматизировать создание программных артефактов . Это фреймворк (в том же смысле, что и объектно-ориентированный фреймворк), что означает:

  1. определяет стандартный способ сборки, упаковки и тестирования программного обеспечения
  2. он предоставляет вам точки расширения для прикрепления пользовательского поведения по этому стандартному пути

По сути, когда вы используете maven, вы описываете, какой программный артефакт вы создаете (это .jar, .war, приложение для Android и т. Д.). По умолчанию maven ожидает найти исходные файлы, тестовые файлы и ресурсы в определенных местах. По умолчанию maven знает, что сборка программного обеспечения требует прохождения разных этапов: компиляции, модульного тестирования, упаковки, развертывания, интеграционного тестирования, генерации документации и т. Д.

Еще одна вещь, которую maven делает для вас (и которая часто является первой причиной использования инструмента), - это управление зависимостями. Maven указывает способ идентификации библиотек (с именем и версией), которые доступны через репозитории (существуют как публичные, глобальные и частные репозитории). В maven вы указываете такие вещи, как «Я зависим от magiglib версии 1.2.2». Когда вы просите, чтобы maven выполнил сборку, она автоматически загрузит библиотеку, сохранит ее в локальном хранилище и будет использовать ее для сборки и упаковки. Нет необходимости иметь дело с ручной передачей файлов .jar, нет риска появления ошибок, потому что разные версии одной и той же библиотеки используются разными разработчиками или на разных этапах.

И последнее, но не менее важное: maven предлагает возможность настраивать структуру вашего программного обеспечения в зависимости от целевого компьютера развертывания. Подумайте о следующих случаях использования:

  • Во время разработки думайте, что у каждого разработчика может быть своя инсталляция (mysql может не прослушивать один и тот же порт TCP, glassfish может быть не установлен в одном каталоге, пароли могут отличаться и т. Д.).

  • Машина разработки, очевидно, отличается от среды непрерывной интеграции, которая сама по себе отличается от QA или производственной среды (опять же, просто подумайте о сети, файловой системе, учетных данных).

Maven поддерживает эти варианты использования с комбинацией переменных , профилей и фильтрации ресурсов :

  • A переменная , ну, в общем, переменная, как в любой среде программирования.Когда вы используете maven, вы пишете файл конфигурации XML (pom.xml) и можете использовать в нем переменные.Это делает вашу систему сборки настраиваемой и динамичной.Порт, на котором прослушивается mysql, или каталог, в котором установлен glassfish, можно определить как переменные.
  • A profile - это способ присвоения значений множеству переменных maven.Как правило, у каждого разработчика есть свой профиль, у каждой среды (от непрерывной интеграции до производственной) будет свой профиль и т. Д.
  • Фильтрация ресурсов позволяет ссылаться на переменные maven в исходных файлах,файлы ресурсов и файлы конфигурации.Например, в файле Java вы можете вставить следующую строку $ {myvar}.Если вы сконфигурируете maven для выполнения фильтрации ресурсов, он заменит $ {myvar} на значение переменной maven myvar (которая может быть определена в текущем профиле).

Maven является чрезвычайно мощныминструмент, и как таковой имеет кривую обучения.Если вы используете Netbeans, вы на самом деле можете создать управляемый Maven проект с помощью пары щелчков мыши и воспользоваться базовыми функциями (например, управление зависимостями).Для продвинутых тем доступна очень хорошая документация.Я не буду вдаваться в подробности здесь.

4.Плагин Glassfish ... или нет?

Как только вы поняли ценность maven и решили использовать его, следующий вопрос - как вы можете использовать его для фактического развертывания .war или.ear архив в Glassfish (локально или удаленно).Здесь у вас есть несколько вариантов, и за эти годы мы узнали немало вещей (мы уже несколько лет используем maven с glassfish).

Первое, что вы можете сделать, этоиспользуйте один из плагинов Glassfish Maven.Доступны разные плагины.У них совершенно разные возможности и разные уровни поддержки.Оказывается, что самый мощный плагин на самом деле больше не поддерживается и не работает с Glassfish 3 из коробки.Плагин был интересен тем, что он позволял не только развертывать архивы в Glassfish, но и создавать ресурсы (пулы jdbc, очереди jms и т. Д.).Это также позволило создавать домены Glassfish на лету (очень полезно для запуска интеграционных тестов и проверки того, что для этого был использован новый домен).В любом случае, новые плагины (которые описаны в документации по продукту) не настолько мощны и сфокусированы исключительно на задаче развертывания.

В системе сборки, которую мы создавали и развивали в течение многих лет, мы смоглидобиться большого контроля и гибкости, комбинируя плагин Glassfish Maven с профилями и фильтрацией ресурсов.Решение работает, оно надежное, но довольно сложное (наши pom.xml и settings.xml сильно выросли и стали тяжелыми).

Итак, если я настраивал новую систему сборкис нуля, я, вероятно, поступил бы немного иначе .Если вы посмотрите на код подключаемых модулей Glassfish Maven, вы увидите, что они в значительной степени являются обертками для инструмента командной строки asadmin , предоставляемого Glassfish (и это потому, что параметры и поведение asadmin изменились содна версия Glassfish другой, что плагины Maven были сломаны).

5.Путь вперед

Что бы я сделал:

  • написать набор сценариев оболочки для создания glassfish domains ,создать ресурсы (jdbc, jms и т. д.), внедрить .war и .ear.Скрипты будут использовать asadmin для взаимодействия со стеклянной рыбой (можно использовать asadmin и локально и удаленно );

  • встроить переменные maven в эти сценарии и использовать фильтрацию ресурсов для динамического создания версий сценариев, специфичных для среды ;

  • используйте плагин maven exec для запуска сценариев на разных этапах цикла сборки maven (интеграционный тест, запуск, пользовательские цели и т. Д.).

10 голосов
/ 23 ноября 2010

Вы можете использовать задачу ant для развертывания файла war на glassfish-V3;

Содержимое Build.xml;

<target name="deploy"
    description="deploys application to glassfish">
    <exec failonerror="true" executable="cmd">
     <arg value="/c" />
     <arg value="asadmin --user ${gfUser} --passwordfile ${gfPassFile} --host ${host} deploy build/${war}" />
    </exec>
</target>
5 голосов
/ 04 сентября 2011

Более независимый способ развертывания приложения:

<presetdef name="asadmin">
  <java jar="${glassfish.home}/modules/admin-cli.jar" fork="true" jvm="${java.home}/bin/java" >
    <arg line="--port ${glassfish.admin.port}" />
  </java>
</presetdef>
<target name="deploy">
  <asadmin failonerror="true">
    <arg value="deploy" />
    <arg value="--force=true" />
    <arg value="${ear.file}" />
  </asadmin>
</target>

вы можете использовать предустановку asadmin для любых задач asadmin ...

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

Я обнаружил, что несколько методов хорошо работают в зависимости от вашего сценария:

Развертывание, когда у вас есть доступ к файловой системе работающей Glassfish 3:

Glassfish обеспечивает автоматическое горячее развертывание ресурсов, размещенных в нужном месте «внутри» файлов работающей Glassfish. Расположение по умолчанию для Glassfish 3.1.2.2 - glassfish-3.1.2.2/glassfish/domains/domain1/autodeply. Ранее я обнаружил, что под Windows он иногда не обнаруживает, что файл был обновлен, поэтому сначала может потребоваться удаление и ожидание отмены развертывания перед повторным развертыванием.

Развертывание вручную на удаленном Glassfish 3

Страница администратора (порт 4848 по умолчанию) содержит раздел развертывания, позволяющий пользователям загружать и развертывать, отключать, включать и отменять развертывание приложений. Это то, что я нашел наиболее надежным для ручного обслуживания.

Также не требуется полный доступ к базовому серверу.

Автоматическое развертывание на удаленный Glassfish 3

Грузовой проект допускает автоматическое развертывание на специально сконфигурированном экземпляре Glasfish.

Следующая команда, выполненная с pom.xml, описывающей развертывание войны, (с 2012-10-17) загрузит и выполнит Glassfish с развернутым в нем текущим проектом.

mvn clean verify -Dcargo.maven.containerId=glassfish3x -Dcargo.maven.containerUrl=http://dlc.sun.com.edgesuite.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-web.zip  org.codehaus.cargo:cargo-maven2-plugin:run

(вместе с небольшим фрагментом в pom.xml, сообщающем грузу дополнительную информацию о местонахождении стеклянной рыбы)

Часть сборки разработки Maven, например, пристань: run

Поддержка Maven с Glassfish 3 была хорошей. Основное преимущество заключается в том, что вам не нужно загружать, распаковывать и запускать Glassfish вручную - maven может делать все это автоматически.

См. Инструкции http://embedded -glassfish.java.net / .

Я использовал это только кратко, но, похоже, это хорошая альтернатива IDE-ориентированным решениям.

0 голосов
/ 24 апреля 2013

Добавление очков к ответу от @Pascal Thivent, (Я надеюсь, что это будет полезно для других с подобным вопросом)

1) Для запуска, остановки, развертывания приложения с Netbeans достаточно щелкнуть мышью.

2) Помимо работы с Eclipse или Netbeans или вашей любимой IDE

2.1) В среде разработки Windows: начните с инструментов командной строки, таких как asadmin, во время разработки. 2.2) В среде разработчика Linux: используйте сценарии оболочки и автоматизируйте процесс развертывания.

2.3) Используйте автоматическое развертывание и удаленное развертывание Netbeans в среде разработчика. 2.4) использование сценариев или удаленного развертывания из командной строки основано на необходимости

3) Вы предлагаете наиболее подходящий подход, например, разработку сценарий, основанный на потребностях и интересах проекта, и другие соображения, как организационный процесс.

Без maven или ant просто добавление необходимых банок вручную - неплохая идея. После добавления jar разверните его из консоли администратора или просто используйте скрипт сборки.

Maven иногда дает сбой с jar-файлами JavaEE ... но у вас есть решения в SO. Я иду с Maven несколько раз на основе существующего примера проекта и организационного процесса. Я также использую ant, который поставляется по умолчанию в проекте NetBeans Java EE.

...