В данном уроке, хочу рассказать что такое 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).
Вы увидите окно с настройками. Где вы указываете имя нового источника и даете ему JNDI по которому мы будем потом обращаться.
Step 1/3.
Name: DataSourceEx
JNDI Name: java:jboss/datasources/DataSourceEx
После чего, вам предложат выбрать драйвер к БД. Если его нету в списке, либо перезапустите сервер, если добавляли, либо пройдите шаги добавления еще раз.
Следующий шаг, нужно указать url к базе и имя, пароль пользователя, который имеет к ней права доступа. Через которого мы будем выполнять наши действия.
Step 3/3.
Connection URL: jdbc:postgresql://localhost:5432/datasourceex
Username: postgres
Password: root
Нажимаем проверку соединения и должны увидеть окошко с подтверждением успешного соединения.
Теперь он есть в списке. Нажимаем по нему и жмем connection. Выбираем edit и ..
Включаем поддержку JTA
Сохраняем и переходим к настройке пула
Теперь нужно активировать наш источник. Перезагрузите сервер, зайдите в это меню и нажмите кнопку “Enable”
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.
Структура:
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'}
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
4 комментариев к статье "WildFly настройка и использование DataSource в JPA"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Спасибо) Мне пригодилось)
Не виден рисунок в п. 1
За 3 года чот статей то с гулькин нос.
Было бы здорово, если бы сразу описывали тоже самое и через консольного клиента jboss-cli