Skip to content

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.

 

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.