12. IBM DB2 Express-C 10.5
Wir werden uns nun mit der Portierung der für MySQL durchgeführten Schritte auf DB2 befassen. Beide DBMS verwenden tatsächlich dieselbe Strategie zur Generierung von Primärschlüsseln.
![]() |
12.1. Einrichten der Arbeitsumgebung
12.1.1. Eclipse-Umgebung
Wir werden mit der folgenden Eclipse-Umgebung arbeiten:
![]() |
Die oben aufgeführten DB2-Projekte befinden sich im Ordner [<examples>/spring-database-config\db2\eclipse].
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
12.1.2. Erstellen der Datenbanken
Wie bei Oracle müssen wir den DB2-JDBC-Treiber im lokalen Maven-Repository installieren.
![]() |
Die Datei [install.bat] enthält den folgenden Code:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
wobei [%M2-HOME%] das Maven-Installationsverzeichnis ist (siehe Abschnitt 23.2). Nach dieser Installation kann der DB2-JDBC-Treiber in den [pom.xml]-Dateien über die folgende Abhängigkeit referenziert werden:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
Im weiteren Verlauf dieses Leitfadens werden Verbindungen zu DB2-Datenbanken unter Verwendung der Anmeldedaten [db2admin / db2admin] hergestellt. Starten Sie DB2 und dessen Client [Db2Manager] (siehe Abschnitt 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
Die Datenbank [DBPROD] ist die Datenbank [dbproduits] aus dem vorherigen DBMS. Allerdings erlaubte mir [DB2Manager] nicht, diesen Namen zu verwenden (vielleicht, weil er zu lang war). Nun erstellen wir die Tabelle [PRODUITS] mithilfe der folgenden Eclipse-Laufkonfiguration [generic-create-dbproduits-jpa]:
![]() | ![]() |
Die Ausführung erstellt die Tabelle [PRODUITS] in der Datenbank [DBPROD]:
![]() |
- In [1] oben wurde die Sequenz nicht von [OpenJpa], sondern von DB2 selbst generiert, das sie intern zur Generierung von Primärschlüsseln verwendet;
Führen Sie nun die Konfigurationen aus:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Sie sollten alle erfolgreich sein.
Erstellen wir nun die Datenbank [dbproduitscategories]. Sie wird hier aus den bereits erwähnten Gründen bezüglich der Längenbeschränkungen für Datenbanknamen [DBCAT] heißen. Wiederholen Sie für [DBCAT] den Vorgang, den Sie zum Erstellen von [DBPROD] verwendet haben.
![]() |
Wir werden nun die Tabellen für die Datenbank [DBCAT] in Eclipse unter Verwendung der Konfiguration [generic-create-dbproduitscategories-openjpa] erstellen:
![]() | ![]() |
Diese Ausführung liefert das folgende Ergebnis:
![]() | ![]() |
Sie müssen die Spalte [VERSIONING] der fünf Tabellen so ändern, dass sie den Standardwert 1 enthält:
![]() |
![]() |
Dieser Schritt muss für alle fünf Tabellen durchgeführt werden.
Führen Sie nun die Konfigurationen aus:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa];
Beide sollten erfolgreich sein.
12.2. Konfigurieren der JDBC-Schicht
![]() | ![]() |
Das Projekt [db2-config-jdbc] konfiguriert die [JDBC]-Schicht der folgenden Testarchitektur:
![]() |
Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jdbc] für die JDBC-Schicht des MySQL-DBMS (siehe Abschnitt 3.3). Wir stellen hier nur die Änderungen vor:
Die Datei [pom.xml] importiert den DB2-JDBC-Treiber:
<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>
<!-- dépendances variables ********************************************** -->
<!-- driver JDBC from SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- dépendances constantes ********************************************** -->
....
</dependencies>
...
</project>
- Zeilen 18–22: der DB2-JDBC-Treiber;
Die zweite Änderung betrifft die Klasse [ConfigJdbc], die die Anmeldedaten für den Datenbankzugriff definiert:
// paramètres de connexion
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";
Die dritte Änderung, die vorgenommen werden kann, betrifft die maximale Anzahl von Parametern, die ein [PreparedStatement] unterstützen kann:
// max number of parameters of a [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Der Test [JUnitTestPushTheLimits] generiert SQL-Anweisungen für 5.000 Produkte, wodurch [PreparedStatement]-Objekte mit 5.000 Parametern erzeugt werden. MySQL unterstützte diesen Wert. DB2 ebenfalls.
Die vierte Änderung betrifft den Namen der Tabelle [ROLES]. Dieser Name ist im DB2-DBMS reserviert. Wir haben sie daher in [ROLES_] umbenannt:
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. Konfigurieren der OpenJPA-JPA-Schicht
![]() | ![]() |
Das Projekt [db2-config-jpa-openjpa] konfiguriert die [JPA]-Schicht der Testarchitektur:
![]() |
Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jpa-openjpa] für die OpenJpa-JPA-Schicht des MySQL-DBMS (siehe Abschnitt 8.3). Tatsächlich verwenden beide DBMS die Annotation [@GeneratedValue(strategy = GenerationType.IDENTITY)] zur Generierung von Primärschlüsseln. Es ist nur eine Änderung vorzunehmen. Diese befindet sich in der Definition des [jpaVendorAdapter]-Beans in der [ConfigJpa]-Klasse:
// the provider JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- Zeile 6: Wir teilen der JPA-Implementierung mit, dass sie mit einer DB2-Datenbank arbeiten wird. Die JPA-Implementierung übernimmt dann sowohl die proprietären Datentypen als auch das proprietäre SQL dieses DBMS.
Nach diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-openjpa] erfolgreich sein.
![]() | ![]() |
12.4. Konfigurieren der Hibernate-JPA-Schicht
![]() | ![]() |
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
Das Projekt [db2-config-jpa-hibernate] entspricht dem Projekt [mysql-config-jpa-hibernate] (Abschnitt 6.3) und weist dieselben Anpassungen auf, die bei der Portierung des Projekts [mysql-config-jpa-openjpa] auf das Projekt [db2-config-jpa-openjpa] (Abschnitt 12.3) vorgenommen wurden.
Sobald diese Änderungen vorgenommen wurden, sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.
12.5. Konfigurieren der EclipseLink-JPA-Schicht
![]() | ![]() |
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
Das Projekt [db2-config-jpa-eclipselink] entspricht dem Projekt [mysql-config-jpa-eclipselink] (Abschnitt 7.3) und weist dieselben Änderungen auf, die bei der Portierung des Projekts [mysql-config-jpa-openjpa] auf das Projekt [db2-config-jpa-openjpa] (Abschnitt 12.3) vorgenommen wurden.
Mit diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.































