12. IBM DB2 Express-C 10.5
We gaan nu over tot de overzetting naar DB2 van wat er met MySQL is gedaan. De twee SGBD-configuraties hebben namelijk dezelfde strategie voor het genereren van primaire sleutels.
![]() |
12.1. Het opzetten van de werkomgeving
12.1.1. Eclipse-omgeving
We gaan werken met de volgende Eclipse-omgeving:
![]() |
De bovenstaande projecten DB2 zijn te vinden in de map [<exemples>/spring-database-config\db2\eclipse].
Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.
12.1.2. Databases genereren
Net als bij Oracle moeten we de driver JDBC van DB2 in de lokale Maven-repository installeren.
![]() |
Het bestand [install.bat] bevat de volgende code:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
waarbij [%M2-HOME%] de installatiemap van Maven is (zie paragraaf 23.2). Na deze installatie kan de driver JDBC van DB2 in de bestanden [pom.xml] worden aangeroepen via de volgende afhankelijkheid:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
Vanaf nu wordt de verbinding met de DB2-databases tot stand gebracht met de inloggegevens van [db2admin / db2admin]. Start DB2 en de bijbehorende client [Db2Manager] (zie paragraaf 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
De database [DBPROD] is de database [dbproduits] van de voorgaande SGBD. Maar [DB2Manager] stond me niet toe deze naam te gebruiken (misschien te lang voor hem). Nu maken we de tabel [PRODUITS] aan met de volgende Eclipse-uitvoeringsconfiguratie [generic-create-dbproduits-jpa]:
![]() | ![]() |
De uitvoering maakt de tabel [PRODUITS] aan in de database [DBPROD]:
![]() |
- in [1], hierboven, is de sequentie niet gegenereerd door [OpenJpa], maar wel door DB2 zelf, dat deze intern gebruikt om primaire sleutels te genereren;
Voer nu de configuraties uit:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Ze moeten allemaal slagen.
Laten we nu de database [dbproduitscategories] aanmaken. Deze zal hier [DBCAT] worden genoemd vanwege de reeds genoemde beperking op de lengte van databasenamen. Herhaal voor [DBCAT] de procedure die is uitgevoerd om [DBPROD] aan te maken.
![]() |
We maken nu de tabellen van de database [DBCAT] aan vanuit Eclipse met de configuratie [generic-create-dbproduitscategories-openjpa]:
![]() | ![]() |
Deze uitvoering levert het volgende resultaat op:
![]() | ![]() |
De kolom [VERSIONING] van de vijf tabellen moet worden aangepast, zodat deze de standaardwaarde 1 krijgt:
![]() |
![]() |
Deze bewerking moet voor alle vijf tabellen worden uitgevoerd.
Voer nu de configuraties uit:
- [spring-jdbc-generic-04.JUnitTestDao] ;
- [spring-jpa-generic-JUnitTestDao-openjpa] ;
Ze moeten allebei slagen.
12.2. Configuratie van de laag JDBC
![]() | ![]() |
Het project [db2-config-jdbc] configureert de laag [JDBC] van de volgende testarchitectuur:
![]() |
Het project is vergelijkbaar met het configuratieproject [mysql-config-jdbc] van de laag JDBC van SGBD MySQL (zie paragraaf 3.3). We geven hier alleen de wijzigingen weer:
Het bestand [pom.xml] importeert de driver JDBC uit 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>
<!-- variabele afhankelijkheden ********************************************** -->
<!-- stuurprogramma JDBC van SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- constante afhankelijkheden ********************************************** -->
....
</dependencies>
...
</project>
- regels 18-22: de driver JDBC uit DB2;
De tweede wijziging bevindt zich in de klasse [ConfigJdbc], die de toegangsgegevens voor de databases definieert:
// verbindingsparameters
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";
De derde wijziging die kan worden aangebracht, betreft het maximale aantal parameters dat een [PreparedStatement] kan ondersteunen:
// maximaal aantal parameters van een [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
De test [JUnitTestPushTheLimits] genereert opdrachten SQL voor 5000 producten, die op hun beurt [PreparedStatement] met 5000 parameters zullen genereren. MySQL ondersteunde deze waarde. DB2 eveneens.
De vierde wijziging betreft de naam van de tabel [ROLES]. Deze naam is namelijk al gereserveerd in de tabellen SGBD en DB2. We hebben de tabel daarom hernoemd naar [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. Configuratie van de laag JPA OpenJpa
![]() | ![]() |
Het project [db2-config-jpa-openjpa] configureert de laag [JPA] van de testarchitectuur:
![]() |
Het project is analoog aan het configuratieproject [mysql-config-jpa-openjpa] van de laag JPA OpenJpa van de SGBD MySQL (zie paragraaf 8.3). Beide SGBD-projecten gebruiken namelijk de annotatie [@GeneratedValue(strategy = GenerationType.IDENTITY)] om de primaire sleutels te genereren. Er hoeft slechts één wijziging te worden aangebracht. Deze bevindt zich in de definitie van de bean [jpaVendorAdapter] van de klasse [ConfigJpa]:
// de provider JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- regel 6: de implementatie JPA wordt geïnformeerd dat deze met een database DB2 gaat werken. De implementatie JPA neemt vervolgens zowel de eigen datatypes als de eigen SQL van deze SGBD over.
Zodra deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-openjpa] moeten slagen.
![]() | ![]() |
12.4. Configuratie van de Hibernate-laag JPA
![]() | ![]() |
Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.
Het project [db2-config-jpa-hibernate] is vergelijkbaar met het project [mysql-config-jpa-hibernate] (paragraaf 6.3) met dezelfde wijzigingen die ten grondslag lagen aan de porting van [mysql-config-jpa-openjpa] naar het project [db2-config-jpa-openjpa] (paragraaf 12.3).
Als deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] moeten slagen.
12.5. Configuratie van de laag JPA EclipseLink
![]() | ![]() |
Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.
Het project [db2-config-jpa-eclipselink] is vergelijkbaar met het project [mysql-config-jpa-eclipselink] (paragraaf 7.3) met dezelfde aanpassingen die zijn doorgevoerd bij de overzetting van [mysql-config-jpa-openjpa] naar het project [db2-config-jpa-openjpa] (paragraaf 12.3).
Als deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] moeten slagen.































