12. IBM DB2 Express-C 10.5
Passamos agora à adaptação para o DB2 do que foi feito com o MySQL. Os dois SGBD têm, de facto, a mesma estratégia de geração de chaves primárias.
![]() |
12.1. Configuração do ambiente de trabalho
12.1.1. Ambiente Eclipse
Iremos trabalhar com o seguinte ambiente Eclipse:
![]() |
Os projetos DB2 acima referidos encontram-se na pasta [<exemples>/spring-database-config\db2\eclipse].
Nota: execute o comando [Alt-F5] para regenerar todos os projetos Maven.
12.1.2. Geração das bases de dados
Tal como foi feito com o Oracle, teremos de instalar o controlador JDBC do DB2 no repositório Maven local.
![]() |
O ficheiro [install.bat] contém o seguinte código:
"%M2_HOME%\bin\mvn.bat" install:install-file -Dfile=db2jcc4.jar -Dpackaging=jar -DgroupId=com.ibm.jdbc -DartifactId=db2jcc4 -Dversion=1.0
onde [%M2-HOME%] é a pasta de instalação do Maven (ver parágrafo 23.2). Após esta instalação, o controlador JDBC de DB2 pode ser referenciado nos ficheiros [pom.xml] através da seguinte dependência:
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
A partir daqui, a ligação às bases de dados DB2 é efetuada com as credenciais [db2admin / db2admin]. Inicie o DB2 e o seu cliente [Db2Manager] (ver parágrafo 23.8).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() |
A base de dados [DBPROD] é a base de dados [dbproduits] das anteriores SGBD. No entanto, a [DB2Manager] não me permitiu utilizar este nome (talvez por ser demasiado longo para ela). Agora, criamos a tabela [PRODUITS] com a seguinte configuração de execução do Eclipse: [generic-create-dbproduits-jpa]:
![]() | ![]() |
A execução cria a tabela [PRODUITS] na base de dados [DBPROD]:
![]() |
- em [1], acima, a sequência não foi gerada por [OpenJpa], mas sim pelo próprio DB2, que a utiliza internamente para gerar chaves primárias;
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];
Todas elas devem ser bem-sucedidas.
Vamos agora gerar a base de dados [dbproduitscategories]. Esta será aqui designada por [DBCAT], pelas razões já referidas relativas à restrição do comprimento dos nomes das bases de dados. Repita, para [DBCAT], o procedimento seguido para criar [DBPROD].
![]() |
Vamos agora criar as tabelas da base de dados [DBCAT] a partir do Eclipse com a configuração [generic-create-dbproduitscategories-openjpa]:
![]() | ![]() |
Esta execução produz o seguinte resultado:
![]() | ![]() |
É necessário alterar a coluna [VERSIONING] das cinco tabelas para que tenham o valor 1 como valor por predefinição:
![]() |
![]() |
Esta operação deve ser realizada nas cinco tabelas.
Agora, execute as configurações:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa] ;
Ambas devem ser bem-sucedidas.
12.2. Configuração da camada JDBC
![]() | ![]() |
O projeto [db2-config-jdbc] configura a camada [JDBC] da seguinte arquitetura de testes:
![]() |
O projeto é análogo ao projeto de configuração [mysql-config-jdbc] da camada JDBC do SGBD MySQL (ver parágrafo 3.3). Apresentamos apenas as alterações:
O ficheiro [pom.xml] importa o controlador JDBC de DB2:
<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 ********************************************** -->
<!-- controlador JDBC do SGBD -->
<dependency>
<groupId>com.ibm.jdbc</groupId>
<artifactId>db2jcc4</artifactId>
<version>1.0</version>
</dependency>
<!-- dependências constantes ********************************************** -->
....
</dependencies>
...
</project>
- linhas 18-22: o controlador JDBC a partir de DB2;
A segunda alteração encontra-se na classe [ConfigJdbc], que define os identificadores de acesso às bases de dados:
// parâmetros de ligação
public final static String DRIVER_CLASSNAME = "com.ibm.db2.jcc.DB2Driver";
public final static String URL_DBPRODUITS = "jdbc:db2://localhost:50000/dbprod";
public final static String USER_DBPRODUITS = "db2admin";
public final static String PASSWD_DBPRODUITS = "db2admin";
public final static String URL_DBPRODUITSCATEGORIES = "jdbc:db2://localhost:50000/dbcat";
public final static String USER_DBPRODUITSCATEGORIES = "db2admin";
public final static String PASSWD_DBPRODUITSCATEGORIES = "db2admin";
A terceira alteração que pode ser efetuada é 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 = 10000;
O teste [JUnitTestPushTheLimits] gera ordens SQL para 5 000 produtos, que, por sua vez, irão gerar [PreparedStatement] com 5 000 parâmetros. O MySQL suportava este valor. O DB2 também.
A quarta alteração diz respeito ao nome da tabela [ROLES]. Com efeito, este nome está reservado nas tabelas SGBD e DB2. Por isso, renomeou-se para [ROLES_]:
public final static String TAB_ROLES = "ROLES_";
public static final String SELECT_ROLES_BYUSERID = "SELECT DISTINCT r.ID as r_ID, r.VERSIONING as r_VERSIONING, r.NAME as r_NAME FROM ROLES_ r, users u, USERS_ROLES ur"
+ " WHERE u.ID=:id AND ur.USER_ID=u.ID AND ur.ROLE_ID=r.ID";
12.3. Configuração da camada JPA OpenJpa
![]() | ![]() |
O projeto [db2-config-jpa-openjpa] configura a camada [JPA] da arquitetura de testes:
![]() |
O projeto é análogo ao projeto de configuração [mysql-config-jpa-openjpa] da camada JPA OpenJpa do SGBD MySQL (ver parágrafo 8.3). Com efeito, ambos os SGBD utilizam a anotação [@GeneratedValue(strategy = GenerationType.IDENTITY)] para gerar as chaves primárias. Há apenas uma alteração a efetuar. Esta encontra-se 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.DB2);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- linha 6: indica-se à implementação JPA que irá trabalhar com uma base de dados DB2. A implementação JPA irá então adotar tanto os tipos de dados proprietários como o SQL, que é o proprietário deste SGBD.
Após estas alterações, a execução da configuração [spring-jpa-generic-JUnitTestDao-openjpa] deverá ser bem-sucedida.
![]() | ![]() |
12.4. Configuração da camada JPA do Hibernate
![]() | ![]() |
Nota: execute o comando [Alt-F5] para regenerar todos os projetos Maven.
O projeto [db2-config-jpa-hibernate] é análogo ao projeto [mysql-config-jpa-hibernate] (parágrafo 6.3), com as mesmas alterações que estiveram na base da migração do [mysql-config-jpa-openjpa] para o projeto [db2-config-jpa-openjpa] (parágrafo 12.3).
Após estas alterações, a execução da configuração [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] deverá ser bem-sucedida.
12.5. Configuração da camada JPA EclipseLink
![]() | ![]() |
Nota: execute o [Alt-F5] para regenerar todos os projetos Maven.
O projeto [db2-config-jpa-eclipselink] é análogo ao projeto [mysql-config-jpa-eclipselink] (parágrafo 7.3) com as mesmas alterações que estiveram na base da migração do [mysql-config-jpa-openjpa] para o projeto [db2-config-jpa-openjpa] (parágrafo 12.3).
Após estas alterações, a execução da configuração [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] deverá ser bem-sucedida.































