Skip to content

14. Firebird 2.5.4

Nous abordons maintenant le portage sur Firebird 2.5.4 de ce qui a été fait avec Oracle.

14.1. Mise en place de l'environnement de travail

14.1.1. Environnement eclipse

Nous travaillerons avec l'environnement Eclipse suivant :

  

Les projets Firebird ci-dessus seront trouvés dans le dossier [<exemples>/spring-database-config\firebird\eclipse].

Note : faire [Alt-F5] pour régénérer l'ensemble des projets Maven.

14.1.2. Génération des bases de données

Comme il a été fait avec Oracle, DB2, et SQL Server nous allons devoir installer le pilote JDBC de Firebird dans le dépôt Maven local.

  

Le fichier [install.bat] contient le code suivant :

"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=jaybird-2.2.7.jar -Dpackaging=jar -DgroupId=org.firebirdsql.jdbc -DartifactId=jaybird -Dversion=2.2.7

où [%M2-HOME%] est le dossier d'installation de Maven (cf paragraphe 23.2). Après cette installation, le pilote JDBC de Firebird peut être référencé dans les fichiers [pom.xml] par la dépendance suivante :


        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
</dependency>

Dans toute la suite, la connexion aux bases Firebird se font avec les identifiants [sysdba / masterkey]. Lancez Firebird et son client [IBManager] (cf paragraphe 23.10). Les bases de données firebird sont particulières en ce sens qu'elles sont encapsulées dans un unique fichier.

  • en [1], fichier sera trouvé en [<exemples>\spring-database-config\firebird\databases\DBPRODUITS.GDB] ;
  • comme avec Oracle, les clés primaires sont générées à l'aide de séquences.

On procède de la même façon pour charger la base [dbproduitscategories] qu'on trouvera en [<exemples>\spring-database-config\firebird\databases\DBPRODUITSCATEGORIES.GDB]

  

Maintenant, exécutez les configurations :

  • [spring-jdbc-generic-01.IntroJdbc01] ;
  • [spring-jdbc-generic-01.IntroJdbc02] ;
  • [spring-jdbc-generic-03.JUnitTestDao1] ;
  • [spring-jdbc-generic-03.JUnitTestDao2] ;
  • [spring-jdbc-generic-04.JUnitTestDao] ;
  • [spring-jpa-generic-JUnitTestDao-openjpa] ;

Elles doivent toutes réussir.

14.2. Configuration de la couche JDBC

 

Le projet [firebird-config-jdbc] configure la couche [JDBC] de l'architecture de tests suivante :

Le projet est analogue au projet de configuration [oracle-config-jdbc] de la couche JDBC du SGBD MySQL (cf paragraphe 10.2). Nous ne présentons que les modifications :

Le fichier [pom.xml] importe le pilote JDBC de Firebird :


<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 ********************************************** -->
        <!-- pilote JDBC du SGBD -->
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- nécessaire pour le driver Firebird -->
        <dependency>
            <groupId>javax.resource</groupId>
            <artifactId>connector-api</artifactId>
            <version>1.5</version>
        </dependency>
        <dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr-runtime</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- dépendances constantes ********************************************** -->
        ...
    </dependencies>
...
</project>
  • lignes 18-22 : le pilote JDBC de Firebird ;
  • lignes 24-33 : les dépendances nécessaires au pilote JDBC de Firebird ;

La seconde modification est dans la classe [ConfigJdbc] qui définit les identifiants d'accès aux bases :


    // paramètres de connexion
    public final static String DRIVER_CLASSNAME = "org.firebirdsql.jdbc.FBDriver";
    public final static String URL_DBPRODUITS = "jdbc:firebirdsql:localhost/3050:<exemples>/SPRING-DATABASE-CONFIG/FIREBIRD/DATABASES/DBPRODUITS.GDB";
    public final static String USER_DBPRODUITS = "sysdba";
    public final static String PASSWD_DBPRODUITS = "masterkey";
    public final static String URL_DBPRODUITSCATEGORIES = "jdbc:firebirdsql:localhost/3050:<exemples>/SPRING-DATABASE-CONFIG/FIREBIRD/DATABASES/DBPRODUITSCATEGORIES.GDB";
    public final static String USER_DBPRODUITSCATEGORIES = "sysdba";
public final static String PASSWD_DBPRODUITSCATEGORIES = "masterkey";
  • lignes 3 et 6 : il faut mettre les chemins exacts des deux bases de données ;

La troisième modification qui peut être apportée est celle du nombre maximal de paramètres qu'un [PreparedStatement] peut supporter :


    // nombre max de paramètres d'un [PreparedStatement]
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 1000;

Le test [JUnitTestPushTheLimits] génère des ordres SQL sur 5000 produits qui vont générer des [PreparedStatement] avec 5000 paramètres. MySQL avait supporté cette valeur. Firebird non.

La quatrième modification concerne un mot réservé de Firebird-config-jdbc : PASSWORD. La colonne [USERS.PASSWORD] a donc été renommée [USERS.PASSWD] :


public final static String TAB_USERS_PASSWORD = "PASSWD";
public static final String SELECT_USER_BYLOGIN = "SELECT u.ID as u_ID, u.VERSIONING as u_VERSIONING, u.NAME as u_NAME,u.LOGIN as u_LOGIN,u.PASSWD as u_PASSWORD FROM USERS u WHERE u.LOGIN= :login";

14.3. Configuration de la couche JPA OpenJpa

 

Le projet [firebird-config-jpa-openjpa] configure la couche [JPA] de l'architecture de tests :

Le projet est analogue au projet de configuration [firebird-config-jpa-openjpa] de la couche JPA OpenJpa du SGBD Oracle (cf paragraphe 10.5). En effet, les deux SGBD utilisent des séquences pour générer les clés primaires. Il n'y a qu'une modification à faire. Elle est dans la définition du bean [jpaVendorAdapter] de la classe [ConfigJpa] :


    // le provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.DEFAULT);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • ligne 6 : on indique à l'implémentation JPA qu'elle va travailler avec un SGBD non reconnu. L'implémentation JPA va alors adopter et les types de données standard du SQL.

Ces modifications faites, l'exécution de la configuration [spring-jpa-generic-JUnitTestDao-openjpa] doit réussir.

14.4. Configuration de la couche JPA Hibernate

 

Note : faire [Alt-F5] pour régénérer l'ensemble des projets Maven.

Le projet [firebird-config-jpa-hibernate] est analogue au projet [oracle-config-jpa-hibernate] (paragraphe 10.4) avec les mêmes modifications qui ont présidé au portage du [oracle-config-jpa-openjpa] vers le projet [firebird-config-jpa-openjpa] (paragraphe 10.4).

Ces modifications faites, l'exécution de la configuration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] doit réussir.

 

Note : faire [Alt-F5] pour régénérer l'ensemble des projets Maven.

Le projet [firebird-config-jpa-eclipselink] est analogue au projet [oracle-config-jpa-eclipselink] (paragraphe 10.3) avec les mêmes modifications qui ont présidé au portage du [oracle-config-jpa-openjpa] vers le projet [firebird-config-jpa-openjpa] (paragraphe 10.4).

Ces modifications faites, l'exécution de la configuration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] doit réussir.