11. PostgreSQL 9.4
Passiamo ora al porting su PostgreSQL 9.4 di quanto è stato realizzato con Oracle.
![]() |
11.1. Configurazione dell'ambiente di lavoro
11.1.1. Ambiente Eclipse
Lavoreremo con il seguente ambiente Eclipse:
![]() |
I progetti PostgreSQL sopra indicati si trovano nella cartella [<exemples>/spring-database-config\postgresql\eclipse].
Nota: eseguire [Alt-F5] per rigenerare tutti i progetti Maven.
11.1.2. Generazione dei database
Da questo punto in poi, la connessione ai database PostgresSQL avviene utilizzando le credenziali [postgres / postgres]. Avviare PostgreSQL e il relativo client [PgManager] (cfr. paragrafo 23.7).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
- in [1], verrà caricato lo script SQL [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql] ;
![]() | ![]() |
![]() |
- in [2]; come per Oracle, i livelli JPA utilizzano sequenze per generare le chiavi primarie. In questo caso, la sequenza [produits_sequence] genera le chiavi primarie della tabella [produits];
Ora esegui le configurazioni:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Devono tutte andare a buon fine.
Generiamo ora la base [dbproduitscategories]. Ripetete per [dbproduitscategories] la procedura eseguita per creare [dbproduits]. Lo script SQL da caricare si trova nella posizione [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql];
![]() |
Ora esegui le configurazioni:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa];
Entrambe devono andare a buon fine.
11.2. Configurazione del livello JDBC
![]() | ![]() |
Il progetto [postgresql-config-jdbc] configura il livello [JDBC] della seguente architettura di test:
![]() |
Il progetto è analogo al progetto di configurazione [mysql-config-jdbc] del livello JDBC del SGBD MySQL (cfr. paragrafo 3.3). Presentiamo solo le modifiche:
Il file [pom.xml] importa il driver JDBC da PostgreSQL:
<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>
<!-- dipendenze variabili ********************************************** -->
<!-- driver JDBC di SGBD -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- dipendenze costanti ********************************************** -->
...
</dependencies>
...
</project>
- righe 18-22: il driver JDBC da PostgreSQL;
La seconda modifica riguarda la classe [ConfigJdbc] che definisce gli identificativi di accesso ai database:
// parametri di connessione
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";
La terza modifica che può essere apportata riguarda il numero massimo di parametri che un [PreparedStatement] può supportare:
// numero massimo di parametri di un [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Il test [JUnitTestPushTheLimits] genera ordini SQL su 5000 prodotti che a loro volta genereranno [PreparedStatement] con 5000 parametri. Anche MySQL aveva supportato questo valore. Anche PostgreSQL.
La quarta modifica è ancora più sorprendente:
public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";
I nomi delle colonne [ID] delle tabelle [CATEGORIES] e [PRODUITS] devono essere in minuscolo per il progetto [spring-jdbc-04]. In caso contrario, si verifica un arresto anomalo nelle istruzioni che utilizzano i due bean seguenti di questo progetto:
// inserimento prodotto
@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);
}
// inserimento categoria
@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. Configurazione del livello JPA OpenJpa
![]() | ![]() |
Il progetto [postgresql-config-jpa-openjpa] configura il livello [JPA] dell’architettura di test:
![]() |
Il progetto è analogo al progetto di configurazione [oracle-config-jpa-openjpa] del livello JPA OpenJpa di Oracle SGBD (cfr. paragrafo 10.5). Infatti, entrambi i SGBD utilizzano sequenze per generare le chiavi primarie. È necessaria una sola modifica, che si trova nella definizione del bean [jpaVendorAdapter] della classe [ConfigJpa]:
// il provider JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- riga 6: si indica all’implementazione JPA che opererà con un database PostgreSQL. L'implementazione JPA adotterà quindi sia i tipi di dati proprietari sia il SQL proprietario di questo SGBD.
Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-openjpa] dovrebbe andare a buon fine.
![]() | ![]() |
11.4. Configurazione del livello JPA Hibernate
![]() | ![]() |
Nota: eseguire [Alt-F5] per rigenerare tutti i progetti Maven.
Il progetto [postgresql-config-jpa-hibernate] è analogo al progetto [oracle-config-jpa-hibernate] (paragrafo 10.4) con le stesse modifiche che hanno caratterizzato il porting del progetto [oracle-config-jpa-openjpa] al progetto [postgresql-config-jpa-openjpa] (paragrafo 11.3).
Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe andare a buon fine.
11.5. Configurazione del livello JPA EclipseLink
![]() | ![]() |
Nota: eseguire [Alt-F5] per rigenerare tutti i progetti Maven.
Il progetto [postgresql-config-jpa-eclipselink] è analogo al progetto [oracle-config-jpa-eclipselink] (paragrafo 10.3) con le stesse modifiche che hanno guidato il porting di [oracle-config-jpa-openjpa] al progetto [postgresql-config-jpa-openjpa] (paragrafo 11.3).
Una volta apportate queste modifiche, l’esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe andare a buon fine.



























