12. IBM DB2 Express-C 10.5
Тепер ми переходимо до перенесення на DB2 того, що було зроблено з MySQL. Обидва SGBD, дійсно, мають однакову стратегію генерації первинних ключів.
![]() |
12.1. Налаштування робочого середовища
12.1.1. Середовище Eclipse
Ми працюватимемо з таким середовищем Eclipse:
![]() |
Вищезазначені проекти DB2 знаходяться у папці [<exemples>/spring-database-config\db2\eclipse].
Примітка: виконайте команду [Alt-F5], щоб перегенерувати всі проекти Maven.
12.1.2. Створення баз даних
Як і у випадку з Oracle, нам потрібно встановити драйвер JDBC з DB2 у локальне сховище Maven.
![]() |
Файл [install.bat] містить такий код:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
де [%M2-HOME%] — це папка встановлення Maven (див. розділ 23.2). Після цієї інсталяції на драйвер JDBC з DB2 можна посилатися у файлах [pom.xml] за допомогою такої залежності:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
У подальшому підключення до баз даних DB2 здійснюється за допомогою облікових даних [db2admin / db2admin]. Запустіть DB2 та його клієнт [Db2Manager] (див. параграф 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
База [DBPROD] є базою [dbproduits] попередніх SGBD. Але [DB2Manager] не дозволив мені використовувати це ім’я (можливо, воно занадто довге для нього). Тепер ми створюємо таблицю [PRODUITS] із такою конфігурацією виконання в Eclipse: [generic-create-dbproduits-jpa]:
![]() | ![]() |
Виконання створює таблицю [PRODUITS] у базі даних [DBPROD]:
![]() |
- у [1], наведеному вище, послідовність була згенерована не [OpenJpa], а саме DB2, який використовує її внутрішньо для генерації первинних ключів;
Тепер виконайте налаштування:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Усі вони мають виконатися успішно.
Тепер створимо базу [dbproduitscategories]. Тут вона називатиметься [DBCAT] з уже згаданих причин обмеження довжини назв баз. Повторіть для [DBCAT] процедуру, виконану для створення [DBPROD].
![]() |
Тепер ми створюємо таблиці бази даних [DBCAT] у програмі Eclipse, використовуючи конфігурацію [generic-create-dbproduitscategories-openjpa]:
![]() | ![]() |
Це виконання дає такий результат:
![]() | ![]() |
Необхідно змінити стовпець [VERSIONING] у п’яти таблицях, щоб значенням за замовчуванням було 1:
![]() |
![]() |
Цю операцію потрібно виконати для всіх п'яти таблиць.
Тепер виконайте налаштування:
- [spring-jdbc-generic-04.JUnitTestDao] ;
- [spring-jpa-generic-JUnitTestDao-openjpa] ;
Обидві конфігурації мають виконатися успішно.
12.2. Налаштування шару JDBC
![]() | ![]() |
Проєкт [db2-config-jdbc] налаштовує рівень [JDBC] у такій архітектурі тестування:
![]() |
Цей проєкт аналогічний проєкту конфігурації [mysql-config-jdbc] для рівня JDBC у ланцюжку SGBD MySQL (див. розділ 3.3). Ми наводимо лише зміни:
Файл [pom.xml] імпортує драйвер JDBC із DB2:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dvp.spring.database</groupId>
<artifactId>generic-config-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>configuration generic jdbc</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<dependencies>
<!-- змінні залежності ********************************************** -->
<!-- драйвер JDBC для SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- постійні залежності ********************************************** -->
....
</dependencies>
...
</project>
- рядки 18–22: драйвер JDBC з DB2;
Друга зміна стосується класу [ConfigJdbc], який визначає ідентифікатори доступу до баз даних:
// параметри підключення
public final static String DRIVER_CLASSNAME = "com.ibm.db2.jcc.DB2Driver";
public final static String URL_DBPRODUITS = "jdbc:db2://localhost:50000/dbprod";
public final static String USER_DBPRODUITS = "db2admin";
public final static String PASSWD_DBPRODUITS = "db2admin";
public final static String URL_DBPRODUITSCATEGORIES = "jdbc:db2://localhost:50000/dbcat";
public final static String USER_DBPRODUITSCATEGORIES = "db2admin";
public final static String PASSWD_DBPRODUITSCATEGORIES = "db2admin";
Третя зміна, яку можна внести, стосується максимальної кількості параметрів, які може підтримувати [PreparedStatement]:
// максимальна кількість параметрів [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Тест [JUnitTestPushTheLimits] генерує замовлення SQL на 5000 товарів, які, у свою чергу, генеруватимуть [PreparedStatement] з 5000 параметрами. MySQL також підтримував це значення. DB2 — також.
Четверта зміна стосується назви таблиці [ROLES]. Справа в тому, що ця назва вже зарезервована в SGBD та DB2. Тому її було перейменовано на [ROLES_]:
public final static String TAB_ROLES = "ROLES_";
public static final String SELECT_ROLES_BYUSERID = "SELECT DISTINCT r.ID as r_ID, r.VERSIONING as r_VERSIONING, r.NAME as r_NAME FROM ROLES_ r, users u, USERS_ROLES ur"
+ " WHERE u.ID=:id AND ur.USER_ID=u.ID AND ur.ROLE_ID=r.ID";
12.3. Налаштування шару JPA OpenJpa
![]() | ![]() |
Проєкт [db2-config-jpa-openjpa] налаштовує рівень [JPA] тестової архітектури:
![]() |
Цей проект аналогічний проекту конфігурації [mysql-config-jpa-openjpa] для рівня JPA OpenJpa з SGBD MySQL (див. параграф 8.3). Дійсно, обидва SGBD використовують анотацію [@GeneratedValue(strategy = GenerationType.IDENTITY)] для генерації первинних ключів. Потрібно внести лише одну зміну. Вона знаходиться у визначенні біна [jpaVendorAdapter] класу [ConfigJpa]:
// провайдер JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- рядок 6: вказуємо реалізації JPA, що вона працюватиме з базою DB2. Реалізація JPA після цього перейме як власні типи даних, так і SQL, що є власником цього SGBD.
Після внесення цих змін виконання конфігурації [spring-jpa-generic-JUnitTestDao-openjpa] має пройти успішно.
![]() | ![]() |
12.4. Конфігурація шару JPA Hibernate
![]() | ![]() |
Примітка: виконайте команду [Alt-F5], щоб перегенерувати всі проекти Maven.
Проєкт [db2-config-jpa-hibernate] аналогічний проєкту [mysql-config-jpa-hibernate] (параграф 6.3) із тими самими змінами, що були застосовані під час перенесення [mysql-config-jpa-openjpa] до проєкту [db2-config-jpa-openjpa] (параграф 12.3).
Після внесення цих змін виконання конфігурації [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] має пройти успішно.
12.5. Конфігурація рівня JPA EclipseLink
![]() | ![]() |
Примітка: виконайте [Alt-F5], щоб перегенерувати всі проекти Maven.
Проєкт [db2-config-jpa-eclipselink] аналогічний проєкту [mysql-config-jpa-eclipselink] (параграф 7.3) і містить ті самі зміни, що були застосовані під час перенесення [mysql-config-jpa-openjpa] до проєкту [db2-config-jpa-openjpa] (параграф 12.3).
Після внесення цих змін виконання конфігурації [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] має пройти успішно.































