Skip to content

12. IBM DB2 Express-C 10.5

Wir wenden uns nun der Portierung der mit MySQL durchgeführten Änderungen auf DB2 zu. Die beiden SGBD-Konfigurationen verfolgen nämlich dieselbe Strategie zur Generierung der Primärschlüssel.

12.1. Einrichtung der Arbeitsumgebung

12.1.1. Eclipse-Umgebung

Wir werden mit der folgenden Eclipse-Umgebung arbeiten:

  

Die oben genannten Projekte DB2 befinden sich im Ordner [<exemples>/spring-database-config\db2\eclipse].

Hinweis: Führen Sie „[Alt-F5]“ aus, um alle Maven-Projekte neu zu generieren.

12.1.2. Erstellung der Datenbanken

Wie bereits bei Oracle müssen wir den Treiber JDBC von DB2 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 Treiber JDBC von DB2 in den Dateien [pom.xml] über die folgende Abhängigkeit referenziert werden:


        <dependency>
            <groupId>com.ibm.jdbc</groupId>
            <artifactId>db2jcc4</artifactId>
            <version>1.0</version>
</dependency>

Im weiteren Verlauf erfolgt die Verbindung zu den Datenbanken DB2 mit den Anmeldedaten [db2admin / db2admin]. Starten Sie DB2 und dessen Client [Db2Manager] (siehe Abschnitt 23.8).

  

Die Datenbank [DBPROD] ist die Datenbank [dbproduits] der vorherigen SGBD. Aber [DB2Manager] hat mir nicht erlaubt, diesen Namen zu verwenden (vielleicht war er ihm zu lang). Nun erstellen wir die Tabelle [PRODUITS] mit der folgenden Eclipse-Ausführungskonfiguration [generic-create-dbproduits-jpa]:

Der Lauf legt die Tabelle [PRODUITS] in der Datenbank [DBPROD] an:

  • In [1] (siehe oben) wurde die Sequenz nicht von [OpenJpa] generiert, sondern von DB2 selbst, das sie intern zur Generierung von Primärschlüsseln verwendet;

Führen Sie nun die folgenden Konfigurationen aus:

  • [spring-jdbc-generic-01.IntroJdbc01];
  • [spring-jdbc-generic-01.IntroJdbc02] ;
  • [spring-jdbc-generic-03.JUnitTestDao1] ;
  • [spring-jdbc-generic-03.JUnitTestDao2] ;

Sie müssen alle erfolgreich sein.

Erstellen wir nun die Datenbank [dbproduitscategories]. Sie wird hier aus den bereits genannten Gründen der Beschränkung der Datenbanknamenlänge als [DBCAT] bezeichnet. Wiederholen Sie für [DBCAT] den Vorgang, der zur Erstellung von [DBPROD] durchgeführt wurde.

  

Wir erstellen nun die Tabellen der Datenbank [DBCAT] aus Eclipse heraus mit der Konfiguration [generic-create-dbproduitscategories-openjpa]:

Dieser Lauf liefert das folgende Ergebnis:

 

Die Spalte [VERSIONING] der fünf Tabellen muss so geändert werden, dass sie den Standardwert 1 erhält:

 
 

Dieser Vorgang 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 müssen erfolgreich abgeschlossen werden.

12.2. Konfiguration der Ebene JDBC

 

Das Projekt [db2-config-jdbc] konfiguriert die Schicht [JDBC] der folgenden Testarchitektur:

Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jdbc] der Schicht JDBC des SGBD MySQL (siehe Abschnitt 3.3). Wir stellen hier nur die Änderungen vor:

Die Datei [pom.xml] importiert den Treiber JDBC aus 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>
        <!-- Variable Abhängigkeiten ********************************************** -->
        <!-- Treiber JDBC des SGBD -->
        <dependency>
            <groupId>com.ibm.jdbc</groupId>
            <artifactId>db2jcc4</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- konstante Abhängigkeiten ********************************************** -->
....
    </dependencies>

...
</project>
  • Zeilen 18–22: der Treiber JDBC aus DB2;

Die zweite Änderung befindet sich in der Klasse [ConfigJdbc], die die Zugangs-IDs für die Datenbanken definiert:


    // Verbindungsparameter
    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:


    // Maximale Anzahl von Parametern eines [PreparedStatement]
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;

Der Test [JUnitTestPushTheLimits] generiert Aufträge SQL für 5.000 Produkte, die wiederum [PreparedStatement] mit 5.000 Parametern erzeugen. MySQL hatte diesen Wert bereits unterstützt. DB2 ebenfalls.

Die vierte Änderung betrifft den Namen der Tabelle [ROLES]. Dieser Name ist nämlich in den Tabellen SGBD und DB2 bereits 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. Konfiguration der Ebene JPA OpenJpa

 

Das Projekt [db2-config-jpa-openjpa] konfiguriert die Schicht [JPA] der Testarchitektur:

Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jpa-openjpa] der Schicht JPA OpenJpa des SGBD MySQL (siehe Abschnitt 8.3). Tatsächlich verwenden beide SGBD die Annotation [@GeneratedValue(strategy = GenerationType.IDENTITY)] zur Generierung der Primärschlüssel. Es ist nur eine Änderung vorzunehmen. Diese befindet sich in der Definition des Beans [jpaVendorAdapter] der Klasse [ConfigJpa]:


    // der Provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.DB2);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • Zeile 6: Der Implementierung JPA wird mitgeteilt, dass sie mit einer Datenbank DB2 arbeiten wird. Die Implementierung JPA übernimmt dann sowohl die proprietären Datentypen als auch die proprietäre SQL dieser SGBD.

Nach diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-openjpa] erfolgreich sein.

12.4. Konfiguration der Hibernate-Schicht JPA

 

Hinweis: Führen Sie den Befehl [Alt-F5] aus, 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 Änderungen auf, die bei der Portierung von [mysql-config-jpa-openjpa] auf das Projekt [db2-config-jpa-openjpa] (Abschnitt 12.3) vorgenommen wurden.

Nach Durchführung dieser Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.

 

Hinweis: Führen Sie [Alt-F5] aus, um alle Maven-Projekte neu zu generieren.

Das Projekt [db2-config-jpa-eclipselink] entspricht dem Projekt [mysql-config-jpa-eclipselink] (Absatz 7.3) und weist dieselben Änderungen auf, die bei der Portierung von [mysql-config-jpa-openjpa] auf das Projekt [db2-config-jpa-openjpa] (Absatz 12.3) vorgenommen wurden.

Nach Durchführung dieser Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.