Идея поэкспериментировать с интеграцией Neo4j с Helidon возникла вполне естественно.  Neo4j — графовая система управления базами данных с открытым исходным кодом, реализованная на Java. По состоянию на 2015 год считается самой распространённой графовой СУБД. (Википедия, 21.10.2021)  Neo4j написана на Java и доступна из ПО, написанного на других языках с использованием языка запросов Cypher, через HTTP endpoint или через протокол «bolt». Neo4j в настоящее время является стандартом де-факто для графовых баз данных, используемых во многих отраслях.  Вообще, в се началось с небольшого разговора с Michael Simonis, одним из авторов Spring Data Neo4j 6 и сопровождающим Neo4j-OGM. Мы спросили Михаеля, что он думает о том, как Helidon и Neo4J могут работать вместе. Менее чем через час Михаель прислал мне ссылку на этот репозиторий с полнофункциональным примером для Helidon MP и Neo4j SDN.  Когда я начал читать код, я увидел странную зависимость в файле pom.xml: Spring? Да ладна! Почему в нашем проекте есть Spring?  Но продолжая изучать код, я был весьма удивлен, увидев расширение CDI 2.0, обрабатывающее инициализацию и подготовку драйвера. Это расширение CDI запустилось без проблем в Helidon, поскольку он полностью поддерживает контейнер CDI - шикарно! Я снова почувствовал красоту и силу стандартов.  На следующий день Михаель прислал мне другое репо. На этот раз он включил свои идеи о том, как использовать Neo4j с Helidon SE. Интеграция тоже получилась очень простой. Было легко использовать Helidon Config для переноса всей конфигурации Neo4j в единую конфигурацию. А поскольку драйвер Neo4j полностью поддерживает native image, все можно скомпилировать в native-image исполняемый файл без каких-либо дополнительных действий с точки зрения программиста.  Это породило дискуссии между командами Helidon и Neo4j о том, какой вид интеграции более подходит для Helidon. В результате мы создали официальную интеграцию!  После некоторых консультаций с представителем Neo4j и моим хорошим другом Михаелем Симонисом мы пришли к выводу, что нам нужно только прдоставлять инициализированный драйвер пользователям Helidon. Метрики и Health Checks из Neo4j должны быть проброшены в метрики Helidon / MicroProfile и должны предоставляться как отдельные модули - отдельные зависимости Maven.  Итак, как же нам написать интеграцию Neo4j с Helidon? существуют две разновидности Helidon - MP и SE. SE представляет собой набор реактивных API, реализованных на чистой Java. Абсолютно никакой «магии» вроде рефлекшана или других хитростей. Helidon MP, по сути, оборачивает SE и приводит его к стандартам MicroProfile. Это означает, что рекомендуется сначала реализовать интеграцию с Neo4j для Helidon SE, а затем обернуть ее как расширения CDI для Helidon MP. Дисклеймер: в этой статье я продемонстрирую только основные фрагменты кода. Поскольку Helidon опенсорс проект под лицензией Apache 2.0, полный код доступен в официальном репозитории Helidon.  В Helidon мы обычно создаем так называемый support объект для реализации интеграции. Этот объект содержит всю информацию о конфигурации и инициализации. Мы следуем Builder pattern для чтения из конфигурации. Это означает, что мы создаем внутренний объект Builder, который должен читать все данные из конфигурации: Вы можете увидеть строки с ключами, они фактически взяты из файла конфигурации. причем, либо из конфигурации SE, либо из конфигурации MicroProfile. Каждый элемент настраивается следуя шаблону Builder: Когда все поля установлены, мы можем сбилдить support объект: Таким образом мы гарантируем, что все значения не будут нулевыми. Фактическая инициализация драйвера довольно проста (некоторые методы опущены):  Support объект далее просто возвращает драйвер: ... и его можно использовать: Helidon позаботится о его инициализации из файла application.yaml: Собственно все - можно использовать уже в своем коде: И вуаля! Helidon и Neo4j теперь могут работать вместе. А как же MP?  Нам просто нужно обернуть нашу интеграцию в расширение CDI - это действительно довольно просто: Как видите, мы можем прочитать конфигурацию с помощью функций SE: Затем просто повторно используем наш support объект Neo4j SE: … и возвращаем драйвер: И тоже собственно все - просто инжектим драйвер: Конфигурация будет взята из файла microprofile-config.properties: Далее можно использовать драйвер как в примере с SE. Теперь  и Helidon MP может работать с Neo4j! Но это еще не все! Как я уже упоминал, для надлежащей работе в облаках нам также необходимо пробросить метрики и health checks из Neo4j. Сделаем как и раньше - сначала для SE, а потом все обернем в MP.  Начнем с метрик! Сделаем отдельный модуль для метрик Neo4j. Как и в Helidon SE, в support объекте Neo4j мы будем следовать шаблону Builder для настройки поддержки метрик. На самом деле нам нужен только драйвер Neo4j, так как мы можем все показатели получить из него: Затем мы должны обернуть counter–ы и gauge–ы Neo4j: Далее нужно зарегистрировать эти счетчики в MetricsRegistry: И мы практически готовы: Всегда полезно обновлять вовремя метрики, и для этого у нас есть функция: Нам нужно только предоставить драйвер Neo4j для предоставления нам информации о метриках в нашем файле application.yaml: … Или в нашем microprofile-config.properties : Теперь, если вы пойдете по «/health», вы также получите показания от Neo4j. Для MP, нам нужно только обернуть регистрацию метрик как расширение CDI. Событие это должно произойти после того, как драйвер уже инициализирован: Вот и все! Метрики Neo4j теперь доступны и в Helidon MP! И теперь, последнее, но не менее важное, проверка работоспособности! И опять же, это должен быть отдельный модуль, чтобы все было чисто и красиво. На этот раз мы начнем с MP: Технически для health check-a, мы выполняем простой запрос на Cypher, и если он работает, значит, Neo4j жив, этого достаточно! Нам нужно только добавить Maven зависимость в наш проект: И снова - Вуаля, все работает! Что касается SE, поскольку это чистая Java, нам просто нужно все инициализировать: Теперь наше Helidon приложение, как MP, так и SE, может работать с Neo4j, читать его метрики и выполнять health checks.  Кстати, поскольку драйвер Neo4j полностью поддерживает GraalVM native-image, приложения на Helidon MP или SE могут быть в него скомпилированы! В этой статье было продемонстрировано, как создать интеграцию разных технологий с Helidon. Что касается Neo4j, мы уже официально сделали это за вас! Просто нужно включить в свои Maven проект следующие зависимости: … И это все, что вам нужно для начала работы с Helidon и Neo4j! Как видите, интеграция с Helidon довольно проста. Стандартный способ сделать это - сначала написать supportобъект Helidon SE, следуя шаблону Builder для его инициализации, а затем просто обернуть его в CDI расширение, чтобы MicroProfile мог воспользоваться этой "магией"! Вы можете поиграть с примерами Helidon ин Neo4j в нашем официальном репозитории интеграции Helidon Neo4j . Что касается Neo4j, вас также может заинтересовать CypherDsl и пример с ним. В этой статье я хотел показать вам не только, как Neo4j работает с Helidon, но и как вы можете писать свои собственные расширения. Поскольку Helidon опенсорсный продукт, мы приглашаем вас в него контрибьютить!