Skip to content

11. PostgreSQL 9.4

Wir werden uns nun mit der Portierung der für Oracle durchgeführten Maßnahmen auf PostgreSQL 9.4 befassen.

11.1. Einrichten der Arbeitsumgebung

11.1.1. Eclipse-Umgebung

Wir werden mit der folgenden Eclipse-Umgebung arbeiten:

  

Die oben aufgeführten PostgreSQL-Projekte befinden sich im Ordner [<examples>/spring-database-config\postgresql\eclipse].

Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.

11.1.2. Erstellen der Datenbanken

Im weiteren Verlauf dieses Leitfadens werden Verbindungen zu PostgreSQL-Datenbanken unter Verwendung der Anmeldedaten [postgres / postgres] hergestellt. Starten Sie PostgreSQL und dessen Client [PgManager] (siehe Abschnitt 23.7).

  • Laden Sie in [1] das SQL-Skript [<examples>\spring-database-config\postgresql\databases\dbproduits.sql];
  • In [2] verwenden die JPA-Schichten, genau wie bei Oracle, Sequenzen zur Generierung von Primärschlüsseln. Hier generiert die Sequenz [products_sequence] die Primärschlüssel für die Tabelle [products];

Führen Sie nun die Konfigurationen aus:

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

Sie sollten alle erfolgreich sein.

Erstellen wir nun die Datenbank [dbproduitscategories]. Wiederholen Sie für [dbproduitscategories] den Vorgang, den Sie zum Erstellen von [dbproduits] verwendet haben. Das zu ladende SQL-Skript befindet sich unter [<examples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql] ;

  

Führen Sie nun die Tests aus:

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

Beide sollten erfolgreich sein.

11.2. Konfigurieren der JDBC-Schicht

 

Das Projekt [postgresql-config-jdbc] konfiguriert die [JDBC]-Schicht der folgenden Testarchitektur:

Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jdbc] für die JDBC-Schicht des MySQL-DBMS (siehe Abschnitt 3.3). Wir stellen hier nur die Änderungen vor:

Die Datei [pom.xml] importiert den PostgreSQL-JDBC-Treiber:


<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>
  • Zeilen 18–22: der PostgreSQL-JDBC-Treiber;

Die zweite Änderung betrifft die Klasse [ConfigJdbc], die die Datenbank-Anmeldedaten definiert:


    // 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";

Die dritte Änderung, die vorgenommen werden kann, betrifft die maximale Anzahl von Parametern, die ein [PreparedStatement] unterstützen kann:


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

Der Test [JUnitTestPushTheLimits] generiert SQL-Anweisungen für 5.000 Produkte, wodurch [PreparedStatement]-Objekte mit 5.000 Parametern erzeugt werden. MySQL unterstützte diesen Wert. PostgreSQL ebenfalls.

Die vierte Änderung ist überraschender:


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

Die Namen der [ID]-Spalten in den Tabellen [CATEGORIES] und [PRODUCTS] müssen im Projekt [spring-jdbc-04] in Kleinbuchstaben geschrieben sein. Andernfalls kommt es zu einem Absturz bei Anweisungen, die die folgenden beiden Beans aus diesem Projekt verwenden:


    // 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. Konfiguration der OpenJPA-JPA-Schicht

 

Das Projekt [postgresql-config-jpa-openjpa] konfiguriert die [JPA]-Schicht der Testarchitektur:

Das Projekt entspricht dem Konfigurationsprojekt [oracle-config-jpa-openjpa] für die OpenJpa-JPA-Schicht des Oracle-DBMS (siehe Abschnitt 10.5). Tatsächlich verwenden beide DBMS Sequenzen zur Generierung von Primärschlüsseln. Es ist nur eine Änderung vorzunehmen. Diese betrifft die Definition des Beans [jpaVendorAdapter] in der Klasse [ConfigJpa]:


    // the provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • Zeile 6: Wir teilen der JPA-Implementierung mit, dass sie mit einer PostgreSQL-Datenbank arbeiten wird. Die JPA-Implementierung übernimmt dann die proprietären Datentypen und die SQL dieses DBMS.

Nach diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-openjpa] erfolgreich sein.

11.4. Konfiguration der Hibernate-JPA-Schicht

 

Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.

Das Projekt [postgresql-config-jpa-hibernate] entspricht dem Projekt [oracle-config-jpa-hibernate] (Abschnitt 10.4) und weist dieselben Änderungen auf, die zur Portierung des Projekts [oracle-config-jpa-openjpa] auf das Projekt [postgresql-config-jpa-openjpa] (Abschnitt 11.3) verwendet wurden.

Mit diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.

 

Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.

Das Projekt [postgresql-config-jpa-eclipselink] entspricht dem Projekt [oracle-config-jpa-eclipselink] (Abschnitt 10.3) und weist dieselben Änderungen auf, die zur Portierung des Projekts [oracle-config-jpa-openjpa] auf das Projekt [postgresql-config-jpa-openjpa] (Abschnitt 11.3) verwendet wurden.

Mit diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.