angle-left

Добавляем WildFly-модули в Keycloak

Доброе утро!

Работая над „форком“ такого чудесного проекта, как Keycloak, мы озадачились вопросом добавления модулей WildFly на этапе сборки.

Да, можно класть их после развёртывания на площадке в $WILDFLY_HOME/modules/, можно пытаться деплоить динамически, но особенностью Keycloak является то, что система сборки позволяет получить готовый, настроенный дистрибутив WildFly сразу после сборки. Как следствие, и возникла идея его сделать „пренастроенным“ для наших тестовых площадок.

Посмотрим, как это сделать на примере драйвера к СУБД PostgreSQL.

Нужно поправить всего несколько файлов:

Идём в dependencies/drools-bom/pom.xml, секция <properties>, добавим следующую строку:

<postgresql.version>42.2.8</postgresql.version>

Очевидно, это версия используемой зависимости.

В том же файле, секция <dependencies> пополняется следующими строками:

            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>${postgresql.version}</version>
            </dependency>

Теперь в файле dependencies/server-all/pom.xml так же добавляем зависимость:

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

Версию указывать не нужно.

Следом идём в distribution/feature-packs/server-feature-pack/pom.xml и добавляем зависимость уже в нём:

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Осталось лишь добавить сам feature pack. В distribution/feature-packs/server-feature-pack/src/main/resources/ надо добавить module.xml по пути, будто это $WILDFLY_HOME. В данном случае, получается файл distribution/feature-packs/server-feature-pack/src/main/resources/modules/system/layers/keycloak/org/postgresql/main/module.xml следующего содержания:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
  <resources>
      <artifact name="${org.postgresql:postgresql}"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

Как видно, вместо привычного

        <resource-root path="postgresql-42.2.8.jar"/>

у нас идёт

      <artifact name="${org.postgresql:postgresql}"/>

(groupId:artifactId), в остальном всё как обычно.

Ну и завершающим, в данном случае не являющимся необходимым штрихом будет добавить наш модуль в зависимости тому, ради кого это делали. Для commons-io, например, это <module name="org.apache.commons.io"/> в секцию <dependencies> module.xml соответствующего модуля.

Бонус

Так как мы рассматривали добавление модуля postgresql, думаю, стоит сразу написать, что сделать для изменения дефолтной конфигурации собираемого WildFly на работу с соответствующей СУБД. Keycloak описывает свой datasource, KeycloakDS. Шаблоны, из которых создаются источники данных для standalone.xml находятся в файле wildfly/server-subsystem/src/main/resources/subsystem-templates/keycloak-datasources.xml. В нашем случае, это переопределение соответствующей секции на использование иного драйвера:

            <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
                <connection-url><?KEYCLOAK_DS_CONNECTION_URL?></connection-url>
                <driver>postgresql</driver>
                <security>
                    <user-name>user</user-name>
                    <password>pass</password>
                </security>
            </datasource>

Правка переменной, содержащей URL соединения:

        <replacement placeholder="KEYCLOAK_DS_CONNECTION_URL">
            jdbc:postgresql://localhost:5432/keycloak
        </replacement>

И указание драйвера postgresql, в дополнение к уже имеющемуся h2:

            <drivers>
                <driver name="postgresql" module="org.postgresql">
                    <driver-class>org.postgresql.Driver</driver-class>
                </driver>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
            </drivers>

Теперь можно собирать это дело командой в духе mvn install -Pdistribution, получив WildFly с Keycloak, нашими модулями и настройками.

На этом всё, спасибо за внимание.

Работаю в компании Tune-IT, разрабатываю софт. Могу писать на perl. Могу не писать. Могу клаву так заныкать, что фиг найдёшь.

Что умеет ваш портал?

Наш портал уже "из коробки" умеет очень многое. Сразу же после установки вы сможете использовать следующие компоненты:

Справочник сотрудников

Удобный агрегатор контактной информации, адресов и телефонов всех сотрудников компании.

Интеграция с IP-телефонией

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

Встроенный клиент Webmail

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

Вики-справочник

Централизованное хранилище для всей информации, необходимой сотрудникам для решения их повседневных задач.

Интеграция с сервером печати

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

Файловое хранилище

В портал встроено файловое хранилище с поддержкой версионирования файлов. Каждый пользователь имеет свой домашний каталог, доступный как через веб-интерфейс, так и через проводник Windows.

Мультимедиа-возможности

Встроенные фото- и видеогалерея позволяют просматривать фотографии и видео прямо на портале.

Социальные коммуникации

В портал встроена полноценная корпоративная социальная сеть. Сотрудники могут обмениваться сообщениями, файлами и общаться в форуме.

Кроме того, вы можете воспользоваться любым из сотен плагинов, доступных на Liferay Marketplace.

Сколько это будет стоить?

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

Существует несколько уровней технической поддержки, отличающихся друг от друга SLA и стоимостью.

  Free Basic 24x7
Количество пользователей
Количество сессий
Email hotline нет есть есть
Phone hotline нет нет есть
Обращений в месяц - 10
Режим технической поддержки - 8x5 24x7
Стоимость Бесплатно 20 000 /месяц 100 000 /месяц

 

OK, мне всё это нравится. Где я могу скачать ваш портал?

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

Если вы заинтересовались решением, или хотите поучаствовать в бета-тестировании - пожалуйста, напишите нам!