Skip to content

14. Firebird 2.5.4

Passiamo ora al porting su Firebird 2.5.4 di quanto è stato 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 indicati si trovano nella cartella [<exemples>/spring-database-config\firebird\eclipse].

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

14.1.2. Generazione dei database

Come già 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 cartella di installazione di Maven (cfr. paragrafo 23.2). Dopo questa installazione, il driver JDBC di Firebird può essere referenziato nei file [pom.xml] tramite la seguente dipendenza:


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

Da questo momento in poi, la connessione ai database Firebird avviene utilizzando le credenziali [sysdba / masterkey]. Avviare Firebird e il relativo client [IBManager] (cfr. paragrafo 23.10). I database Firebird sono particolari in quanto sono incapsulati in un unico file.

  • in [1], il file si troverà in [<exemples>\spring-database-config\firebird\databases\DBPRODUITS.GDB];
  • come in Oracle, le chiavi primarie vengono generate utilizzando sequenze.

Si procede allo stesso modo per caricare il database [dbproduitscategories], che si troverà in [<exemples>\spring-database-config\firebird\databases\DBPRODUITSCATEGORIES.GDB]

  

Ora eseguire 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 tutte avere esito positivo.

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] del livello JDBC del SGBD MySQL (cfr. paragrafo 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>
        <!-- dipendenze variabili ********************************************** -->
        <!-- driver JDBC del SGBD -->
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- necessario per il 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>
        <!-- dipendenze costanti ********************************************** -->
        ...
    </dependencies>
...
</project>
  • righe 18-22: il driver JDBC di Firebird;
  • righe 24-33: le dipendenze necessarie per il driver JDBC di Firebird;

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.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 dei due database;

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 = 1000;

Il test [JUnitTestPushTheLimits] genera comandi SQL su 5000 prodotti che a loro volta genereranno [PreparedStatement] con 5000 parametri. MySQL aveva supportato questo valore. Firebird no.

La quarta modifica riguarda una parola riservata di 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 OpenJpa

 

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

Il progetto è analogo al progetto di configurazione [firebird-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.DEFAULT);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • riga 6: si indica all'implementazione JPA che opererà con un SGBD non riconosciuto. L'implementazione JPA adotterà quindi i tipi di dati standard del SQL.

Una volta apportate queste modifiche, l’esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-openjpa] dovrebbe andare a buon fine.

14.4. Configurazione del livello Hibernate JPA

 

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

Il progetto [firebird-config-jpa-hibernate] è analogo al progetto [oracle-config-jpa-hibernate] (paragrafo 10.4) con le stesse modifiche che hanno guidato il porting di [oracle-config-jpa-openjpa] al progetto [firebird-config-jpa-openjpa] (paragrafo 10.4).

Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe andare a buon fine.

 

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

Il progetto [firebird-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 [firebird-config-jpa-openjpa] (paragrafo 10.4).

Una volta apportate queste modifiche, l'esecuzione della configurazione [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] dovrebbe andare a buon fine.