12. IBM DB2 Express-C 10.5
Przechodzimy teraz do przeniesienia na DB2 tego, co zostało wykonane w przypadku MySQL. Oba SGBD mają bowiem tę samą strategię generowania kluczy głównych.
![]() |
12.1. Konfiguracja środowiska pracy
12.1.1. Środowisko Eclipse
Będziemy pracować w następującym środowisku Eclipse:
![]() |
Powyższe projekty DB2 znajdują się w folderze [<exemples>/spring-database-config\db2\eclipse].
Uwaga: należy uruchomić polecenie [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
12.1.2. Generowanie baz danych
Podobnie jak w przypadku Oracle, będziemy musieli zainstalować sterownik JDBC z DB2 w lokalnym repozytorium Maven.
![]() |
Plik [install.bat] zawiera następujący kod:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
gdzie [%M2-HOME%] to katalog instalacyjny Mavena (patrz punkt 23.2). Po tej instalacji sterownik JDBC z pakietu DB2 można odwołać w plikach [pom.xml] za pomocą następującej zależności:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
W dalszej części połączenie z bazami danych DB2 odbywa się przy użyciu danych logowania [db2admin / db2admin]. Uruchom DB2 oraz jego klienta [Db2Manager] (patrz punkt 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
Baza [DBPROD] jest bazą [dbproduits] poprzedzających ją baz SGBD. Jednak [DB2Manager] nie pozwoliła mi użyć tej nazwy (być może była dla niej zbyt długa). Teraz tworzymy tabelę [PRODUITS] przy użyciu następującej konfiguracji uruchomienia Eclipse dla [generic-create-dbproduits-jpa]:
![]() | ![]() |
Operacja ta tworzy tabelę [PRODUITS] w bazie danych [DBPROD]:
![]() |
- w przypadku [1], o którym mowa powyżej, sekwencja nie została wygenerowana przez [OpenJpa], lecz przez samą tabelę DB2, która wykorzystuje ją wewnętrznie do generowania kluczy głównych;
Teraz należy wykonać następujące konfiguracje:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Wszystkie powinny zakończyć się powodzeniem.
Wygenerujmy teraz bazę [dbproduitscategories]. Z powodów, o których już wspomniano, dotyczących ograniczeń długości nazw baz, nazwiemy ją tutaj [DBCAT]. Powtórz dla [DBCAT] procedurę przeprowadzoną w celu utworzenia [DBPROD].
![]() |
Teraz utworzymy tabele bazy danych [DBCAT] w programie Eclipse, korzystając z konfiguracji [generic-create-dbproduitscategories-openjpa]:
![]() | ![]() |
To wykonanie daje następujący wynik:
![]() | ![]() |
Należy zmodyfikować kolumnę [VERSIONING] we wszystkich pięciu tabelach, tak aby jej wartością domyślną była 1:
![]() |
![]() |
Operację tę należy wykonać dla wszystkich pięciu tabel.
Teraz należy wykonać następujące konfiguracje:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa] ;
Obie konfiguracje powinny zakończyć się powodzeniem.
12.2. Konfiguracja warstwy JDBC
![]() | ![]() |
Projekt [db2-config-jdbc] konfiguruje warstwę [JDBC] w następującej architekturze testowej:
![]() |
Projekt ten jest analogiczny do projektu konfiguracyjnego [mysql-config-jdbc] warstwy JDBC w ramach SGBD MySQL (patrz punkt 3.3). Przedstawiamy jedynie zmiany:
Plik [pom.xml] importuje sterownik JDBC z pliku 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>
<!-- zmienne zależności ********************************************** -->
<!-- sterownik JDBC dla SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- stałe zależności ********************************************** -->
....
</dependencies>
...
</project>
- wiersze 18–22: sterownik JDBC z pliku DB2;
Druga zmiana dotyczy klasy [ConfigJdbc], która definiuje identyfikatory dostępu do baz danych:
// parametry połączenia
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";
Trzecią zmianą, jaką można wprowadzić, jest zmiana maksymalnej liczby parametrów, które może obsługiwać [PreparedStatement]:
// maksymalna liczba parametrów dla [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Test [JUnitTestPushTheLimits] generuje zlecenia SQL dla 5000 produktów, które z kolei wygenerują pliki [PreparedStatement] zawierające 5000 parametrów. MySQL obsłużył tę wartość. Podobnie test DB2.
Czwartą zmianą jest zmiana nazwy tabeli [ROLES]. Nazwa ta jest bowiem zarezerwowana w tabelach SGBD i DB2. Zmieniono ją zatem na [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. Konfiguracja warstwy JPA OpenJpa
![]() | ![]() |
Projekt [db2-config-jpa-openjpa] konfiguruje warstwę [JPA] architektury testowej:
![]() |
Projekt ten jest analogiczny do projektu konfiguracyjnego [mysql-config-jpa-openjpa] warstwy JPA, OpenJpa oraz SGBD, MySQL (por. punkt 8.3). Oba projekty SGBD wykorzystują adnotację [@GeneratedValue(strategy = GenerationType.IDENTITY)] do generowania kluczy głównych. Należy wprowadzić tylko jedną zmianę. Znajduje się ona w definicji bean’a [jpaVendorAdapter] klasy [ConfigJpa]:
// dostawca JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- wiersz 6: informujemy implementację JPA, że będzie ona współpracować z bazą DB2. Implementacja JPA przejmie wówczas zarówno własne typy danych, jak i implementację SQL, która jest właścicielem tej implementacji SGBD.
Po wprowadzeniu tych zmian uruchomienie konfiguracji [spring-jpa-generic-JUnitTestDao-openjpa] powinno zakończyć się powodzeniem.
![]() | ![]() |
12.4. Konfiguracja warstwy Hibernate o numerze JPA
![]() | ![]() |
Uwaga: należy wykonać polecenie [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
Projekt [db2-config-jpa-hibernate] jest analogiczny do projektu [mysql-config-jpa-hibernate] (punkt 6.3) i zawiera te same modyfikacje, które miały zastosowanie przy przenoszeniu projektu [mysql-config-jpa-openjpa] do projektu [db2-config-jpa-openjpa] (punkt 12.3).
Po wprowadzeniu tych zmian konfiguracja [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] powinna zakończyć się powodzeniem.
12.5. Konfiguracja warstwy JPA EclipseLink
![]() | ![]() |
Uwaga: należy uruchomić [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
Projekt [db2-config-jpa-eclipselink] jest analogiczny do projektu [mysql-config-jpa-eclipselink] (punkt 7.3) i zawiera te same modyfikacje, które miały zastosowanie przy przenoszeniu projektu [mysql-config-jpa-openjpa] do projektu [db2-config-jpa-openjpa] (punkt 12.3).
Po wprowadzeniu tych zmian konfiguracja [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] powinna zakończyć się powodzeniem.































