12. IBM DB2 Express-C 10.5
Şimdi, MySQL ile yapılanların DB2'e taşınmasına geçiyoruz. Aslında, her iki SGBD de aynı birincil anahtar oluşturma stratejisine sahiptir.
![]() |
12.1. Çalışma ortamının kurulması
12.1.1. Eclipse ortamı
Aşağıdaki Eclipse ortamında çalışacağız:
![]() |
Yukarıdaki DB2 projeleri, [<exemples>/spring-database-config\db2\eclipse] klasöründe bulunur.
Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.
12.1.2. Veritabanlarının Oluşturulması
Oracle'da olduğu gibi, DB2 sürücüsünü yerel Maven deposuna yüklememiz gerekecektir.
![]() |
[install.bat] dosyası aşağıdaki kodu içerir:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
burada [%M2-HOME%], Maven kurulum klasörüdür (bkz. paragraf 23.2). Bu kurulumdan sonra, JDBC sürücüsü, DB2 dosyasında aşağıdaki bağımlılık ile referanslanabilir:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
Bundan sonra, DB2 veritabanlarına bağlantı, [db2admin / db2admin] kimlik bilgileriyle yapılır. DB2'i ve istemcisi [Db2Manager]'i başlatın (bkz. paragraf 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
[DBPROD] veritabanı, önceki SGBD veritabanının [dbproduits] versiyonudur. Ancak [DB2Manager] bu adı kullanmama izin vermedi (belki de onun için çok uzundu). Şimdi, aşağıdaki Eclipse çalıştırma yapılandırmasıyla [PRODUITS] tablosunu oluşturuyoruz: [generic-create-dbproduits-jpa]:
![]() | ![]() |
Bu yürütme, [DBPROD] veritabanında [PRODUITS] tablosunu oluşturur:
![]() |
- Yukarıdaki [1]'te, sıra [OpenJpa] tarafından değil, birincil anahtarları oluşturmak için bunu dahili olarak kullanan DB2 tarafından oluşturulmuştur;
Şimdi şu yapılandırmaları çalıştırın:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Hepsi başarılı olmalıdır.
Şimdi [dbproduitscategories] tabanını oluşturalım. Taban adlarının uzunluğuna ilişkin daha önce belirtilen kısıtlamalar nedeniyle, bu taban burada [DBCAT] olarak adlandırılacaktır. [DBPROD]'i oluşturmak için uygulanan prosedürü, [DBCAT] için tekrarlayın.
![]() |
Şimdi Eclipse'ten [generic-create-dbproduitscategories-openjpa] yapılandırmasını kullanarak [DBCAT] veritabanının tablolarını oluşturuyoruz:
![]() | ![]() |
Bu işlem şu sonucu verir:
![]() | ![]() |
Beş tablonun [VERSIONING] sütununu, varsayılan değeri 1 olacak şekilde değiştirmek gerekir:
![]() |
![]() |
Bu işlem beş tablo için de yapılmalıdır.
Şimdi, aşağıdaki yapılandırmaları uygulayın:
- [spring-jdbc-generic-04.JUnitTestDao] ;
- [spring-jpa-generic-JUnitTestDao-openjpa] ;
Her ikisi de başarılı olmalıdır.
12.2. JDBC katmanının yapılandırılması
![]() | ![]() |
[db2-config-jdbc] projesi, aşağıdaki test mimarisinin [JDBC] katmanını yapılandırır:
![]() |
Bu proje, SGBD MySQL'in JDBC katmanındaki [mysql-config-jdbc] yapılandırma projesine benzemektedir (bkz. paragraf 3.3). Burada yalnızca değişiklikleri sunuyoruz:
[pom.xml] dosyası, DB2'ten JDBC sürücüsünü içe aktarıyor:
<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>
<!-- değişken bağımlılıklar ********************************************** -->
<!-- SGBD'in JDBC sürücüsü -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- sabit bağımlılıklar ********************************************** -->
....
</dependencies>
...
</project>
- 18-22. satırlar: DB2 dosyasından JDBC sürücüsü;
İkinci değişiklik, veritabanlarına erişim kimliklerini tanımlayan [ConfigJdbc] sınıfındadır:
// bağlantı parametreleri
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";
Yapılabilecek üçüncü değişiklik, bir [PreparedStatement]'in destekleyebileceği maksimum parametre sayısıyla ilgilidir:
// bir [PreparedStatement]'in maksimum parametre sayısı
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
[JUnitTestPushTheLimits] testi, 5000 ürün üzerinde SQL siparişleri oluşturur ve bu siparişler 5000 parametre içeren [PreparedStatement]'leri oluşturur. MySQL bu değeri desteklemişti. DB2 de desteklemişti.
Dördüncü değişiklik, [ROLES] tablosunun adıyla ilgilidir. Aslında bu ad, SGBD ve DB2'te ayrılmıştır. Bu nedenle, tablo [ROLES_] olarak yeniden adlandırılmıştır:
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 ve OpenJpa katmanlarının yapılandırılması
![]() | ![]() |
[db2-config-jpa-openjpa] projesi, test mimarisinin [JPA] katmanını yapılandırır:
![]() |
Bu proje, SGBD MySQL katmanındaki JPA OpenJpa katmanının [mysql-config-jpa-openjpa] yapılandırma projesine benzemektedir (bkz. paragraf 8.3). Nitekim, her iki SGBD de birincil anahtarları oluşturmak için [@GeneratedValue(strategy = GenerationType.IDENTITY)] ek açıklaması kullanmaktadır. Yapılması gereken tek bir değişiklik var. Bu değişiklik, [ConfigJpa] sınıfının [jpaVendorAdapter] bean tanımında yer almaktadır:
// JPA sağlayıcısı
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- 6. satır: JPA uygulamasına, DB2 veritabanıyla çalışacağı belirtilir. JPA uygulaması, bu SGBD'in sahip olduğu özel veri türlerini ve SQL'i de benimseyecektir.
Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-openjpa] yapılandırmasının yürütülmesi başarılı olmalıdır.
![]() | ![]() |
12.4. JPA Hibernate katmanının yapılandırılması
![]() | ![]() |
Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.
[db2-config-jpa-hibernate] projesi, [mysql-config-jpa-hibernate] projesine (6.3. paragraf) benzerdir ve [mysql-config-jpa-openjpa] projesinin [db2-config-jpa-openjpa] projesine taşınmasında uygulanan değişikliklerin aynısı bu projede de yapılmıştır (12.3. paragraf) uygulanan değişiklikler de bu projede yapılmıştır.
Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] yapılandırmasının çalıştırılması başarılı olmalıdır.
12.5. JPA katmanının yapılandırılması EclipseLink
![]() | ![]() |
Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.
[db2-config-jpa-eclipselink] projesi, [mysql-config-jpa-eclipselink] projesine (7.3. paragraf) ve [mysql-config-jpa-openjpa] projesinin [db2-config-jpa-openjpa] projesine taşınmasında (12.3. paragraf) uygulanan değişikliklerin aynısı bu projede de yapılmıştır.
Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] yapılandırmasının çalıştırılması başarılı olmalıdır.































