null

Настраиваем WildFly на работу приложений с базой данных

Сегодня мало какое веб приложение обходится без работы с базой данных. Подключение и конфигурация доступа к БД может происходить как на уровне самого приложения (прямой доступ к базе), так и через сервер приложений. Под катом рассмотрим процесс создания и настройки подключения к базе данных в WildFly 10.

Для начала рассмотрим, зачем нам вообще понадобилось настраивать доступ к БД через сервер-приложений.

Во-первых, перенося задачу конфигурации доступа на сервер приложений, мы получаем возможность полностью абстрагироваться от знания, с какой СУБД мы имеем дело, где она живет и т.д.  Это отличается от того, когда, используя Hibernate на уровне Java кода, мы работаем с объектной моделью и языком запросов независящем от конкретной СУБД, но при этом все равно имеем в приложений файл конфигурации с указанием диалекта языка, jdbc драйвера и параметров подключения. Теперь же, в нашем приложение мы используем термин datasource, который скрывает от нас с чем мы работаем и где оно находится. Благодаря этому мы получаем приложение, которое может работать с множеством СУБД без необходимости внесения каких-либо изменений в исходный код.

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

Также, WildFly, помимо выше сказанного, привносит такие вещи как мониторинг, управление connection pool'ом и многое другое, что позволяет в райнтаме из админки сервера приложений контролировать и подстраивать доступ к БД.

Теперь рассмотрим что нужно сделать, чтобы наше приложение смогло подключиться к базе данных через WildFly.


Необходимо иметь установленный сервер приложений Wildfly 10 (как это сделать можно прочитать тут) и субд (в моем случае это postgres).
Первое, что необходимо сделать - создать базу  и пользователя для неё. Давайте посмотрим, как это делается на примере postgres.
 

postgres=# CREATE DATABASE  name_database;
CREATE DATABASE

postgres=# CREATE USER name_user WITH password '****';
CREATE ROLE

postgres=# GRANT ALL privileges ON DATABASE name_database TO name_user;
GRANT

Проверить, что всё получилось правильно можно так:

psql -h localhost name_database name_user

Теперь необходимо создать в WildFly datasource. Сделать это можно двумя способами, вручную правкой конфигов на сервере, либо через веб интерфейс для управления сервером. Рассмотрим второй вариант.

Зайдите в консоль администратора (стандартно висит на порту 9990). После чего перейдите в Configuration -> Subsystems -> Datasources -> Non-XA (см рис.).

Нажимаем Add, чтобы добавить новый ресурс. после чего предлагается выбрать, для какой СУБД вы хотите создать Datasource.
Следующим шагом попросят задать атрибуты datasource'а. JNDI Name - то, что будет использоваться в настройках приложения.

Далее необходимо настроить JDBC driver. Опять же это можно сделать двумя способами. Рассмотрим способ detect'а драйвера. В этой вкладке WildFly отображает список имеющихся у него драйверов (по умолчанию только h2), если JDBC драйвере для вашей СУБД там нет, его необходимо скачать с офф. сайта (для postgres тут, качаем JDBC42). После этого, внезапно, нужно задеплоить скачанный JAR-ник, как обычное приложение. Поместите драйвер в директорию ${WildFlyHome}/standalone/deployments/ . После этого в консоли разработичка можно посмотреть его во вкладке Deployments.

 

Теперь нужно снова вернуться в создание datasource'а и выбрать в обнаруженных драйверах, свой только что добавленный jar-ник.

Следующим этапом будет настройка подключения к базе. Необходимо указать host и port в случае, если субд живет на другой машине, а также изменить deafult'ное имя базы на созданное нами ранее. Также требуется ввести логин и пароль пользователя, которым будут подключаться.

 

После всего это попросят подтвердить введенные данные. Если всё сделано верно, то в списке datasource'ов появится ваш новый. Перейдите в него (кнопка 'View') и во вкладке connetction проверьте соединение кнопкой 'Test connection'.

Теперь при написании приложения в качестве datasource необходимо указать, то JNDI имя, которое вы вводили на первом этапе создания datasource'а. Ниже пример persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.0"
             xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="com.tuneit.namePU" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <jta-data-source>java:jboss/nameDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.current_session_context_class" value="jta"/>
            <property name="show_sql" value="false"/>
            <property name="hibernate.show_sql" value="false" />
        </properties>
    </persistence-unit>
</persistence>

Теперь, как видите, конфигурация приложения независима от конкретной СУБД и не хранит в себе пароля к базе.

На этом всё.