Пьер-Ив Бигурдан и Сэм Люкс — два инженера-программиста из D+E Platform Media Services, где они создают высокодоступные микросервисы Java в облаке, Возможность прямой трансляции. Они беззаботно рассказывают о своем опыте работы с Java 11.

26 сентября 2018 года солнце вышло из-за последних остатков позднего британского лета. Кроме того, это был ежемесячный день инноваций команды BBC Media Services. «Эй, Сэм, давай попробуем Java 11…» — эти роковые слова заставили нас запустить последнюю версию OpenJDK в производство. Java 11 является обозначенной версией с долгосрочной поддержкой и была опубликована всего за день до этого, поэтому прекратилась поддержка Java 10, которую более молодые версии нас с энтузиазмом развернули всего за несколько месяцев до этого!

Установить новую версию JDK на наши ноутбуки не составило труда, и после обновления наших соответствующих установок Eclipse и IntelliJ до последних бета-версий мы были в деле… Ну, за исключением некоторых интригующих CloseFileExceptions:

Сборка нашего проекта с помощью только что установленного компилятора оказалась более сложной задачей, чем мы сначала думали, из-за еще большего количества исключений:

java.lang.IllegalStateException: Could not find sun.misc.Unsafe
org.apache.maven.plugin.PluginExecutionException: Execution default-testCompile of goal ...

Несколько советов, которые помогут вам начать работу, если ваша сборка тоже взорвется:

  • Если какая-либо из используемых вами библиотек выполняет манипуляции с байт-кодом, закрепите их транзитивные зависимости, такие как byte-buddy или asm, к их последним версиям.
  • Если вы используете Maven в качестве инструмента сборки, обновите плагины Compiler и Surefire.
  • Включите любые удаленные модули Java EE в качестве зависимостей к вашему проекту, например, java.xml.bind.
  • Перенесите любой код, используя удаленные методы или теперь инкапсулированные внутренние API. Мы говорим о вас sun.misc.Unsafe.

Как нам установить это на сервер? — таков был наш следующий беспокоящий вопрос. К сожалению, это было не так просто, как yum install openjdk-11, так как на момент написания не было предоставлено ни одного пакета. Чтобы решить эту проблему, нам пришлось создать собственный rpm, предпочтительный способ установки программного обеспечения в выбранном нами дистрибутиве Linux. После сборки наш rpm загружает, затем распаковывает бинарные файлы с веб-сайта OpenJDK, а при установке регистрирует исполняемые файлы (java, jps и другие) как альтернативные команды Linux. Нам также пришлось проделать дополнительную работу, чтобы гарантировать, что хранилище доверенных сертификатов cacerts, используемое Java, включает все сертификаты, необходимые для связи с нашими внутренними службами и облачными провайдерами.

Мы используем Jenkins в качестве нашего сервера непрерывной интеграции, и для каждого проекта у нас есть конвейер заданий, которые создают, тестируют и развертывают выпуск в облаке. Сделать Java 11 доступной для сборок было так же просто, как установить наш только что приготовленный rpm на ведомые устройства сборки и настроить некоторую глобальную конфигурацию, чтобы Дженкинс знал, как настроить среду каждого задания.

Однако на этом история не закончилась — на вечеринку пришел незваный гость — наш инструмент для проверки качества кода SonarQube. Наш конвейер сборки был заблокирован из-за того, что несколько его плагинов были еще не совсем готовы для последней версии Java. После нескольких настроек дерева зависимостей, отправленного запроса на включение и сборки из исходного кода у нас был старт. Наконец, один из наших сервисов успешно обрабатывал запросы с использованием Java 11 в наших предварительных средах!

Пока мы все еще экспериментируем с некоторыми наиболее радикальными функциями последних выпусков Java, такими как модульная система, мы уже наслаждаемся некоторыми обновлениями API и синтаксиса, включая:

  • современный и гибкий HttpClient.
  • поляризующее ключевое слово var для определения типа локальной переменной.
  • много более богатых методов API для коллекций, строк, необязательных параметров, потоков…
  • и многое другое!

Если вам интересно, стоит ли вам переходить на Java 11, то, исходя из нашего опыта, ответ «да», это определенно возможно, и архитектура микросервисов, которая позволяет вам делать один шаг за раз, безусловно, поможет. Тем не менее, вы можете подождать несколько недель, пока экосистема Java с открытым исходным кодом не наверстает упущенное!