Skip to content

14. Firebird 2.5.4

Abordamos agora a adaptação para o Firebird 2.5.4 do que foi feito com o Oracle.

14.1. Configuração do ambiente de trabalho

14.1.1. Ambiente Eclipse

Trabalharemos com o seguinte ambiente Eclipse:

  

Os projetos Firebird acima estarão na pasta [<exemples>/spring-database-config\firebird\eclipse].

Observação: execute o comando [Alt-F5] para regenerar todos os projetos Maven.

14.1.2. Geração dos bancos de dados

Assim como foi feito com o Oracle, DB2 e SQL Server, precisaremos instalar o driver JDBC do Firebird no repositório local do Maven.

  

O arquivo [install.bat] contém o seguinte código:

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

onde [%M2-HOME%] é a pasta de instalação do Maven (ver parágrafo 23.2). Após essa instalação, o driver JDBC do Firebird pode ser referenciado nos arquivos [pom.xml] por meio da seguinte dependência:


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

Daqui em diante, a conexão com os bancos de dados Firebird será feita com as credenciais [sysdba / masterkey]. Inicie o Firebird e seu cliente [IBManager] (consulte o parágrafo 23.10). Os bancos de dados Firebird são especiais, pois estão encapsulados em um único arquivo.

  • em [1], o arquivo será encontrado em [<exemples>\spring-database-config\firebird\databases\DBPRODUITS.GDB];
  • assim como no Oracle, as chaves primárias são geradas por meio de sequências.

Procedemos da mesma forma para carregar o banco de dados [dbproduitscategories], que será encontrado em [<exemples>\spring-database-config\firebird\databases\DBPRODUITSCATEGORIES.GDB]

  

Agora, execute as configurações:

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

Todas elas devem ser aprovadas.

14.2. Configuração da camada JDBC

 

O projeto [firebird-config-jdbc] configura a camada [JDBC] da seguinte arquitetura de testes:

O projeto é análogo ao projeto de configuração [oracle-config-jdbc] da camada JDBC do SGBD MySQL (ver parágrafo 10.2). Apresentamos apenas as alterações:

O arquivo [pom.xml] importa o driver JDBC do 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>
        <!-- dependências variáveis ********************************************** -->
        <!-- driver JDBC do SGBD -->
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- necessário para o 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>
        <!-- dependências constantes ********************************************** -->
        ...
    </dependencies>
...
</project>
  • linhas 18-22: o driver JDBC do Firebird;
  • linhas 24-33: as dependências necessárias para o driver JDBC do Firebird;

A segunda modificação está na classe [ConfigJdbc], que define os identificadores de acesso aos bancos de dados:


    // parâmetros de conexão
    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";
  • linhas 3 e 6: é preciso inserir os caminhos exatos dos dois bancos de dados;

A terceira modificação que pode ser feita é a do número máximo de parâmetros que um [PreparedStatement] pode suportar:


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

O teste [JUnitTestPushTheLimits] gera ordens SQL para 5.000 produtos, que, por sua vez, gerarão [PreparedStatement] com 5.000 parâmetros. O MySQL suportava esse valor. O Firebird, não.

A quarta modificação diz respeito a uma palavra reservada do Firebird-config-jdbc: PASSWORD. A coluna [USERS.PASSWORD] foi, portanto, renomeada para [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. Configuração da camada JPA OpenJpa

 

O projeto [firebird-config-jpa-openjpa] configura a camada [JPA] da arquitetura de testes:

O projeto é análogo ao projeto de configuração [firebird-config-jpa-openjpa] da camada JPA OpenJpa do SGBD Oracle (ver parágrafo 10.5). De fato, ambos os SGBD utilizam sequências para gerar as chaves primárias. Há apenas uma modificação a ser feita. Ela está na definição do bean [jpaVendorAdapter] da classe [ConfigJpa]:


    // o provedor JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.DEFAULT);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • linha 6: indica-se à implementação JPA que ela trabalhará com um SGBD não reconhecido. A implementação JPA adotará, então, os tipos de dados padrão do SQL.

Após essas alterações, a execução da configuração [spring-jpa-generic-JUnitTestDao-openjpa] deve ser bem-sucedida.

14.4. Configuração da camada JPA do Hibernate

 

Observação: execute o comando [Alt-F5] para regenerar todos os projetos Maven.

O projeto [firebird-config-jpa-hibernate] é análogo ao projeto [oracle-config-jpa-hibernate] (parágrafo 10.4), com as mesmas modificações que orientaram a migração do [oracle-config-jpa-openjpa] para o projeto [firebird-config-jpa-openjpa] (parágrafo 10.4).

Após essas modificações, a execução da configuração [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] deve ser bem-sucedida.

 

Observação: execute o [Alt-F5] para regenerar todos os projetos Maven.

O projeto [firebird-config-jpa-eclipselink] é análogo ao projeto [oracle-config-jpa-eclipselink] (parágrafo 10.3) com as mesmas modificações que orientaram a migração do [oracle-config-jpa-openjpa] para o projeto [firebird-config-jpa-openjpa] (parágrafo 10.4).

Após essas alterações, a execução da configuração [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] deve ser bem-sucedida.