Skip to content

14. Firebird 2.5.4

Affronteremo ora il porting su Firebird 2.5.4 di quanto fatto con Oracle.

14.1. Configurazione dell'ambiente di lavoro

14.1.1. Ambiente Eclipse

Lavoreremo con il seguente ambiente Eclipse:

  

I progetti Firebird sopra elencati si trovano nella cartella [<examples>/spring-database-config\firebird\eclipse].

Nota: premere [Alt-F5] per rigenerare tutti i progetti Maven.

14.1.2. Generazione dei database

Come abbiamo fatto con Oracle, DB2 e SQL Server, dovremo installare il driver JDBC di Firebird nel repository Maven locale.

  

Il file [install.bat] contiene il seguente codice:

"%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

dove [%M2-HOME%] è la directory di installazione di Maven (vedere la sezione 23.2). Dopo questa installazione, è possibile fare riferimento al driver JDBC di Firebird nei file [pom.xml] utilizzando la seguente dipendenza:


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

Da questo punto in poi, le connessioni ai database Firebird vengono effettuate utilizzando le credenziali [sysdba / masterkey]. Avviare Firebird e il suo client [IBManager] (vedere la sezione 23.10). I database Firebird sono unici in quanto incapsulati in un unico file.

  • In [1], il file si trova in [<examples>\spring-database-config\firebird\databases\DBPRODUITS.GDB];
  • Come per Oracle, le chiavi primarie vengono generate utilizzando sequenze.

Procediamo allo stesso modo per caricare il database [dbproduitscategories], che si trova in [<examples>\spring-database-config\firebird\databases\DBPRODUITSCATEGORIES.GDB]

  

Ora, esegui le configurazioni:

  • [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];

Devono superare tutti i test.

14.2. Configurazione del livello JDBC

 

Il progetto [firebird-config-jdbc] configura il livello [JDBC] della seguente architettura di test:

Il progetto è analogo al progetto di configurazione [oracle-config-jdbc] per il livello JDBC del DBMS MySQL (vedere la Sezione 10.2). Presentiamo solo le modifiche:

Il file [pom.xml] importa il driver JDBC di 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 ********************************************** -->
        <!-- driver JDBC from SGBD -->
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- required for Firebird driver -->
        <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>
  • righe 18–22: il driver JDBC di Firebird;
  • righe 24–33: le dipendenze richieste per il driver JDBC di Firebird;

La seconda modifica riguarda la classe [ConfigJdbc], che definisce le credenziali del database:


    // 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";
  • Righe 3 e 6: è necessario inserire i percorsi esatti per entrambi i database;

La terza modifica che è possibile apportare riguarda il numero massimo di parametri che un [PreparedStatement] può supportare:


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

Il test [JUnitTestPushTheLimits] genera istruzioni SQL per 5.000 prodotti, il che genererà oggetti [PreparedStatement] con 5.000 parametri. MySQL supportava questo valore. Firebird no.

La quarta modifica riguarda una parola riservata in Firebird-config-jdbc: PASSWORD. La colonna [USERS.PASSWORD] è stata quindi rinominata [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. Configurazione del livello JPA di OpenJPA

 

Il progetto [firebird-config-jpa-openjpa] configura il livello [JPA] dell'architettura di test:

Questo progetto è simile al progetto di configurazione [firebird-config-jpa-openjpa] per il livello JPA OpenJPA del DBMS Oracle (vedere la Sezione 10.5). Infatti, entrambi i DBMS utilizzano sequenze per generare le chiavi primarie. C'è solo una modifica da apportare. Si trova nella definizione del bean [jpaVendorAdapter] nella classe [ConfigJpa]:


    // the provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.DEFAULT);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • Riga 6: Indichiamo all'implementazione JPA che lavorerà con un DBMS non riconosciuto. L'implementazione JPA adotterà quindi i tipi di dati SQL standard.

Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-openjpa] dovrebbe avere esito positivo.

14.4. Configurazione del livello JPA di Hibernate

 

Nota: premere [Alt-F5] per rigenerare tutti i progetti Maven.

Il progetto [firebird-config-jpa-hibernate] è analogo al progetto [oracle-config-jpa-hibernate] (Sezione 10.4) con le stesse modifiche utilizzate per portare il progetto [oracle-config-jpa-openjpa] al progetto [firebird-config-jpa-openjpa] (Sezione 10.4).

Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe avere esito positivo.

 

Nota: premere [Alt-F5] per rigenerare tutti i progetti Maven.

Il progetto [firebird-config-jpa-eclipselink] è analogo al progetto [oracle-config-jpa-eclipselink] (Sezione 10.3) con le stesse modifiche utilizzate per portare il progetto [oracle-config-jpa-openjpa] al progetto [firebird-config-jpa-openjpa] (Sezione 10.4).

Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe avere esito positivo.