вторник, 17 июля 2018 г.

IBM открывает себя: WebSphere с открытым исходным кодом на JVM с открытым исходным кодом

Давно не писал заметки в блог, но есть новость и ей хочется поделиться: мой первый (и, я очень надеюсь - не последний), вклад в продукт с открытым исходным кодом Eclipse OpenJ9 был принят сообществом. Это - повод, а рассказать в данной заметке я хочу о проектах с открытым кодом, вышедших за последние годы из недр корпорации IBM. Возможно некоторые из них будут интересны вам лично или вашему бизнесу.

  • OpenLiberty - открытый сервер приложений Java EE, на базе него собирается WebSphere Liberty Profile. В качестве системы сборки используется Gradle (тесно интегрированная с bndtools, т.к. проект целиком и полностью основан на OSGi).

  • OpenJ9 - JVM с открытым исходным кодом, построенная на базе библиотеки классов из OpenJDK и другого проекта - OMR, содержащего кросс-платформенные компоненты для построения надежной и высокопроизводительной среды исполнения (т.е. на базе OMR можно построить не только JVM, но и среду исполнения для Python, Ruby или любого другого языка программирования). Какие это компоненты? Сборщик мусора, JIT-компилятор, библиотека общих кросс-платформенных функций, профайлер и т.д.

OpenJ9 и OMR открыты под эгидой сообщества Eclipse Foundation.

Теперь несколько слов о том, как собрать OpenJ9. Стоит сказать большое спасибо разработчикам за том, что они опубликовали довольно подробную инструкцию по сборке проекта с использованием вспомогательного Docker-образа и утилиты Make. Инструкция для JDK 8 может быть найдена по ссылке: Build_Instructions_V8.md, а для JDK 9 - Build_Istructions_V9.md. Обе инструкции подразумевают создание вспомогательного Docker-контейнера, содердащего компилятор C++, линковщик и все необходимые утилиты, библиотеки и заголовочные файлы. Т.е. можно не "захламлять" основное рабочее окружение если, например, разработка на C++ не является вашей основной деятельностью, а вам просто нужна свежая сборка JVM для тестов или экспериментов.


Однако создать контейнер - это еще не все. Чтобы собрать JVM необходимо загрузить исходники OpenJDK, OpenJ9 и OMR, а также подготовить и выполнить сборку с помощью утилиты Make. Затем можно упаковать собранную JVM в Docker-образ для дальнейшего использования. Суровый автоматизировал весь процесс сборки OpenJ9 с помощью популярной утилиты RedHat Ansible.

Строительный блок для Ansible - это роль. Роли можно повторно использовать и распространять с помощью сайта Ansible Galaxy. Так называемый "плэйбук" (скрипт в терминах Ansible) содержит следующие роли и каждая роль выполняет следующие действия:
  • openj9-build-environment - создает Docker-контейнер с окружением для сборки.

  • openj9-from-sources - загружает исходники IBMRuntimes (адаптированная библиотека классов из OpenJDK), OMR и OpenJ9, добавляет требуемые группы и пользователей в окружение для сборки, запускает утилиту Make и архивирует собранную JVM.

  • openj9-image - создает целевой Docker-образ, содержащий свежую сборку OpenJ9.

  • openj9-cleanup-build-environment - останавливает и удаляет Docker-контейнер с окружением для сборки, а также очищает задействованные каталоги на операционной системе хоста.

В настоящее время плейбук собирает целевой Docker-образ на основе Ubuntu 16.4, что может быть несколько избыточно. Владельцем виртуальной машины будет пользователь 'openj9' (настраиваемо) - участник одноименной группы (тоже настраиваемо). Контейнер будет работать под управлением непривилегированного пользователя 'openj9'.

Если вы хотите поэкспериментировать, то плэйбук доступен в каталоге buildenv/ansible проекта OpenJ9. Сам проект можно склонировать с GitHub. Один и тот же плэйбук используется как для сборки JDK9, так и JDK8, все конфигурационные параметры задаются в файле buildenv/ansible/inventories/local/hosts.

Для запуска процесса сборки достаточно выполнить команду:

$ ansible-playbook -i inventories/local/hosts openj9-docker-image.yml

В качестве демонстрации покажу Hello World на OpenLiberty под управлением свежей сборки OpenJ9 JDK9, работающей внутри Docker-контейнера:


Понравилось сообщение - подпишитесь на блог

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

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

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!