Статьи

Создание GlassFish из источника

Вступление

В этой статье мы рассмотрим сборку Glassfish 4.0.1 из исходного кода и настройку NetBeans 8.0 для ее последующего использования, изменения и отладки. Хотя GlassFish можно загрузить готовым к использованию, даже если он поставляется в комплекте с NetBeans, среди нас найдутся те, кому нужно (или просто нужно) создать его с нуля. Эта сборка проводилась с использованием 64-битного Linux Distro, JDK 1.7.0_55, Maven 3.2.1 и SVN 1.8.8.

Строительство GlassFish

  Если вы хотите ознакомиться с официальными инструкциями Oracle по сборке GlassFish (это был мой первый порт захода), перейдите по этой ссылке: https://wikis.oracle.com/display/GlassFish/FullBuildInstructions

  Несмотря на изначально сложное звучание, сборка GlassFish из исходного кода — довольно простая вещь; самое сложное, что от вас требуется, — это настроить некоторые параметры Maven! Давайте начнем с этого, так как это шаг, который вы не хотите ошибаться, иначе вы обнаружите, что ждете, пока Maven установит GlassFish, чтобы только потом сдаться через 20 минут!

Настройка Maven

  Создайте переменную среды MAVEN_OPTS и установите ее следующим образом:

     -Xmx1024M -XX: MaxPermSize = 512 м

  Это должно остановить Maven от исчерпания памяти; настройки по умолчанию не обеспечивают достаточно памяти для успешного завершения установки. Если вам повезло иметь избыток памяти, не стесняйтесь поднять это! Закончив «жесткий» бит, давайте теперь получим исходный код GlassFish.

Получение исходного кода

  GlassFish с открытым исходным кодом может быть загружен и изменен бесплатно. Чтобы загрузить исходный код, перейдите туда, куда вы хотите загружать файлы с помощью терминала, и используйте следующую команду (убедитесь, что он указан в вашем пути, если он не установлен по умолчанию):

     svn checkout https://svn.java.net/svn/glassfish~svn/trunk/main

  Это загрузит исходный код в папку с именем main в текущем каталоге. После этого пришло время приступить к созданию GlassFish.

Строительство GlassFish

  Если все идет хорошо, GlassFish может быть собран одной командой; сказал, что это было относительно просто! Перейдите в главный каталог с терминалом и выполните следующую команду (снова убедитесь, что она указана в вашем пути):

     установить mvn 

  Если вы хотите сэкономить немного времени при сборке GlassFish, вы можете добавить команду установки со следующим флагом, чтобы пропустить все тесты:

-DskipTests

  Если вы обнаружите, что он выдает ошибку «peer not authenticated», это связано с тем, что JVM не доверяет сертификатам репозитория Maven. Чтобы обойти это, вы можете временно отключить проверку сертификата Maven, добавив следующие флаги к команде установки:

-Dmaven.wagon.http.ssl.insecure = true –Dmaven.wagon.http.ssl.allowall = true

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

  Первая сборка может занять некоторое время, поэтому, если вы не наблюдаете прокрутку текста журнала, особенно завораживая, найдите что-то, что можно сделать в течение 20-30 минут.

Использование GlassFish в качестве сервера приложений

  Как только GlassFish был создан, мы можем использовать его так же, как если бы мы скачали его предварительно скомпилированным.

  • В NetBeans разверните раскрывающийся список « Инструменты» на панели инструментов, выберите « Серверы» и нажмите « Добавить сервер» .
  • В новом всплывающем окне выберите GlassFish Server из списка типов серверов и дайте ему имя, прежде чем нажимать «Далее».
  • Появится окно « Расположение сервера» , предлагающее вам указать место установки GlassFish. Для нашего недавно построенного сервера GlassFish это можно найти по адресу:
    • каталог_установки / main / appserver / дистрибутивы / glassfish / target / stage / glassfish4 (где каталог_установки — это каталог, в котором находится main )
  • В следующем окне оставьте настройки по умолчанию.

  Теперь сервер GlassFish должен быть настроен и готов к запуску!

Модификация GlassFish

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

  В качестве примера давайте разберем GlassFish!

  • Загрузите GlassFish ( основной каталог) в NetBeans.
  • Откройте модуль Classes Ядро Bootstrap: модули , GlassFish Nucleus родительский проект , модули GlassFish остова ядра , Классы Appserver Ядро Bootstraping GlassFish-банку . (Опечатка Bootstraping действительно существует во время написания!). 
  • Откройте класс MainHelper для редактирования, дважды щелкнув по нему на панели проектов.

  Отсюда, давайте сделаем небольшой хаос, изменив одно число. Прокрутите вниз до метода checkJdkVersion () и измените оператор if следующим образом:

 if (minor < 7) {

  К этому:

 if (minor < 12) {

  Говоря по-человечески, это означает, что код Java больше не проверяет, является ли используемый JDK меньше, чем JDK 7, а вместо этого проверяет, является ли используемый JDK меньше, чем JDK 12. Это приведет к немедленному завершению работы GlassFish при попытке запуска. домен; хороший, простой способ увидеть, действительно ли наши изменения вступили в силу.

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

  mvn install -pl kernel / core / bootstrap –amd

    Эта команда будет создавать только указанный модуль и те, которые зависят от него. -Pl флаг (проекты) определяет конкретные проекты по строительству, и -amd (также-Make-иждивенцы) флаг определяет , что все зависимые модули также построены. Для дальнейшего использования, если вы измените более одного модуля, флаг –pl позволяет вам указать несколько модулей в списке через запятую, например так:

  mvn install –pl module1_path, module2_path .

      Если вы хотите быть тщательным (что лучше всего, если вы хотите правильно протестировать свои изменения), просто пересоберите весь код; скорее всего, это займет не так много времени, как в первый раз.

  Как только Maven завершит работу над своей магией, перейдите в каталог bin GlassFish , install_dir / main / appserver / Distribution / Glassfish / target / stage / glassfish4 / glassfish / bin и попробуйте запустить домен ( ./asadmin start-domain ). Вы должны получить сообщение об ошибке, которое делает звук GlassFish немного необоснованным (ниже), доказывая, что наше изменение вступило в силу.

  Сервер преждевременно завершил работу с кодом выхода 1.

  Перед тем как умереть, он произвел следующий вывод:

  25 апреля 2014 г. 10:38:44 com.sun.enterprise.glassfish.bootstrap.MainHelper checkJdkVersion

  SEVERE: GlassFish требует JDK 7, вы используете JDK версии 7. 

Отладка GlassFish

  Измените оператор if, который мы изменили в предыдущем разделе, на его первоначальное значение и перестройте модуль, используя ту же команду, что и раньше (для продолжения работает рабочий GlassFish!).

  Для отладки GlassFish сначала нужно настроить наш отладчик:

  • Из NetBeans запустите сервер GlassFish в режиме отладки. 
  • Нажмите на раскрывающемся меню « Отладка» на панели инструментов и выберите « Присоединить отладчик» .
  • Используйте отладчик JDPA с соединителем SocketAttach . Хост будет локальным ( или именем вашей машины), а порт должен быть 9009 (по умолчанию GlassFish).
  • Откройте раскрывающийся список « Окно» на панели инструментов, разверните список « Отладка» и нажмите « Источники», чтобы открыть окно « Источники» .
  • Щелкните правой кнопкой мыши в окне Sources , выберите Add Source Root и добавьте основной каталог.

    Если все прошло гладко, вы должны увидеть основной каталог в окне « Источники» , что означает, что мы теперь связали исходный код с нашим сервером GlassFish, готовым к отладке. Давайте просто проверим, как работает быстрый пример, прежде чем мы начнем праздновать:

  • Откройте класс RestResponse , который находится в разделе Родительский проект GlassFish Appserver, Пакеты консоли администратора, Общая консоль администратора Glassfish-jar (вы можете заметить, что путь к этому модулю будет добавлен в окно источников ).
  • В методе getResponseCode () добавьте выделенную строку перед большим оператором if , чтобы он выглядел следующим образом (не стесняйтесь изменять сообщение):
...
 String contentType = response.getHeaderString("Content-type");  
 Logger.getLogger(RestResponse.class.getName()).log(Level.INFO, "Help me! The author keeps breaking me!");  
 if (contentType != null) { 
 ... 
  • Добавьте точку останова на нашей новой добавленной строке.
  • Сохраните, а затем восстановите GlassFish с Maven.
  • Restart GlassFish in debug mode and re-attach the NetBeans Debugger (you don’t need to add the source root again).
  • Open up a browser and navigate to the Admin Console.

  The break point should trigger, and if you step over or continue a few times, you will see our logger message being output in the GlassFish Server pane of the Output window.

Wrapping Up

  And with that, you should now have built GlassFish from source and taken your first steps on modifying and debugging it. Have fun, and remember to make backups; we just aptly showed how easy it is to break it!