WildFly настройка и использование DataSource в JPA

В данном уроке, хочу рассказать что такое datasource. И показать как его настроить в своем приложении.

 

Шаг 0. Введение

DataSource — с перевода можно увидеть что это источник данных. Наша БД.

Использование источника несет за собой:

1. Транзакции возлагаться на сервер приложений. Вам не зачем работать с ними внутри приложения

2. Хороший подход при разработке коммерческих продуктов. Программисты не знают паролей к БД.

С технологией JPA, думаю уже все знакомы. Если нет, то есть об этом урок вот здесь: JPA работа с базой данных.

 

Шаг 1. Создание datasource

Я использую WildFly 8.1. Для всех способов создания, обратите внимание на то, чтобы у вашего сервера был JDBC драйвер под вашу БД. Данный драйвер можно добавить с панели управления или же поместить в папку.

WildFly: директория modules. Туда нужно поместить свой драйвер и прописать настройки.

module.xml

<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
    <resources>
        <resource-root path="postgresql-9.3-1101.jdbc4.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Я бы просто предложил вам сделать деплой и активацию jar’ника.

1. Первый метод, создание с веб интерфейса сервера приложений.

Нужно зайти в админ. панель, по умолчанию: http://localhost:9990. Там переходим в конфигурации, выбираем пункт datasources(3) и нажимаем добавить(4).

4661_1

Вы увидите окно с настройками. Где вы указываете имя нового источника и даете ему JNDI по которому мы будем потом обращаться.

Step 1/3.

Name: DataSourceEx

JNDI Name: java:jboss/datasources/DataSourceEx

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

4661_03

Следующий шаг, нужно указать url к базе и имя, пароль пользователя, который имеет к ней права доступа. Через которого мы будем выполнять наши действия.

Step 3/3.

Connection URL: jdbc:postgresql://localhost:5432/datasourceex

Username: postgres

Password: root

Нажимаем проверку соединения и должны увидеть окошко с подтверждением успешного соединения.

4661_05

Теперь он есть в списке. Нажимаем по нему и жмем connection. Выбираем edit и ..

4661_06

Включаем поддержку JTA

 

4661_07

Сохраняем и переходим к настройке пула

4661_08

Теперь нужно активировать наш источник. Перезагрузите сервер, зайдите в это меню и нажмите кнопку «Enable»

4661_09

 

2. Второй способ

Зайти в папку с сервером и внести источник руками в файл /standalone/configuration/standalone.xml внутри тега <datasources> … </datasources>. После чего перезапустить сервер.

<datasource jta="true" jndi-name="java:jboss/datasources/DataSourceEx" 
pool-name="DataSourceEx" enabled="true" use-ccm="true">
    <connection-url>jdbc:postgresql://localhost:5432/datasourceex</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <driver>postgresql</driver>
    <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
    </pool>
    <security>
        <user-name>postgres</user-name>
        <password>root</password>
    </security>
</datasource>

connection-url — адресс к БД

driver-class — класс JDBC драйвера

driver — название драйвера

pool — настройки пула соединений

min-pool-size — минимальный размер пула

max-pool-size — максимальный размер пула

security — настройки аутентификации

user-name — имя пользователя БД

password  — пароль

 

Шаг 2. Создание приложения

Теперь непосредственно к приложению. Приложение написано с использованием технологии EJB. Так что если предварительно не знакомы, то можете прочесть эту короткую статью:  Введение в основы EJB3.

Структура:

4661_10

 

User:

@Entity
@Table(name = "accounts")
public class User {
    @Id
    @GeneratedValue
    private int id;
    @Column(nullable = false, unique = true)
    private String login;
    @Column(nullable = false)
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", login='" + login + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 

UserDao:

@Stateless
public class UserDao {
    @PersistenceContext(unitName = "DataSourceEx")
    private EntityManager em;

    public void save(User user){
        em.persist(user);
    }

    public List<User> findAll(){
        return em.createQuery("select u from User u")
                .getResultList();
    }
}

@PersistenceContext — подключение нашего менеджера сущностей.

 

ShowAll:

@WebServlet(urlPatterns = "/show")
public class ShowAll extends HttpServlet{
    @EJB
    private UserDao dao;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                   throws ServletException, IOException {
        resp.setContentType("text/html");
        Writer writer = resp.getWriter();
        List<User> users = dao.findAll();

        if (users == null || users.isEmpty()){
            writer.write("You have no users");
        }else {
            for (User user : users){
                writer.write(user.toString() + "<br/>");
            }
        }
        writer.close();
    }
}

@WebServlet — сервлет

@EJB — подключение нашего DAO

 

persistence.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="DataSourceEx" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/DataSourceEx</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

 

Итог

После всех действий, в браузере вы должны увидеть вот такое сообщение:

You have no users

И после того как добавите их увидите что-то вроде этого:

User{id=1, login='FirstUser', password='123456'}
Урок создан: 07 июля 2014 | Просмотров: 18115 | Автор: Олег Криль | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии: