Skip to content

11. PostgreSQL 9.4

Ahora abordamos la adaptación a PostgreSQL 9.4 de lo que se ha hecho con Oracle.

11.1. Configuración del entorno de trabajo

11.1.1. Entorno Eclipse

Trabajaremos con el siguiente entorno de Eclipse:

  

Los proyectos PostgreSQL mencionados anteriormente se encuentran en la carpeta [<exemples>/spring-database-config\postgresql\eclipse].

Nota: ejecuta [Alt-F5] para regenerar todos los proyectos de Maven.

11.1.2. Generación de las bases de datos

En lo sucesivo, la conexión a las bases de datos PostgresSQL se realiza con las credenciales [postgres / postgres]. Ejecute PostgreSQL y su cliente [PgManager] (véase el párrafo 23.7).

  • en [1], se cargará el script SQL [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql];
  • en [2]; al igual que en Oracle, las capas JPA utilizan secuencias para generar las claves primarias. Aquí, la secuencia [produits_sequence] genera las claves primarias de la tabla [produits];

Ahora ejecute las configuraciones:

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

Todas deben ejecutarse correctamente.

Ahora generemos la base [dbproduitscategories]. Repite para [dbproduitscategories] el procedimiento que realizaste para crear [dbproduits]. El script SQL que se debe cargar se encuentra en la ubicación [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql];

  

Ahora, ejecute las configuraciones:

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

Ambas deben ejecutarse correctamente.

11.2. Configuración de la capa JDBC

 

El proyecto [postgresql-config-jdbc] configura la capa [JDBC] de la siguiente arquitectura de pruebas:

El proyecto es similar al proyecto de configuración [mysql-config-jdbc] de la capa JDBC del SGBD MySQL (véase el párrafo 3.3). Solo presentamos las modificaciones:

El archivo [pom.xml] importa el controlador JDBC de 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>
        <!-- dependencias variables ********************************************** -->
        <!-- controlador JDBC de SGBD -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>        
      <!-- dependencias constantes ********************************************** -->
        ...
    </dependencies>
...
</project>
  • líneas 18-22: el controlador JDBC de PostgreSQL;

La segunda modificación se encuentra en la clase [ConfigJdbc], que define los identificadores de acceso a las bases de datos:


    // parámetros de conexión
    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 tercera modificación que se puede realizar es la del número máximo de parámetros que un [PreparedStatement] puede admitir:


    // número máximo de parámetros de un [PreparedStatement]
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;

La prueba [JUnitTestPushTheLimits] genera órdenes SQL para 5000 productos, las cuales a su vez generarán [PreparedStatement] con 5000 parámetros. MySQL había soportado este valor. PostgreSQL también.

La cuarta modificación es más sorprendente:


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

Los nombres de las columnas [ID] de las tablas [CATEGORIES] y [PRODUITS] deben estar en minúsculas para el proyecto [spring-jdbc-04]. De lo contrario, se produce un error en las instrucciones que utilizan los siguientes dos beans de este proyecto:


    // inserción de producto
    @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);
    }

    // inserción de categoría
    @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. Configuración de la capa JPA OpenJpa

 

El proyecto [postgresql-config-jpa-openjpa] configura la capa [JPA] de la arquitectura de pruebas:

El proyecto es similar al proyecto de configuración [oracle-config-jpa-openjpa] de la capa JPA OpenJpa de Oracle SGBD (véase el párrafo 10.5). De hecho, ambos SGBD utilizan secuencias para generar las claves primarias. Solo hay que realizar una modificación. Se encuentra en la definición del bean [jpaVendorAdapter] de la clase [ConfigJpa]:


    // el proveedor JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • línea 6: se le indica a la implementación JPA que va a trabajar con una base PostgreSQL. La implementación JPA adoptará entonces tanto los tipos de datos propios como el SQL, que es el propietario de este SGBD.

Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-openjpa] debería completarse con éxito.

11.4. Configuración de la capa JPA de Hibernate

 

Nota: ejecute [Alt-F5] para regenerar todos los proyectos de Maven.

El proyecto [postgresql-config-jpa-hibernate] es similar al proyecto [oracle-config-jpa-hibernate] (párrafo 10.4) y presenta las mismas modificaciones que se aplicaron al migrar el proyecto [oracle-config-jpa-openjpa] al proyecto [postgresql-config-jpa-openjpa] (párrafo 11.3).

Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] debería completarse con éxito.

 

Nota: ejecute [Alt-F5] para regenerar todos los proyectos de Maven.

El proyecto [postgresql-config-jpa-eclipselink] es similar al proyecto [oracle-config-jpa-eclipselink] (párrafo 10.3) con las mismas modificaciones que se aplicaron al portar el proyecto [oracle-config-jpa-openjpa] al proyecto [postgresql-config-jpa-openjpa] (párrafo 11.3).

Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] debería completarse con éxito.