Статьи

Настройка источника данных JBoss / Wildfly с Maven

Большинство приложений Java EE используют доступ к базе данных в своей бизнес-логике, поэтому разработчики часто сталкиваются с необходимостью настройки драйверов и свойств подключения к базе данных на сервере приложений. В этом посте мы собираемся автоматизировать эту задачу для JBoss / Wildfly и базы данных Postgre с помощью Maven . Работа основана на моем приложении World of Warcraft Auctions Batch из предыдущего поста .

Конфигурация Maven

Давайте начнем с добавления следующего в наш pom.xml :

Wildfly Maven Плагин

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<plugin>
    <groupid>org.wildfly.plugins</groupid>
    <artifactid>wildfly-maven-plugin</artifactid>
    <version>1.0.2.Final</version>
    <configuration>
        <executecommands>
            <batch>false</batch>
            <scripts> <script>target/scripts/${cli.file}</script> </scripts>
        </executecommands>
    </configuration>
    <dependencies>
        <dependency>
            <groupid>org.postgresql</groupid>
            <artifactid>postgresql</artifactid>
            <version>9.3-1102-jdbc41</version>
        </dependency>
    </dependencies>
</plugin>

Мы собираемся использовать плагин Wildfly Maven для выполнения скриптов с командами на сервере приложений. Обратите внимание, что мы также добавили зависимость к драйверу Postgre. Это Maven для загрузки зависимости, потому что она понадобится нам позже, чтобы добавить ее на сервер. Также есть свойство ${cli.file} , которое будет присвоено профилю. Это указывает на то, какой скрипт мы хотим выполнить.

Давайте также добавим следующее в pom.xml :

Плагин Maven Resources

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-resources-plugin</artifactid>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>process-resources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputdirectory>${basedir}/target/scripts</outputdirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources/scripts</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <filters>
                    <filter>${basedir}/src/main/resources/configuration.properties</filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

С помощью плагина Resources Maven мы собираемся отфильтровать файлы сценариев, содержащиеся в src/main/resources/scripts и заменить их свойствами, содержащимися в файле ${basedir}/src/main/resources/configuration.properties .

Наконец, давайте добавим несколько профилей Maven в pom.xml со сценариями, которые мы хотим запустить:

Maven Профили

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<profiles>
    <profile>
        <id>install-driver</id>
        <properties>
            <cli.file>wildfly-install-postgre-driver.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>remove-driver</id>
        <properties>
            <cli.file>wildfly-remove-postgre-driver.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>install-wow-auctions</id>
        <properties>
            <cli.file>wow-auctions-install.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>remove-wow-auctions</id>
        <properties>
            <cli.file>wow-auctions-remove.cli</cli.file>
        </properties>
    </profile>
</profiles>

Файлы сценариев Wildfly

Добавить драйвер

Скрипты с командами для добавления драйвера:

wildfly-установки-Postgre-driver.cli

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
# Connect to Wildfly instance
connect
 
# Create Oracle JDBC Driver Module
# If the module already exists, Wildfly will output a message saying that the module already exists and the script exits.
module add \
    --name=org.postgre \
    --resources=${settings.localRepository}/org/postgresql/postgresql/9.3-1102-jdbc41/postgresql-9.3-1102-jdbc41.jar \
    --dependencies=javax.api,javax.transaction.api
 
# Add Driver Properties
/subsystem=datasources/jdbc-driver=postgre: \
    add( \
        driver-name="postgre", \
        driver-module-name="org.postgre")

Драйверы базы данных добавлены в Wildfly как модуль. В этом был драйвер широко доступен для всех приложений, развернутых на сервере. С ${settings.localRepository} мы указываем на jar драйвера базы данных, загруженный в ваш локальный репозиторий Maven. Помните зависимость, которую мы добавили в плагин Wildfly Maven ? Это скачать драйвер при запуске плагина и добавить его на сервер. Теперь, чтобы запустить скрипт, который мы выполняем (вам нужно запустить сервер приложений):

mvn process-resources wildfly:execute-commands -P "install-driver"

Жизненный цикл process-resources необходим для замены свойств в файле сценария. В моем случае ${settings.localRepository} заменяется на /Users/radcortez/.m3/repository/ . Проверьте папку target/scripts . После выполнения команды вы должны увидеть следующий вывод в журнале Maven:

1
{"outcome" => "success"}

И на сервере:

1
2
INFO  [org.jboss.as.connector.subsystems.datasources] (management-handler-thread - 4) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3)
INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-4) JBAS010417: Started Driver service with driver-name = postgre

wildfly-удалить-Postgre-driver.cli

01
02
03
04
05
06
07
08
09
10
11
12
# Connect to Wildfly instance
connect
 
if (outcome == success) of /subsystem=datasources/jdbc-driver=postgre:read-attribute(name=driver-name)
 
    # Remove Driver
    /subsystem=datasources/jdbc-driver=postgre:remove
 
end-if
 
# Remove Oracle JDBC Driver Module
module remove --name=org.postgre

Этот скрипт предназначен для удаления драйвера с сервера приложений. Выполнить mvn wildfly:execute-commands -P "remove-driver" . Вам не нужны process-resources если вы уже выполнили команду раньше, если только вы не изменили сценарии.

Добавить источник данных

вау-аукционы-install.cli

Скрипты с командами для добавления источника данных:

вау-аукционы-install.cli

01
02
03
04
05
06
07
08
09
10
11
12
13
# Connect to Wildfly instance
connect
 
# Create Datasource
/subsystem=datasources/data-source=WowAuctionsDS: \
    add( \
        jndi-name="${datasource.jndi}", \
        driver-name=postgre, \
        connection-url="${datasource.connection}", \
        user-name="${datasource.user}", \
        password="${datasource.password}")
 
/subsystem=ee/service=default-bindings:write-attribute(name="datasource", value="${datasource.jndi}")

Нам также нужен файл для определения свойств:

configuration.properties

1
2
3
4
datasource.jndi=java:/datasources/WowAuctionsDS
datasource.connection=jdbc:postgresql://localhost:5432/wowauctions
datasource.user=wowauctions
datasource.password=wowauctions

Источник данных Java EE 7 по умолчанию

Java EE 7 указывает, что контейнер должен предоставлять источник данных по умолчанию. Вместо определения источника данных с именем JNDI java:/datasources/WowAuctionsDS в приложении, мы собираемся указать наш вновь созданный источник данных на источник по умолчанию с помощью /subsystem=ee/service=default-bindings:write-attribute(name="datasource", value="${datasource.jndi}") . Таким образом, нам не нужно ничего менять в приложении. Выполните скрипт с помощью команды mvn wildfly:execute-commands -P "install-wow-auctions" . Вы должны получить следующий вывод Maven:

1
2
3
4
5
6
org.jboss.as.cli.impl.CommandContextImpl printLine
INFO: {"outcome" => "success"}
{"outcome" => "success"}
org.jboss.as.cli.impl.CommandContextImpl printLine
INFO: {"outcome" => "success"}
{"outcome" => "success"}

И на сервере:

1
INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source

вау-аукционы-remove.cli

1
2
3
4
5
6
7
# Connect to Wildfly instance
connect
 
# Remove Datasources
/subsystem=datasources/data-source=WowAuctionsDS:remove
 
/subsystem=ee/service=default-bindings:write-attribute(name="datasource", value="java:jboss/datasources/ExampleDS")

Это скрипт для удаления источника данных и возврата источника данных по умолчанию для Java EE 7. Запустите его, выполнив mvn wildfly:execute-commands -P "remove-wow-auctions"

Вывод

В этом посте демонстрировалось, как автоматизировать добавление / удаление драйверов в экземпляры Wildfly, а также добавлять / удалять источники данных. Это полезно, если вы хотите переключаться между базами данных или настраиваете сервер с нуля. Подумайте о среде CI. Эти скрипты также легко настраиваются для других драйверов.

Наслаждайтесь!

Ссылка: Настройте JBoss / Wildfly Datasource с Maven от нашего партнера по JCG Роберто Кортеса в блоге