12. IBM DB2 Express-C 10.5
ننتقل الآن إلى نقل ما تم تنفيذه في MySQL إلى DB2. فكل من SGBD وMySQL يتبعان نفس استراتيجية إنشاء المفاتيح الأولية.
![]() |
12.1. إعداد بيئة العمل
12.1.1. بيئة Eclipse
سنعمل باستخدام بيئة Eclipse التالية:
![]() |
ستجد المشاريع المذكورة أعلاه (DB2) في المجلد [<exemples>/spring-database-config\db2\eclipse].
ملاحظة: قم بتنفيذ الأمر [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
12.1.2. إنشاء قواعد البيانات
كما حدث مع Oracle، سيتعين علينا تثبيت برنامج التشغيل JDBC الخاص بـ DB2 في مستودع Maven المحلي.
![]() |
يحتوي الملف [install.bat] على الكود التالي:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
حيث [%M2-HOME%] هو مجلد تثبيت Maven (انظر الفقرة 23.2). بعد هذا التثبيت، يمكن الإشارة إلى برنامج التشغيل JDBC الخاص بـ DB2 في ملفات [pom.xml] من خلال التبعية التالية:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
في جميع الخطوات التالية، يتم الاتصال بقواعد البيانات DB2 باستخدام بيانات اعتماد [db2admin / db2admin]. قم بتشغيل DB2 وعميله [Db2Manager] (انظر الفقرة 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
القاعدة [DBPROD] هي القاعدة [dbproduits] التي سبقتها SGBD. لكن [DB2Manager] لم يسمح لي باستخدام هذا الاسم (ربما لأنه طويل جدًا بالنسبة له). والآن نقوم بإنشاء الجدول [PRODUITS] باستخدام إعدادات تشغيل Eclipse التالية [generic-create-dbproduits-jpa]:
![]() | ![]() |
يؤدي التنفيذ إلى إنشاء الجدول [PRODUITS] في قاعدة البيانات [DBPROD]:
![]() |
- في [1]، أعلاه، لم يتم إنشاء التسلسل بواسطة [OpenJpa] بل بواسطة DB2 نفسه الذي يستخدمه داخليًا لإنشاء مفاتيح أساسية؛
الآن، قم بتنفيذ الإعدادات التالية:
- [spring-jdbc-generic-01.IntroJdbc01]؛
- [spring-jdbc-generic-01.IntroJdbc02]؛
- [spring-jdbc-generic-03.JUnitTestDao1]؛
- [spring-jdbc-generic-03.JUnitTestDao2]؛
يجب أن تنجح جميعها.
لنقم الآن بإنشاء قاعدة البيانات [dbproduitscategories]. سيُشار إليها هنا باسم [DBCAT] للأسباب التي سبق ذكرها المتعلقة بالقيود المفروضة على طول أسماء قواعد البيانات. كرر الإجراء الذي تم تنفيذه لإنشاء [DBPROD] مع [DBCAT].
![]() |
نقوم الآن بإنشاء جداول قاعدة البيانات [DBCAT] من Eclipse باستخدام التكوين [generic-create-dbproduitscategories-openjpa]:
![]() | ![]() |
يُنتج هذا التنفيذ النتيجة التالية:
![]() | ![]() |
يجب تعديل العمود [VERSIONING] في الجداول الخمس بحيث تكون القيمة الافتراضية له هي 1:
![]() |
![]() |
يجب إجراء هذه العملية على الجداول الخمسة.
الآن، قم بتنفيذ الإعدادات التالية:
- [spring-jdbc-generic-04.JUnitTestDao]؛
- [spring-jpa-generic-JUnitTestDao-openjpa]؛
يجب أن تنجح كلتا الإعدادات.
12.2. إعداد الطبقة JDBC
![]() | ![]() |
يقوم المشروع [db2-config-jdbc] بتكوين الطبقة [JDBC] للبنية الاختبارية التالية:
![]() |
هذا المشروع مشابه لمشروع التهيئة [mysql-config-jdbc] للطبقة JDBC التابعة لـ SGBD MySQL (انظر الفقرة 3.3). ونعرض هنا التعديلات فقط:
يستورد الملف [pom.xml] برنامج التشغيل JDBC من 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>
<!-- التبعيات المتغيرة ********************************************** -->
<!-- برنامج التشغيل JDBC الخاص بـ SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- التبعيات الثابتة ********************************************** -->
....
</dependencies>
...
</project>
- الأسطر 18-22: برنامج التشغيل JDBC من DB2؛
التعديل الثاني موجود في الفئة [ConfigJdbc] التي تحدد معرّفات الوصول إلى قواعد البيانات:
// معلمات الاتصال
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";
التعديل الثالث الذي يمكن إجراؤه هو تعديل الحد الأقصى لعدد المعلمات التي يمكن أن يدعمها [PreparedStatement]:
// الحد الأقصى لعدد المعلمات في [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
يُنتج الاختبار [JUnitTestPushTheLimits] أوامر SQL على 5000 منتج، والتي ستُنتج بدورها ملفات [PreparedStatement] تحتوي على 5000 معلمة. وقد دعم MySQL هذه القيمة. وكذلك الأمر بالنسبة لـ DB2.
التعديل الرابع يتعلق باسم الجدول [ROLES]. فهذا الاسم محجوز بالفعل في SGBD وDB2. لذا تم تغيير اسمه إلى [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. تكوين الطبقة JPA OpenJpa
![]() | ![]() |
يقوم المشروع [db2-config-jpa-openjpa] بتكوين الطبقة [JPA] في بنية الاختبارات:
![]() |
هذا المشروع مشابه لمشروع التهيئة [mysql-config-jpa-openjpa] للطبقة JPA OpenJpa التابعة لـ SGBD MySQL (انظر الفقرة 8.3). في الواقع، يستخدم كلا المشروعين SGBD التعليق التوضيحي [@GeneratedValue(strategy = GenerationType.IDENTITY)] لتوليد المفاتيح الأولية. لا يوجد سوى تعديل واحد يجب إجراؤه. وهو موجود في تعريف «البيان» [jpaVendorAdapter] الخاص بالفئة [ConfigJpa]:
// المزود JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- السطر 6: يتم إعلام التنفيذ JPA بأنه سيعمل مع قاعدة بيانات DB2. وبالتالي، ستتبنى عملية التنفيذ JPA أنواع البيانات الخاصة و SQL المالك لهذا SGBD.
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-openjpa].
![]() | ![]() |
12.4. تكوين طبقة Hibernate JPA
![]() | ![]() |
ملاحظة: قم بتنفيذ الأمر [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
مشروع [db2-config-jpa-hibernate] مشابه لمشروع [mysql-config-jpa-hibernate] (الفقرة 6.3) مع نفس التعديلات التي استُخدمت في تحويل [mysql-config-jpa-openjpa] إلى مشروع [db2-config-jpa-openjpa] (الفقرة 12.3).
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].
12.5. تكوين الطبقة JPA EclipseLink
![]() | ![]() |
ملاحظة: قم بتنفيذ [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
المشروع [db2-config-jpa-eclipselink] مشابه للمشروع [mysql-config-jpa-eclipselink] (الفقرة 7.3) مع نفس التعديلات التي استند إليها نقل المشروع [mysql-config-jpa-openjpa] إلى المشروع [db2-config-jpa-openjpa] (الفقرة 12.3).
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].































