Skip to content

14. Firebird 2.5.4

We gaan nu over tot de port naar Firebird 2.5.4 van wat er met Oracle is gedaan.

14.1. Het opzetten van de werkomgeving

14.1.1. Eclipse-omgeving

We gaan werken met de volgende Eclipse-omgeving:

  

De bovenstaande Firebird-projecten zijn te vinden in de map [<exemples>/spring-database-config\firebird\eclipse].

Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.

14.1.2. Databases genereren

Net zoals bij Oracle, DB2 en SQL Server, moeten we de Firebird-driver JDBC in de lokale Maven-repository installeren.

  

Het bestand [install.bat] bevat de volgende code:

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

waarbij [%M2-HOME%] de installatiemap van Maven is (zie paragraaf 23.2). Na deze installatie kan de Firebird-driver JDBC in de bestanden [pom.xml] worden aangeroepen via de volgende afhankelijkheid:


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

In het verdere verloop worden de verbindingen met de Firebird-databases tot stand gebracht met de inloggegevens [sysdba / masterkey]. Start Firebird en de bijbehorende client [IBManager] op (zie paragraaf 23.10). Firebird-databases zijn bijzonder in die zin dat ze in één enkel bestand zijn ingekapseld.

  • in [1], zal het bestand worden gevonden in [<exemples>\spring-database-config\firebird\databases\DBPRODUITS.GDB];
  • net als bij Oracle worden de primaire sleutels gegenereerd met behulp van sequenties.

Op dezelfde manier gaat men te werk om de database [dbproduitscategories] te laden, die te vinden is in [<exemples>\spring-database-config\firebird\databases\DBPRODUITSCATEGORIES.GDB]

  

Voer nu de configuraties uit:

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

Ze moeten allemaal slagen.

14.2. Configuratie van de laag JDBC

 

Het project [firebird-config-jdbc] configureert de laag [JDBC] van de volgende testarchitectuur:

Het project is vergelijkbaar met het configuratieproject [oracle-config-jdbc] van de laag JDBC van de SGBD MySQL (zie paragraaf 10.2). We geven hier alleen de wijzigingen weer:

Het bestand [pom.xml] importeert de Firebird-driver JDBC:


<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>
        <!-- variabele afhankelijkheden ********************************************** -->
        <!-- stuurprogramma JDBC van SGBD -->
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- vereist voor de 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>
        <!-- constante afhankelijkheden ********************************************** -->
        ...
    </dependencies>
...
</project>
  • regels 18-22: de Firebird-driver JDBC;
  • regels 24-33: de benodigde afhankelijkheden voor de Firebird-driver JDBC;

De tweede wijziging bevindt zich in de klasse [ConfigJdbc], die de toegangsgegevens voor de databases definieert:


    // verbindingsparameters
    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";
  • regels 3 en 6: hier moeten de exacte paden naar de twee databases worden ingevuld;

De derde wijziging die kan worden aangebracht, betreft het maximale aantal parameters dat een [PreparedStatement] kan ondersteunen:


    // maximaal aantal parameters van een [PreparedStatement]
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 1000;

De test [JUnitTestPushTheLimits] genereert SQL-opdrachten voor 5000 producten, die op hun beurt [PreparedStatement]-bestanden met 5000 parameters zullen genereren. MySQL kon deze waarde wel aan. Firebird niet.

De vierde wijziging betreft een gereserveerd woord in Firebird-config-jdbc: PASSWORD. De kolom [USERS.PASSWORD] is daarom hernoemd naar [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. Configuratie van de laag JPA OpenJpa

 

Het project [firebird-config-jpa-openjpa] configureert de laag [JPA] van de testarchitectuur:

Het project is vergelijkbaar met het configuratieproject [firebird-config-jpa-openjpa] van de laag JPA OpenJpa van de Oracle SGBD (zie paragraaf 10.5). Beide SGBD-projecten maken namelijk gebruik van sequenties om de primaire sleutels te genereren. Er hoeft slechts één wijziging te worden aangebracht. Deze bevindt zich in de definitie van de bean [jpaVendorAdapter] van de klasse [ConfigJpa]:


    // de provider JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.DEFAULT);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • regel 6: de implementatie JPA wordt geïnformeerd dat deze met een niet-herkende SGBD gaat werken. De implementatie JPA zal dan de standaardgegevenstypen van de SQL overnemen.

Nadat deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-openjpa] moeten slagen.

14.4. Configuratie van de Hibernate-laag JPA

 

Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.

Het project [firebird-config-jpa-hibernate] is vergelijkbaar met het project [oracle-config-jpa-hibernate] (paragraaf 10.4) en bevat dezelfde aanpassingen die zijn doorgevoerd bij de overzetting van [oracle-config-jpa-openjpa] naar het project [firebird-config-jpa-openjpa] (paragraaf 10.4).

Als deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] moeten slagen.

 

Opmerking: voer [Alt-F5] uit om alle Maven-projecten opnieuw te genereren.

Het project [firebird-config-jpa-eclipselink] is vergelijkbaar met het project [oracle-config-jpa-eclipselink] (paragraaf 10.3) met dezelfde aanpassingen die zijn doorgevoerd bij de overzetting van [oracle-config-jpa-openjpa] naar het project [firebird-config-jpa-openjpa] (paragraaf 10.4).

Als deze wijzigingen zijn doorgevoerd, zou de uitvoering van de configuratie [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] moeten slagen.