Большинство приложений 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 instanceconnect# 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 instanceconnectif (outcome == success) of /subsystem=datasources/jdbc-driver=postgre:read-attribute(name=driver-name) # Remove Driver /subsystem=datasources/jdbc-driver=postgre:removeend-if# Remove Oracle JDBC Driver Modulemodule 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 instanceconnect# 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/WowAuctionsDSdatasource.connection=jdbc:postgresql://localhost:5432/wowauctionsdatasource.user=wowauctionsdatasource.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 printLineINFO: {"outcome" => "success"}{"outcome" => "success"}org.jboss.as.cli.impl.CommandContextImpl printLineINFO: {"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 instanceconnect# 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. Эти скрипты также легко настраиваются для других драйверов.
- Вы можете получить код из репозитория WoW Auctions Github , который использует эту настройку.
Наслаждайтесь!
| Ссылка: | Настройте JBoss / Wildfly Datasource с Maven от нашего партнера по JCG Роберто Кортеса в блоге |