Skip to content

11. PostgreSQL 9.4

سنناقش الآن عملية الترحيل إلى PostgreSQL 9.4 لما تم تنفيذه مع Oracle.

11.1. إعداد بيئة العمل

11.1.1. بيئة Eclipse

سنعمل باستخدام بيئة Eclipse التالية:

  

يمكن العثور على مشاريع PostgreSQL المذكورة أعلاه في المجلد [<examples>/spring-database-config\postgresql\eclipse].

ملاحظة: اضغط على [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.

11.1.2. إنشاء قواعد البيانات

في بقية هذا الدليل، تتم الاتصالات بقواعد بيانات PostgreSQL باستخدام بيانات الاعتماد [postgres / postgres]. قم بتشغيل PostgreSQL وعميله [PgManager] (انظر القسم 23.7).

  • في [1]، قم بتحميل البرنامج النصي SQL [<examples>\spring-database-config\postgresql\databases\dbproduits.sql
  • في [2]، كما هو الحال مع Oracle، تستخدم طبقات JPA التسلسلات لإنشاء المفاتيح الأساسية. هنا، يقوم التسلسل [products_sequence] بإنشاء المفاتيح الأساسية لجدول [products

الآن، قم بتشغيل التكوينات:

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

يجب أن تنجح جميعها.

الآن دعونا ننشئ قاعدة البيانات [dbproduitscategories]. كرر الإجراء المستخدم لإنشاء [dbproduits] لـ [dbproduitscategories]. يوجد نص SQL المطلوب تحميله في [<examples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql] ;

  

الآن، قم بتشغيل الاختبارات:

  • [spring-jdbc-generic-04.JUnitTestDao];
  • [spring-jpa-generic-JUnitTestDao-openjpa];

يجب أن ينجح كلاهما.

11.2. تكوين طبقة JDBC

 

يقوم مشروع [postgresql-config-jdbc] بتكوين طبقة [JDBC] في بنية الاختبار التالية:

يشبه هذا المشروع مشروع التكوين [mysql-config-jdbc] الخاص بطبقة JDBC لنظام إدارة قواعد البيانات MySQL (انظر القسم 3.3). ونعرض هنا التغييرات فقط:

يستورد ملف [pom.xml] برنامج تشغيل PostgreSQL JDBC:


<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>
        <!-- dépendances variables ********************************************** -->
        <!-- driver JDBC from SGBD -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>        
      <!-- dépendances constantes ********************************************** -->
        ...
    </dependencies>
...
</project>
  • الأسطر 18–22: برنامج تشغيل JDBC لـ PostgreSQL؛

التغيير الثاني في فئة [ConfigJdbc]، التي تحدد بيانات اعتماد قاعدة البيانات:


    // paramètres de connexion
    public final static String DRIVER_CLASSNAME = "org.postgresql.Driver";
    public final static String URL_DBPRODUITS = "jdbc:postgresql:dbproduits";
    public final static String USER_DBPRODUITS = "postgres";
    public final static String PASSWD_DBPRODUITS = "postgres";
    public final static String URL_DBPRODUITSCATEGORIES = "jdbc:postgresql:dbproduitscategories";
    public final static String USER_DBPRODUITSCATEGORIES = "postgres";
public final static String PASSWD_DBPRODUITSCATEGORIES = "postgres";

التعديل الثالث الذي يمكن إجراؤه هو على الحد الأقصى لعدد المعلمات التي يمكن أن يدعمها [PreparedStatement]:


    // max number of parameters of a [PreparedStatement]
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;

يُنشئ اختبار [JUnitTestPushTheLimits] عبارات SQL لـ 5,000 منتج، مما سيؤدي إلى إنشاء كائنات [PreparedStatement] تحتوي على 5,000 معلمة. وقد دعم MySQL هذه القيمة. كما دعمها PostgreSQL أيضًا.

التغيير الرابع أكثر إثارة للدهشة:


public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";    

يجب أن تكون أسماء أعمدة [ID] في الجدولين [CATEGORIES] و [PRODUCTS] مكتوبة بأحرف صغيرة في مشروع [spring-jdbc-04]. وإلا، سيحدث تعطل في العبارات التي تستخدم الفاصوليتين التاليتين من هذا المشروع:


    // product insertion
    @Bean
    public SimpleJdbcInsert simpleJdbcInsertProduit(DataSource dataSource) {
        return new SimpleJdbcInsert(dataSource)
                .withTableName(ConfigJdbc.TAB_PRODUITS)
                .usingGeneratedKeyColumns(ConfigJdbc.TAB_PRODUITS_ID)
                .usingColumns(ConfigJdbc.TAB_PRODUITS_NOM, ConfigJdbc.TAB_PRODUITS_PRIX, ConfigJdbc.TAB_PRODUITS_DESCRIPTION,
                        ConfigJdbc.TAB_PRODUITS_CATEGORIE_ID);
    }
 
    // insertion category
    @Bean
    public SimpleJdbcInsert simpleJdbcInsertCategorie(DataSource dataSource) {
        return new SimpleJdbcInsert(dataSource).withTableName(ConfigJdbc.TAB_CATEGORIES)
                .usingGeneratedKeyColumns(ConfigJdbc.TAB_CATEGORIES_ID)
                .usingColumns(ConfigJdbc.TAB_CATEGORIES_NOM);
}

11.3. تكوين طبقة OpenJPA JPA

 

يقوم مشروع [postgresql-config-jpa-openjpa] بتكوين طبقة [JPA] في بنية الاختبار:

يشبه هذا المشروع مشروع التكوين [oracle-config-jpa-openjpa] الخاص بطبقة OpenJpa JPA لنظام إدارة قواعد البيانات Oracle (انظر القسم 10.5). في الواقع، يستخدم كلا نظامي إدارة قواعد البيانات التسلسلات لإنشاء المفاتيح الأساسية. هناك تغيير واحد فقط يجب إجراؤه. وهو في تعريف حبة [jpaVendorAdapter] في فئة [ConfigJpa]:


    // the provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • السطر 6: نخبر تطبيق JPA أنه سيعمل مع قاعدة بيانات PostgreSQL. سيقوم تطبيق JPA بعد ذلك بتبني أنواع البيانات الخاصة ولسان SQL الخاص بنظام إدارة قواعد البيانات هذا.

بعد إجراء هذه التغييرات، من المفترض أن ينجح تشغيل تكوين [spring-jpa-generic-JUnitTestDao-openjpa].

11.4. تكوين طبقة Hibernate JPA

 

ملاحظة: اضغط على [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.

مشروع [postgresql-config-jpa-hibernate] مشابه لمشروع [oracle-config-jpa-hibernate] (القسم 10.4) مع نفس التعديلات التي تم استخدامها لنقل مشروع [oracle-config-jpa-openjpa] إلى مشروع [postgresql-config-jpa-openjpa] (القسم 11.3).

مع تطبيق هذه التعديلات، من المفترض أن ينجح تنفيذ تكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].

 

ملاحظة: اضغط على [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.

مشروع [postgresql-config-jpa-eclipselink] مشابه لمشروع [oracle-config-jpa-eclipselink] (القسم 10.3) مع نفس التعديلات التي استُخدمت لنقل مشروع [oracle-config-jpa-openjpa] إلى مشروع [postgresql-config-jpa-openjpa] (القسم 11.3).

مع تطبيق هذه التعديلات، من المفترض أن ينجح تنفيذ تكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].