Мы продолжаем цикл статей разработчиков приложений для баз данных — Часть 1. Условная компиляция PL/SQL. Эта статья затронет тему использования Tibero в Java приложениях использующих JDBC и Hibernate, а также фреймворк Spring Roo.
В прошлом году вышел Spring Roo 2.0.0.RC2. Это java фреймворк, который позволяет значительно сократить время для разработки прототипов Spring MVC приложений, взаимодействующих с базами данных (БД), SOAP и RESTful web сервисов. Важно также, что последняя версия фреймворка создает приложения Spring Boot и использует шаблонизатор HTML страниц THYMELEAF, т.е. в отличие от предыдущей версии Spring Roo 1.3.2 использует последние технологии разработки java приложений.
“Из коробки” Spring Roo 2.0.0 работает, со следующими (БД): DB2_400, DB2_EXPRESS_C, DERBY_CLIENT, DERBY_EMBEDDED, FIREBIRD, H2_IN_MEMORY, HYPERSONIC_IN_MEMORY, HYPERSONIC_PERSISTENT, MSSQL, MYSQL, ORACLE, POSTGRES, SYBASE.
Возможность работы Spring Roo не только с open source, но и коммерческими БД существенно расширяет область его применения. Правда с одной оговоркой, драйвера коммерческих БД недоступны в открытых репозиториях, их необходимо скачать самостоятельно и поместить в локальный репозиторий maven.
Еще сложнее обстоят дела для коммерческих БД, которые не предусмотрены “из коробки” в Spring Roo, например, БД Tibero, которую в последнее время применяют как замену БД Oracle.
В нашей статье, мы покажем, что работать с такими БД ненамного сложнее, чем c коммерческими БД настройки для которых содержатся в Spring Roo.
Кратко опишем установку Spring Roo. Для работы Spring Roo 2.0.0.RC2 необходимо наличие java 8 и фреймворка для автоматизации и сборки проектов Apache Maven, желательно последней версии. Apache Maven берем с сайта maven.apache.org. Spring Roo 2.0.0.RC2 с сайта projects.spring.io/spring-roo.
Оба фреймворка скачиваются как zip архивы и разворачиваются, например для windows, в каталог C:\app\maven и C:\app\roo соответственно. Необходимо в переменную среды path прописать пути до исполняемых каталогов фреймворков: C:\app\maven\bin и C:\app\roo\bin. На этом установку необходимых фреймворков можно считать законченной. После перезапуска сессии пользователя проверяем работоспособность фреймворков.
В каталоге C:\app создаем каталог project. Заходим в каталог C:\app\project и набираем команду: mvn – version. Если фреймворк Apache Maven установлен правильно, то увидим версию самого фреймворка и java:
Apache Maven 3.5.0 (...)
Maven home: C:\app\maven\bin\..
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_121\jre
Default locale: ru_RU, platform encoding: Cp1251
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
После установки необходимых фреймворков, можно приступать к созданию проекта на Spring Roo. Подключение к БД, указанным в заголовке статьи будем тестировать на примере проекта hello из документации Spring Roo.
В каталоге project создаем каталог hello, где будет располагаться наш проект. Заходим в каталог hello и набираем команду roo. Если Spring Roo установлен правильно, то мы должны увидеть приглашение консоли Spring Roo:
_
___ _ __ _ __(_)_ __ __ _ _ __ ___ ___
/ __| '_ \| '__| | '_ \ / _` | | '__/ _ \ / _ \__ \ |_) | | | | | | | (_| | | | | (_) | (_) |
|___/ .__/|_| |_|_| |_|\__, | |_| \___/ \___/
|_| |___/ 2.0.0.RC2
Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo>
Теперь в консоли Spring Roo можно вводить команды для создания проекта:
project setup --topLevelPackage com.foo
jpa setup --provider HIBERNATE --database ORACLE
Первая строка определяет имя пакета приложения, вторая определяет провайдера ORM и имя БД. Если мы определили БД Oracle, а не HYPERSONIC_IN_MEMORY, как в документации, необходимо произвести дополнительный ручные настройки проекта hello, после чего вернуться к командам скрипта roo.
Первое, что нужно сделать, скачать jdbc драйвер Oracle: ojdbc7.jar и загрузить его в локальный репозиторий maven:
mvn install:install-file -Dfile=ojdbc7.jar -DgroupId=com.oracle
-DartifactId=ojdbc7 -Dversion=12.1.0.2.0 -Dpackaging=jar
Далее, в pom.xml файле проекта заменить зависимость, сформированную roo, на свою, которая учитывает версию jdbc драйвера.
В Spring Roo проектах зависимость для jdbc драйвера нужно прописать в двух разделах pom.xml файла. В разделе dependencyManagement:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2.0</version>
<type>jar</type>
</dependency>
И в раздел dependencies:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
</dependency>
Затем внести настройки в application.properties проекта. Указать имя класса драйвера, строку соединения, имя пользователя БД и пароль:
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc\:oracle\:thin\:@//<ip>\:1521/<name БД>
spring.datasource.password=<пароль>
spring.datasource.username=<пользователь>
spring.jpa.hibernate.ddl-auto=create-drop
Т.к. приложение тестовое, чтобы не засорять БД временными таблицами, последняя строчка настраивает hibernate на создание таблиц при старте приложения и их удаление при завершении работы.
После внесения указанных изменений в проект, можно продолжить создание приложения hello из командной строки Spring Roo:
entity jpa --class ~.domain.Timer
field string --fieldName message --notNull
repository jpa --all
service --all
web mvc setup
web mvc view setup --type THYMELEAF
web mvc controller --all --responseType THYMELEAF
web mvc controller --all --pathPrefix /api
Кратко опишем действие этих команд. Первые две строчки создают сущность Timer c одним полем message, которое не может быть пустым. Далее создается репозиторий для всех сущностей и сервисы. В этом приложении сущность одна — Timer. В последних строчках настраивается web часть приложения, созданная на основе Spring MVC и шаблонов THYMELEAF.
Все, простое приложение, позволяющее просматривать и редактировать сущность Timer, сохраняя данные в БД Oracle создано.
Исполнить приложение можно командой:
mvn spring-boot:run
После чего мы увидим результат работы приложения:
Рассмотрим теперь, какие настройки необходимо сделать, чтобы приложение работало с БД Tibero.
Первое, нужно скачать и поместить в локальный репозиторий maven jdbc драйвера Tibero:
mvn install:install-file -Dfile=tibero6-jdbc.jar -DgroupId=com.tmax.tibero
-DartifactId=tibero6-jdbc -Dversion=6.0 -Dpackaging=jar
Далее заменить jdbc драйвер Oracle на Tibero в зависимостях pom.xml раздела dependencyManagement:
<dependency>
<groupId>com.tmax.tibero</groupId>
<artifactId>tibero6-jdbc</artifactId>
<version>6.0</version>
<type>jar</type>
</dependency>
И в dependencies:
<dependency>
<groupId>com.tmax.tibero</groupId>
<artifactId>tibero6-jdbc</artifactId>
</dependency>
Внести изменения в настройки application.properties проекта:
spring.datasource.driver-class-name=com.tmax.tibero.jdbc.TbDriver
spring.datasource.url=jdbc\:tibero\:thin\:@<ip>\:<port>:<dbname>
spring.datasource.password=<пароль>
spring.datasource.username=<пользователь>
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
Последняя строчка конфигурации указывает hibernate диалект БД. Tibero диалекта нет в библиотеке hibernate. Однако известно, что метаданные БД Tibero практически полностью соответствуют метаданным Oracle, что позволяет в настройках приложения указать диалект Oracle. Hibernate, в этом случае будет работать с БД Tibero так, как если бы это была БД Oracle.
Убедиться в работоспособности модифицированного приложения можно как и раньше командой:
mvn spring-boot:run
Теперь приложение работает с коммерческой БД Tibero, используя диалект Oracle.
Другой способ настройки диалекта hibernate заключается в загрузке специальной библиотеки диалекта. Например для Tibero, — это hibernate-tibero-dialect.jar. Версия диалекта зависит от версии hibernate для которой предназначена библиотека.
Требуемую вам версию диалекта hibernate вы можете запросить в российском представительстве компании TmaxSoft.
Подробнее рассмотрим установку библиотеки диалекта.
Сначала, нужно скачать и поместить в локальный репозиторий maven библиотеку диалекта hibernate для Tibero:
mvn install:install-file -Dfile=hibernate-tibero-dialect.jar
-DgroupId=com.tmax.tibero
-DartifactId=hibernate-tibero-dialect -Dversion=6.0
-Dpackaging=jar
Затем добавить библиотеку диалекта в pom.xml, раздел dependencyManagement:
<dependency>
<groupId>com.tmax.tibero</groupId>
<artifactId>hibernate-tibero-dialect</artifactId>
<version>6.0</version>
<type>jar</type>
</dependency>
И в dependencies:
<dependency>
<groupId>com.tmax.tibero</groupId>
<artifactId>hibernate-tibero-dialect</artifactId>
</dependency>
Внести класс диалекта в application.properties проекта:
spring.jpa.database-platform=org.hibernate.dialect.TiberoDialect
Убеждаемся в работоспособности модифицированного приложения:
mvn spring-boot:run
Теперь приложение работает с коммерческой БД Tibero, используя библиотеку диалекта hibernate для Tibero.
Продолжайте следить за нашими публикациями, в которых мы стараемся делиться с вами опытом использования Tibero.
varcoo
Вначале статьи не хватает ссылки на часть 1.
Правильно ли я понимаю, что это некий аналог jhipster?
floka1963 Автор
Да, Вы понимаете правильно, Spring Roo можно назвать аналогом таких средств быстрой разработки java приложений как jhipster, CUBA и др. Spring Roo интересен тем, что это решение от Spring и тем, что ожидается релиз 2.0 этого фреймворка.
Vasiliy72
Спасибо за замечание, добавили ссылку на Часть 1