Automatização de testes de persistência com FIT, DBUnit e HSQLDB

Tamanho: px
Começar a partir da página:

Download "Automatização de testes de persistência com FIT, DBUnit e HSQLDB"

Transcrição

1 a r t i g o Alexandre Gazola é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática pela PUC-Rio. Trabalha como analista de Sistemas no BNDES e possui as certificações SCJP, SCWCD e CSM. Mantém um blog em com. Automatização de testes de persistência com FIT, DBUnit e HSQLDB Obtenha o máximo de qualidade, eficiência e clareza escrevendo testes de integração automatizados com FIT, DbUnit e HSQLDB A escrita e automatização de testes de unidade, integração e aceitação é uma prática que tem se mostrado bastante efetiva na construção de sistemas de software de qualidade. Em particular, é importante que os testes possam ser executados frequentemente e que eles não dependam de recursos externos que não estejam sob o devido controle. Além disso, é igualmente importante que os testes sejam escritos de forma clara, facilitando a manutenção e contribuindo para documentar o sistema. Neste artigo, apresentamos uma abordagem eficaz para a escrita de testes de integração para a camada de persistência de aplicações com bastante acesso e manipulação de dados. Serão utilizadas como ferramentas de suporte os frameworks FIT e DBUnit e o sistema de banco de dados HSQLDB. B astante popularizada pelos métodos ágeis, a escrita e automação de testes de unidade, integração e aceitação, bem como o Test-driven Development (TDD), têm se consolidado como práticas bastante efetivas para a produção de sistemas de software de qualidade. Software que possui boa cobertura de testes de unidade e integração, além de ter código mais coeso e menos acoplado, é mais robusto e de mais fácil manutenção. Num nível acima, podemos ter testes de aceitação, os quais, na terminologia do Extreme Programming (XP), servem como critério de pronto para as histórias (user stories) a serem implementadas, ou seja, quando todos os testes de aceitação estiverem sendo executados com sucesso, isso significa que o sistema atende funcionalmente aos requisitos propostos. Para serem eficazes, é muito importante que os testes sejam executados frequentemente (geralmente num servidor de integração contínua), o que implica que cada teste tenha um tempo de execução curto (idealmente, alguns segundos). Sendo assim, é bastante desejável que os testes possam ser executados de forma independente, sem depender de recursos externos que não estejam sob controle (ex.: banco de dados, rede etc.). Além disso, o código dos testes deve ser mantido com a mesma qualidade do código de produção, o que inclui clareza. Quanto mais expressivos forem os testes, mais fácil será mantê-los e melhor eles servirão como documentação do sistema. 66

2 Abordagens baseadas em Behavior Driven Development (BDD, desenvolvimento baseado em comportamento), por exemplo, têm se popularizado bastante nos últimos anos. A ideia é fazer com que os testes sejam escritos como descrições de cenários que atendam aos requisitos desejados. Neste artigo, o objetivo é mostrar como escrever testes de integração eficientes e expressivos para a camada de persistência de uma aplicação. Na parte inicial do artigo, daremos uma visão geral sobre testes de integração e descreveremos as características básicas das ferramentas que serão utilizadas como apoio. Em seguida, exploraremos como escrever os testes de integração para uma pequena aplicação de exemplo. Por fim, faremos um breve comentário sobre a abordagem de testes de unidade para camadas de persistência. Este artigo assume que o leitor já possui conhecimentos básicos sobre testes de unidade e seus benefícios. Para uma boa introdução, conferir o artigo Testes unitários para camadas de negócios no mundo real, da edição 23 da Mundoj. Testes de integração Afinal de contas, o que são testes de integração? Nada mais do que testes que validam o resultado da interação de um conjunto de módulos de um sistema. Testes de integração se distinguem dos testes de unidade, pois estes últimos visam validar de forma isolada apenas uma pequena parte de código do sistema (tipicamente, a lógica de um método). Para deixar mais claro, vamos à definição de Michael Feathers (autor do livro clássico Working Effectively With Legacy Code ), que diz que um teste não é um teste de unidade se ele: - se comunica com o banco de dados; - faz acesso à rede; - acessa o sistema de arquivos; - não pode ser executado ao mesmo tempo em que outros testes de unidade; - exige que o ambiente seja configurado de forma especial para que possa ser executado. Todos esses exemplos caracterizam testes de integração (por isso, não é pelo fato de o seu teste usar o JUnit que ele pode ser considerado um teste de unidade). Neste artigo, como estamos interessados em testar a camada de persistência de uma aplicação (com testes de integração), nosso foco recae sobre o primeiro item citado: testes que exigem comunicação com banco de dados. Um teste de integração com banco de dados envolve interação com diversos componentes além da própria camada de persistência, tipicamente: o framework de mapeamento objeto-relacional (Hibernate, por exemplo), o driver JDBC e o banco de dados relacional com seus dados e esquema. Por tudo isso, configurar, gerenciar e executar os testes nesse ambiente pode ser bastante custoso tanto em termos de programação (custo de criar e manter os testes) quanto em performance dos testes (eles podem demorar bastante para executar, por exemplo, se muitas conexões forem desnecessariamente abertas). Para endereçar esses problemas, utilizaremos em nossos testes três ferramentas de apoio, descritas resumidamente na seção seguinte. Mais adiante no artigo veremos como essas ferramentas podem ser utilizadas e combinadas para possibilitar a confecção de testes de integração de elevada qualidade. Ferramentas HSQLDB O HSQLDB (HyperSQL DataBase) é um sistema de gerenciamento de banco de dados (SGBD) open-source, completamente escrito em Java. A vantagem de sua utilização é que ele é pequeno e rápido e possui suporte a tabelas em memória ou em disco, além de suportar os modos embutido e servidor. Ele também suporta grande parte do padrão SQL Neste artigo, utilizaremos um banco HSQDB em memória para diminuir o overhead de um banco de dados tradicional (dispensando acesso a disco etc.). Na data de escrita deste artigo, a versão atual é a 1.8 e o download pode ser realizado em Apesar de o uso do HSQLDB em testes automatizados ter ótimos benefícios, é muito importante que os testes também sejam executados sobre o sistema de banco de dados real, no servidor de integração contínua. Mesmo que um framework ORM seja utilizado, o sistema pode ter problemas com a troca de banco de dados, por exemplo, por utilizar queries cujo comportamento é distinto de um banco para outro (devido à variação de dialeto SQL etc). FIT O Framework for Integrated Tests (FIT) foi desenvolvido por Ward Cunningham com o objetivo de promover a colaboração dos usuários na escrita de testes de aceitação baseados em tabelas HTML (as tabelas HTML do FIT também são conhecidas como fixture tables). O framework trabalha lendo tabelas HTML, interpretando-as e traduzindo-as em chamadas de métodos em classes de fixtures, que são implementadas por classes Java (assumindo Java como linguagem de programação utilizada). Pode-se dizer que as classes de fixtures fazem a cola entre os testes especificados pelas fixture tables com o código de produção sendo testado (também conhecido pelo acrônimo SUT System Under Test). O FIT também costuma gerar como relatórios de saída os documentos de testes utilizados com as células das tabelas coloridas em verde ou vermelho, de acordo com o status da execução do teste (ok ou erro), além dos valores esperados em caso de erro. O FIT conta com três fixtures básicas: Column Fixture, Row Fixture e Action Fixture, cada qual permitindo certo tipo de layout e funcionalidade para as tabelas. É interessante também fazer uso da FITLibrary, que acrescenta outros tipos de fixture, entre eles, o SetUpFixture e a DoFixture, utilizados neste artigo. O FIT nos permitirá escrever testes com alto nível de legibilidade e manutenibilidade. Na aplicação de exemplo, apresentada mais adiante no artigo, explicaremos de maneira prática o funcionamento básico do FIT. Está fora do escopo deste artigo entrar nos detalhes do FIT. Para isso, ver o artigo Requisitos executáveis com FIT, do Rodrigo Yoshima, da edição 31 da Mundoj. É necessário colocar a lib da FITLibrary no classpath do projeto. O download da lib pode ser feito em Neste artigo, para rodar os testes, utilizamos o plugin do Eclipse FITRunner, que pode ser baixado em Tendo instalado o plugin, basta criar uma nova configuração de Run no Eclipse, indicando a pasta ou o documento HTML de entrada e a pasta de saída (onde serão gerados os HTMLs e os arquivos de relatório sobre a execução dos testes). DbUnit O DbUnit é um framework open-source que permite o gerenciamento 67

3 do estado de um banco de dados durante a execução de um conjunto de testes. Ele permite que um banco de dados possa ser populado com um conjunto de dados antes da execução de um teste e permite que o banco de dados seja restaurado a seu estado original ao término da execução do teste em questão. O DbUnit pode ser baixado em org/. O DbUnit utiliza o conceito de dataset como abstração dos dados utilizados para testes. Geralmente, os datasets são representados sob a forma de arquivos XML, mas existem datasets de planilhas Excel, de resultados de consultas SQL ou até datasets criados programaticamente. Adiante no artigo, veremos como utilizar datasets programaticamente para gerenciar o estado do nosso banco de dados entre as execuções dos testes de integração. Para mais detalhes sobre o DbUnit, consultar o artigo Testes de unidade para camadas de persistência no mundo real, da edição 24 da Mundoj. Testes de integração para camadas de persistência Nesta seção, mostraremos uma abordagem para a criação de testes de integração para a camada de persistência de uma aplicação (o exemplo é bastante simples, apenas para facilitar a explanação da abordagem). Aplicação de exemplo Usaremos como exemplo de motivação um sistema simples de livraria virtual, descrito no Quadro 1. Com os requisitos expressos no Quadro 1, temos o banco de dados com a tabela para armazenamento de livros e também a tabela para armazenamento do valor da cotação das moedas (em reais), conforme mostra o diagrama ER da figura 1. A virtual BookPlus é uma livraria como qualquer outra livraria virtual, ou seja, vende livros na internet. Cada livro possui título, ISBN, autor, preço e categoria. O dono da BookPlus, o seu Rolando Caio da Rocha, é um verdadeiro visionário e, por isso, deseja que o sistema permita que os clientes avaliem os livros com uma nota de 0 a 10 para que outros clientes possam consultar os livros mais bem qualificados. Livro id titulo isbn autor preco categoria Avaliação id_livro (FK) nota Após uma reunião de planejamento com o seu Rolando, nosso Product Owner na terminologia do Scrum (ou cliente sempre presente na terminologia do XP), definimos as seguintes histórias para nossa próxima iteração: como cliente da BookPlus desejo utilizar o sistema para visualizar todos os livros que se enquadrem em uma determinada categoria para que eu possa restringir a busca aos livros de meu interesse. como cliente da BookPlus desejo utilizar o sistema para visualizar todos os livros da livraria por ordem de qualificação (a qualificação de cada livro é dada pela média das notas recebidas). Além disso, para termos um conceito de pronto bem definido e também deixarmos claro o significado de cada história, rascunhamos juntamente com o seu Rolando os seguintes critérios de aceitação para cada uma das histórias (bastante simples e até forçados, apenas a título de ilustração). 1. Temos cadastrados no banco de dados do sistema os seguintes livros: A (informática), B (cristianismo), C (auto-ajuda), D (informática) e E (matemática). Quando o cliente solicitar a exibição dos livros cuja categoria seja informática, o sistema deverá exibir os livros A e D. 2. Temos cadastrados no banco de dados do sistema os seguintes livros: A (informática), B (cristianismo), C (auto-ajuda), D (informática) e E (matemática). Quando o cliente solicitar a exibição dos livros cuja categoria seja ciências, o sistema deverá exibir a mensagem No momento, não possuímos livros na categoria ciências. 1. Assumindo que o livro A possua sete notas 6 e uma nota 8 (qualificação = 6,25), o livro B possua quatro notas 9 e duas notas 5 (qualificação = 7,66), o livro C possua 15 notas 3 (qualificação = 3) e o livro D possua quatro notas 4 (qualificação = 4). Quando o cliente solicitar ao sistema os livros por ordem de qualificação, o sistema deverá retornar os livros B, A, D, C (nesta ordem). A partir dos requisitos expressos por essas duas histórias, chegamos ao modelo de classes exibido na figura 2. Nosso objetivo é testar a camada de persistência da aplicação que, neste caso, é composta apenas pela classe LivroDao. A Listagem 1 contém uma implementação simples para essa classe, usando JPA (obs.: é importante que as classes DAO (Data Access Object) implementem interfaces para promover o isolamento entre a camada de persistência e a camada de negócios, de forma que esta última também possa ser testada isoladamente, através de mocks para os DAOs, por exemplo). O código da classe Livro, por sua simplicidade (possui apenas atributos e getters ), não será exibido. Testes de integração com o FIT Figura 2. Modelo de classes da aplicação. Começaremos escrevendo nossos testes no formato de tabelas do FIT. Qualquer editor que permita criar tabelas HTML é válido. Uma possibilidade é usar 68

4 um editor de textos para editar as tabelas e salvar o documento como arquivo HTML. O formato de escrita do documento (com exceção das tabelas) é livre. A figura 3 exibe nosso documento de testes no formato esperado pela classe de fixture do FIT que utilizaremos. Neste caso, a tabela inicial do documento nos informa que o nome da classe de fixture é br.com.mundoj.livrosfixture. O código desta classe pode ser visualizado na Listagem 2. A classe LivrosFixture herda de DbUnitDoFixture (classe utilitária nossa), que por sua vez herda de DoFixture. Esta última é disponibilizada pela FITLibrary. Usualmente, um teste do FIT costuma ter apenas uma tabela (vinculada à sua respectiva classe de fixture). Neste caso, para atingirmos nossos objetivos de legibilidade, fazemos uso da característica de Flow Mode da DoFixture, a qual permite que os testes possam ser divididos em diversas tabelas. No construtor da classe LivrosFixture, instanciamos o objeto de testes livrodao e o armazenamos num campo da classe. Continuando o processamento do documento HTML, o FIT encontra a tabela cujo header é livros. Com isso, o FIT sabe que deve chamar o método livros() da classe LivrosFixture (o nome deve ser exatamente igual!). Neste método, retornamos um objeto da classe LivrosDbUnitSetup, que é um tipo de SetUpFixture (esta fixture também faz parte da FITLibrary). Pelo fato de o objeto retornado ser uma SetUpFixture, o FIT irá, para cada linha da tabela de livros, chamar o método idtituloisbnautorprecocategoria() (o nome do método procurado é igual aos nomes das colunas da tabela). Este método simplesmente usa um método de uma de nossas classes utilitárias que adiciona os dados na tabela Livro do dataset programático do DbUnit (o esquema da tabela do dataset é definido no construtor de LivrosDbUnitSetup). O código da classe LivrosDbUnitSetup pode ser visualizado na Listagem 3. No construtor dessa classe, especificamos o esquema da tabela à qual ela está associada (tabela de livros) e também registramos um parse delegate através da chamada ao método registerparsedelegate. O delegate é importante para que o FIT saiba tratar a coluna preço, cujo tipo no Java é BigDecimal (conforme consta na assinatura do método idtituloisbnautorprecocategoria() ). Ao ler a célula da tabela e ver o parâmetro correspondente no método idtituloisbnautorprecocategoria(), o FIT procurará um delegate para converter a string lida do HTML no tipo BigDecimal esperado. Esse artifício é útil para podermos trabalhar com objetos arbitrários. Depois disso, o FIT continuará o processamento do arquivo e fará um processamento análogo ao explicado para LivrosDbUnitSetup para inserir os dados de notas na tabela Avaliacao do dataset programático do DbUnit através da classe AvaliacoesDbUnitSetup (esta classe não será exibida por ser bastante semelhante à classe LivrosDbUnitSetup). Listagem 1. Implementação da classe LivroDao. public class LivroDao implements RepositorioLivros { private static final String SELECT_LIVROS_POR_CATEGORIA = SELECT OBJECT(L) + FROM Livro AS L where L.categoria =?1 ; private static final String SELECT_MELHORES_LIVROS = SELECT Livro.* FROM + Livro as L inner join Avaliacao as A on L.id = A.id + order by avg(a.nota) ; private EntityManager entitymanager; public LivroDao(EntityManager entitymanager) { this.entitymanager = unchecked ) public List<Livro> getlivrosporcategoria(string categoria) { Query query = entitymanager.createquery( SELECT_LIVROS_POR_CATEGORIA); query.setparameter(1, categoria); return unchecked ) public List<Livro> getlivrosporordemdequalificacao() { Query query = entitymanager.createnativequery( SELECT_MELHORES_LIVROS, Livro.class); return query.getresultlist(); Listagem 2. Classe de fixture para testar a persistência de livros. public class LivrosFixture extends DbUnitDoFixture { private LivroDao livrodao; // objeto a ser testado public void brdotcomdotmundojdotlivrosfixture() { livrodao = new LivroDao(entityManager); /* * Setup do banco de dados */ public Fixture livros() { DbUnitSetupFixture fixture = new LivrosDbUnitSetup(); adicionarsetupfixture((dbunitsetupfixture) fixture); return fixture; public Fixture avaliacoes() { DbUnitSetupFixture fixture = new AvaliacoesDbUnitSetup(); adicionarsetupfixture((dbunitsetupfixture) fixture); return fixture; /* * Implementação dos cenários de teste */ public List<Livro> livrosdacategoria(string categoria) { return livrodao.getlivrosporcategoria(categoria); public boolean naoexistemlivrosnacategoria(string categoria) { return livrodao.getlivrosporcategoria(categoria).isempty(); public List<Livro> livrosporordemdequalificacao() { return livrodao.getlivrosporordemdequalificacao(); 69

5 Listagem 3. Classe que faz a inserção dos dados de livros no dataset do DbUnit. public class LivrosDbUnitSetup extends DbUnitSetupFixture { private static final Logger logger = Logger.getLogger(LivrosDbUnitSetup.class); public LivrosDbUnitSetup() { super(new DefaultTableMetaData( LIVRO, new Column[] { new Column( ID, DataType.DECIMAL), new Column( TITULO, DataType.CHAR), new Column( ISBN, DataType.CHAR), new Column( AUTOR, DataType.CHAR), new Column( PRECO, DataType.DECIMAL), new Column( CATEGORIA, DataType.CHAR), )); registerparsedelegate(bigdecimal.class, new BigDecimalDelegate()); /** * Insere um registro na tabela LIVRO com os valores dos argumentos passados * como parâmetro. * */ public void idtituloisbnautorprecocategoria(long id, String titulo, String isbn, String autor, BigDecimal preco, String categoria) { if (logger.isdebugenabled()) { logger.debug( Inserindo livro + titulo + no dataset de + testes... ); addfixturedatatotable(id, titulo, isbn, autor, preco, categoria); public static class BigDecimalDelegate { public BigDecimal parse(string preco) { return new BigDecimal(preco.replace(,,. )); Ao chegar na tabela que possui o texto Cenarios de Testes, o FIT chama o método cenariosdetestes() da classe LivrosFixture, que é herdado da nossa classe utilitária DbUnitDoFixture (mais detalhes sobre essa classe mais à frente no artigo). Esse método é um gancho para que as tabelas definidas e populadas anteriormente sejam de fato inseridas no dataset programático do DbUnit e este seja inserido (via operação DatabaseOperation.INSERT do DbUnit) no banco de dados de testes (HSQLDB em memória). Neste ponto, já temos a nossa base de testes em memória com os dados provenientes do documento de testes. Em seguida, o FIT continua o processamento do documento e encontra a primeira tabela do cenário 1. Mais uma vez, o header da tabela será utilizado para acionar o método correspondente da LivrosFixture. Nesse caso, utilizamos uma característica do FIT que nos permite passar parâmetros para o método. A regra é a seguinte: os nomes das colunas pares são utilizados para definir o nome do método a ser chamado e os nomes das colunas ímpares são os argumentos passados como parâmetro para esse método. Sendo assim, o FIT irá executar o método livrosdacategoria(arg) da classe LivrosFixture. Nesse método, fazemos a chamada ao método do DAO que queremos testar (i.e. getlivrosporcategoria ()), retornando a lista com os livros da categoria especificada. Pelo fato de o retorno do método livrosdacategoria(arg) ser uma lista, o FIT irá comparar cada objeto da lista com cada linha da tabela (para isso, ele faz um getnome- DaColuna em cada objeto e compara com o que está na tabela de testes). Não é necessário nenhum assert! Continuando o processamento, o FIT encontrará a tabela seguinte, que fará com que seja acionado o método naoexistemlivrosnacategoria(arg). Nesse caso, chamamos nosso método sendo testado (getlivrosporcategoria()) e esperamos que a lista seja vazia. Pelo fato de o retorno do método ser um booleano, o FIT sabe que deve apenas verificar se o resultado foi true (teste OK) ou false (teste falhou). Por fim, chegamos à última tabela de testes do FIT, já no cenário 2, cujo processamento irá incorrer na chamada ao método livrosporordemdequalificacao() da classe LivrosFixture, cujo funcionamento é similar ao já explicado para os 70

6 testes de obtenção de livros por categoria. Executando os testes do FIT pelo plugin do Eclipse usando nosso documento HTML, veremos o FIT imprimir no console as estatísticas dos nossos testes (cada comparação que ele faz ele considera como um teste): 49 tests passed 0 wrong results 0 exceptions happened 0 tests ignored Com isso, o leitor já tem uma visão geral de como utilizar o FIT em conjunto com o DbUnit e o HSQLDB para fazer testes de integração em camadas de persistência. Pode-se notar que os testes descritos nas tabelas FIT da figura 3 são praticamente uma tradução direta dos critérios de aceitação definidos anteriormente com o cliente. Isso traz o benefício de permitir que o cliente participe de forma mais próxima, colaborando ativamente na elaboração de cenários de testes que validem a aplicação desenvolvida. Nas seções seguintes, mostraremos a configuração feita para utilizar o HSQLDB em memória e também entraremos em mais detalhes nas classes utilitárias da aplicação que fazem de fato a integração entre o FIT e o DbUnit. Configuração do banco de dados de testes Para a execução eficiente dos nossos testes de integração, utilizamos como banco de dados o HSQLDB acessado via JPA/Hibernate. O arquivo de configuração da JPA (persistence.xml) pode ser visualizado na Listagem 4, sendo que as linhas em negrito se encarregam de fazer a configuração específica para que seja utilizado o HSQLDB em memória. A última linha em negrito também é interessante para as classes testes, pois forçam que o Hibernate crie as tabelas (apenas as que possuem classes mapeadas com anotações da JPA) automaticamente para nós. Listagem 4. Persistence.xml. <?xml version= 1.0?> <persistence xmlns= xmlns:xsi= xsi:schemalocation= version= 1.0 > <persistence-unit name= TEST > <provider>org.hibernate.ejb.hibernatepersistence</provider> <properties> <property name= hibernate.archive.autodetection value= class, hbm /> <property name= hibernate.connection.driver_class value= org.hsqldb.jdbcdriver /> <property name= hibernate.connection.url value= jdbc:hsqldb:mem:testdb /> <property name= hibernate.connection.username value= sa /> <property name= hibernate.c3p0.min_size value= 5 /> <property name= hibernate.c3p0.max_size value= 20 /> <property name= hibernate.c3p0.timeout value= 300 /> <property name= hibernate.c3p0.max_statements value= 50 /> <property name= hibernate.c3p0.idle_test_period value= 3000 /> <property name= hibernate.dialect value= org.hibernate.dialect.hsqldialect /> <property name= hibernate.show_sql value= true /> <property name= hibernate.format_sql value= true /> <property name= hibernate.hbm2ddl.auto value= create /> </properties> </persistence-unit> </persistence> Conforme pode ser notado pelo código da Listagem 1, para acessar o banco de dados o LivroDao precisa receber um EntityManager em seu construtor (injeção de dependências, boa prática!). Sendo assim, de onde obtemos um EntityManager? Costuma ser uma prática adotada no mercado (geralmente em aplicações que não são gerenciadas por um servidor de aplicação) criar-se uma classe utilitária para isso. Portanto, criamos a classe JPAUtil, cujo código pode ser visto na Listagem 5. Nesse caso, mantivemos apenas o código usado pelos testes. Repare que, além de ser um ponto de acesso aos EntityManager para o banco de testes, essa classe também faz a criação da tabela de Avaliacoes. Isso acaba sendo necessário porque não temos uma classe Avaliacao mapeada via JPA, então o Hibernate não consegue construir a tabela sozinho. Listagem 5. Classe JPAUtil. public class JPAUtil { private static final String TEST_URL_CONNECTION = jdbc:hsqldb:mem:testdb ; private static final String TEST_JDBC_DRIVER = org.hsqldb.jdbcdriver ; private static final String CRIAR_AVALIACAO = create table Avaliacao( + id_livro decimal, nota double) ; private Connection connection; public EntityManager getentitymanagerfortests() { try { Class.forName(TEST_JDBC_DRIVER); connection = DriverManager.getConnection( TEST_URL_CONNECTION, sa, ); criartabeladeavaliacoesparatestes(connection); return Persistence.createEntityManagerFactory( TEST ).createentitymanager(); catch (Exception e) { throw new PersistenceException( Não foi possível criar a tabela + necessárias para testes..., e); public Connection getconnection() { return connection; private void criartabeladeavaliacoesparatestes(connection connection) throws SQLException { connection.createstatement().execute(criar_avaliacao); 71

7 Classes utilitárias para integração FIT/DbUnit Para finalizar nosso exemplo, ainda nos falta dar uma olhada nas classes utilitárias usadas para fazer a integração entre o FIT e o DbUnit, a saber, as classes DbUnitSetupFixture e DbUnitDoFixture. O código das duas classes está exibido nas Listagens 6 e 7, respectivamente. A classe DbUnitSetupFixture herda de SetUpFixture (fixture da FITLibrary) e deve ser estendida por fixtures cujo objetivo seja fazer inserção de dados no banco de dados de testes. Conforme vimos no exemplo da livraria, ambas as classes LivrosDbUnitSetup e AvaliacoesDbUnitSetup estendem a classe DbUnitSetupFixture para inserir livros e notas no banco, respectivamente. A implementação da classe DbUnitSetupFixture é bem simples. Ela recebe em seu construtor os metadados contendo o esquema da tabela do banco (DefaultTableMetaData faz parte do DbUnit) e usa esse esquema para instanciar uma DefaultTable do DbUnit. As subclasses de DbUnitSetupFixture em seus construtores especificam o esquema de suas respectivas tabelas e passam esse esquema via chamada ao construtor da superclasse. Além disso, ao receber os dados provenientes das tabelas do FIT, as subclasses fazem uma chamada ao método adicionardados- DaFixtureATabela() de DbUnitSetupFixture. Este método adiciona a lista de objetos recebidos como uma linha na tabela do DbUnit. O outro método de DbUnitSetupFixture é o adicionartabelaaodataset(). Esse método é chamado pela DbUnitDoFixture para inserir uma tabela no dataset programático do DbUnit. Como pode ser visto na Listagem 6, quando o FIT chama o método cenariosdetestes() de DbUnitDoFixture, terá início a inserção dos dados que foram acumulados nas tabelas das fixtures de setup. Para isso, instanciamos o dataset (new DefaultDataSet()) e varremos a lista de fixtures de setup chamando o método adicionartabelaaodataset() em cada uma delas. Depois disso, temos nosso dataset pronto para ser inserido no banco de dados usando a operação INSERT do DbUnit: DatabaseOperation.INSERT.execute(new DatabaseConnection(jpaUtil. getconnection()), dataset); Listagem 7. DbUnitDoFixture.java. public class DbUnitDoFixture extends DoFixture { protected EntityManager entitymanager; protected List<DbUnitSetupFixture> setupfixtures; private JPAUtil jpautil; public DbUnitDoFixture() { jpautil = new JPAUtil(); entitymanager = jpautil.getentitymanagerfortests(); setupfixtures = new ArrayList<DbUnitSetupFixture>(); protected void adicionarsetupfixture(dbunitsetupfixture fixture) { setupfixtures.add(fixture); public void cenariosdetestes() { inserirdatasetnobancodedados(); protected void inserirdatasetnobancodedados() { DefaultDataSet dataset = new DefaultDataSet(); Listagem 6. DbUnitSetupFixture.java. public abstract class DbUnitSetupFixture extends SetUpFixture { private final DefaultTable table; public DbUnitSetupFixture(DefaultTableMetaData defaulttablemetadata) { table = new DefaultTable(defaultTableMetaData); for (DbUnitSetupFixture fixture : setupfixtures) { fixture. adicionartabelaaodataset(dataset); try { protected void adicionardadosdafixtureatabela(object... objs) { try { table.addrow(objs); catch (DataSetException e) { throw new IllegalArgumentException(e); DatabaseOperation.INSERT.execute(new DatabaseConnection(jpaUtil.getConnection()), dataset); catch (Exception e) { throw new IllegalStateException( Os dados de setup para os testes protected void adicionartabelaaodataset(defaultdataset dataset) { try { dataset.addtable(table); catch (AmbiguousTableNameException e) { throw new IllegalStateException( Invalid fixture data: + table, e); + de integracao não puderam ser inseridos no banco de + dados., e);

8 Testes de unidade para camadas de persistência O foco neste artigo foi a escrita de testes de integração para camadas de persistência, isto é, testes que fazem uso de um banco de dados. No entanto, é perfeitamente possível escrevermos verdadeiros testes de unidade para nossos DAOs. Para isso, basta configurar mocks para as interfaces EntityManager e Query da JPA com as devidas expectativas e fazer os testes. A Listagem 8 traz um exemplo dessa abordagem, usando os frameworks JUnit e EasyMock. Como o leitor pode perceber, o teste com mocks neste caso é bastante simples e limitado, pois acaba testando apenas se os parâmetros foram passados adequadamente na montagem da query. Para testar os aspectos mais importantes, como sintaxe e semântica das queries, é importante que empreguemos uma abordagem baseada em testes de integração, efetivamente passando por um banco de dados. Testes de unidade para objetos que acessam banco de dados podem ser uma opção (complementar aos testes de integração) para reduzir o ciclo de feedback numa abordagem baseada em TDD, por exemplo. Eles também têm a vantagem de permitir simular com mais facilidade certas circunstâncias e situações por meio de mocks (por exemplo, simular a falha temporária de uma conexão). Listagem 8. Exemplo de teste de unidade para a classe LivroDao. public class LivroDaoTest { private LivroDao dao; private EntityManager mockentitymanager; Saber mais Testes unitários para camadas de negócios no mundo real, edição 23 da Mundoj. Testes de unidade para camadas de persistência no mundo real, edição 24 da Mundoj. Requisitos executáveis com FIT, edição 31 da Mundoj. Considerações finais (ver referências). Escrever testes automatizados para uma aplicação é uma tarefa desafiadora, que exige conhecimento e domínio de diversas técnicas e ferramentas. Neste artigo, mostramos uma abordagem para escrever testes de integração eficientes e expressivos para a camada de persistência de uma aplicação, utilizando HSQLDB, FIT e DbUnit. Neste caso, os testes de integração criados foram consequência direta dos critérios de aceitação definidos com o cliente, o que também pode caracterizá-los como uma implementação de testes de aceitação (neste caso, as camadas superiores da aplicação foram desconsideradas no teste, devendo ser endereçadas com testes de aceitação end-to-end [de ponta a ponta] complementares). Por fim, mostramos ainda como tratar o problema dos testes de persistência usando também testes de unidade e as vantagens e desvantagens dessa abordagem. Como sempre, é importante que o bom profissional conheça as possibilidades e saiba aproveitar o melhor de cada uma dependendo de seu problema específico. Vês a um homem perito na sua obra? Perante reis será posto, não entre a plebe. (Pv 22:29) private Query public void onetimesetup() throws Exception { mockentitymanager = createstrictmock(entitymanager.class); mockquery = createstrictmock(query.class); dao = new public void testgetlivrosporcategoria() { List<Livro> livrosdeinformatica = construirlistadelivrosdeinformatica(); expect(mockentitymanager.createquery( SELECT OBJECT(L) FROM Livro + AS L where L.categoria =?1 )).andreturn(mockquery); expect(mockquery.setparameter(1, Informática )).andreturn(mockquery); expect(mockquery.getresultlist()).andreturn(livrosdeinformatica); Referências ment replay(mockentitymanager, mockquery); assertequals(livrosdeinformatica, dao.getlivrosporcategoria( Informática )); verify(mockentitymanager, mockquery); private List<Livro> construirlistadelivrosdeinformatica() { return Arrays.asList(new Livro(1L, Java 1, 123, José, new BigDecimal( ), Informática ), new Livro(2L, Java 2, 456, João, new BigDecimal( ), Informática ));

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Curso: Sistemas de Informações Arquitetura de Software Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 7 JPA A Persistência com JPA Para configurar o JPA

Leia mais

Evolução do Design através de Testes e o TDD

Evolução do Design através de Testes e o TDD c a p a Lucas Souza (lucas.souza@caelum.com.br): é bacharel em Engenharia da Computação pela Universidade de Ribeirão Preto, possui a certificação SCJP e trabalha com Java há 4 anos. Atualmente é desenvolvedor

Leia mais

JPA: Persistência padronizada em Java

JPA: Persistência padronizada em Java JPA: Persistência padronizada em Java FLÁVIO HENRIQUE CURTE Bacharel em Engenharia de Computação flaviocurte.java@gmail.com Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

Persistindo dados com TopLink no NetBeans

Persistindo dados com TopLink no NetBeans Persistindo dados com TopLink no NetBeans O que é TopLink? O TopLink é uma ferramenta de mapeamento objeto/relacional para Java. Ela transforma os dados tabulares de um banco de dados em um grafo de objetos

Leia mais

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola)

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola) cinto de utilidades mocks_ CRIAÇÃO DE MOCKS COM MOCKITO No último artigo desta coluna, falamos de uma forma geral sobre diversas ferramentas para suporte a testes automatizados. Dentre as ferramentas mencionadas,

Leia mais

Mapeamento Lógico/Relacional com JPA

Mapeamento Lógico/Relacional com JPA Mapeamento Lógico/Relacional com JPA Elaine Quintino da Silva Doutora em Ciência da Computação pelo ICMC-USP/São Carlos Analista de Sistemas UOL PagSeguro Instrutora Globalcode Agenda! Persistência de

Leia mais

Classes de Entidades Persistentes JDB

Classes de Entidades Persistentes JDB Classes de Entidades Persistentes JDB Brasil, Natal-RN, 07 de setembro de 2011 Welbson Siqueira Costa www.jdbframework.com Nota de Retificação: em 11/12/2011 a Listagem 3 desse tutorial sofreu uma pequena

Leia mais

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Banco de Dados Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Roteiro Mapeamento de objetos para modelo relacional Estratégias de persistência Persistência JDBC Mapeando Objetos para o Modelo Relacional

Leia mais

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais Curso de Java Acesso a banco de dados através do Hibernate Todos os direitos reservados Klais Motivação Java é uma linguagem orientada a objetos: Numa aplicação, o uso de objetos é um recurso importante

Leia mais

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Robson Adão Fagundes http://robsonfagundes.blogspot.com/ Mini curso Desenvolvimento de aplicação

Leia mais

Lidando de Forma Eficiente com Validações Locais de Objetos

Lidando de Forma Eficiente com Validações Locais de Objetos Lidando de Forma Eficiente com Validações Locais de Objetos Aprenda a construir um mini-framework para validar objetos locais sem afetar a complexidade do código. Autor Paulo César M. N. A. Coutinho (pcmnac@gmail.com):

Leia mais

JPA Java Persistence API. Prof. Ramon Chiara

JPA Java Persistence API. Prof. Ramon Chiara JPA Java Persistence API Prof. Ramon Chiara JDBC Java DataBase Connectivity Acesso a bancos de dados Independência de banco de dados JDBC Aplicação JDBC Driver Banco de Dados JDBC Java DataBase Connectivity

Leia mais

Unidade 9: Middleware JDBC para Criação de Beans

Unidade 9: Middleware JDBC para Criação de Beans Programação Servidor para Sistemas Web 1 Unidade 9: Middleware JDBC para Criação de Beans Implementando MVC Nível 1 Prof. Daniel Caetano Objetivo: Preparar o aluno para construir classes de entidade com

Leia mais

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Manipulação de Banco de Dados com Java Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Acesso a um SGBD Em sistemas mais simples o uso de arquivos pode ser usado mas para aplicações

Leia mais

ruirossi@ruirossi.pro.br

ruirossi@ruirossi.pro.br Persistência Com JPA & Hibernate Rui Rossi dos Santos ruirossi@ruirossi.pro.br Mediador: Rui Rossi dos Santos Slide 1 Mapeamento Objeto-Relacional Contexto: Linguagem de programação orientada a objetos

Leia mais

Persistência de Dados em Java com JPA e Toplink

Persistência de Dados em Java com JPA e Toplink Persistência de Dados em Java com JPA e Toplink Vinicius Teixeira Dallacqua Curso de Tecnologia em Sistemas para Internet Instituto Federal de Educação, Ciência e Tecnologia - IFTO AE 310 Sul, Avenida

Leia mais

Persistência de dados com JPA. Hélder Antero Amaral Nunes haanunes@gmail.com

Persistência de dados com JPA. Hélder Antero Amaral Nunes haanunes@gmail.com Persistência de dados com JPA Hélder Antero Amaral Nunes haanunes@gmail.com O que é persistência? A persistência de dados é o fato de pegar um dado e torná-lo persistente, ou seja, salvar em algum banco

Leia mais

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE Aluno: Roberto Reinert Orientador: Everaldo A. Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Workflow Processo

Leia mais

Criar uma aplicação JPA2 com EclipseLink e H2

Criar uma aplicação JPA2 com EclipseLink e H2 Criar uma aplicação JPA2 com EclipseLink e H2 1) Criar uma aplicação Java no NetBeans. File > New Project > Java, Java Application > Project name: JPA2 Finish. 2) Acrescentar ao Projeto NetBeans a biblioteca

Leia mais

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com)

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com) JDBC Prof. Márcio Bueno (poonoite@marciobueno.com) JBDC Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que faz o envio de instruções SQL para qualquer banco

Leia mais

Java e Banco de Dados: JDBC, Hibernate e JPA

Java e Banco de Dados: JDBC, Hibernate e JPA Java e Banco de Dados: JDBC, Hibernate e JPA 1 Objetivos Apresentar de forma progressiva as diversas alternativas de persistência de dados que foram evoluindo na tecnologia Java, desde o JDBC, passando

Leia mais

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5. Desenvolvendo aplicações em camadas com PHP 5. Talvez a primeira vista você ache estranha a palavra Camada em programação, mas o que vem a ser Camada? Segundo o dicionário: Camada 1 - Qualquer matéria

Leia mais

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44 Armazenando Dados em Aplicações Java Parte 2 de 3: Apresentando as opções Hua Lin Chang Costa, hualin@cos.ufrj.br, COPPE/UFRJ. Leonardo Gresta Paulino Murta, leomurta@ic.uff.br, IC/UFF. Vanessa Braganholo,

Leia mais

Tutorial: Técnicas de Geração de Relatórios com JasperReports

Tutorial: Técnicas de Geração de Relatórios com JasperReports Tutorial: Técnicas de Geração de Relatórios com JasperReports Uma abordagem utilizando a ferramenta de design ireport PABLO BRUNO DE MOURA NÓBREGA Fortaleza CE, fevereiro de 2009 http://pablonobrega.wordpress.com

Leia mais

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES Conteúdo O Projeto... 2 Criação de Pacotes... 4 Factory:... 6 DAO:... 15 GUI (Graphical User Interface ou Interface Gráfica de Cadastro)... 18 Evento SAIR... 23 Evento CADASTRAR... 24 1 O Projeto Arquivo

Leia mais

Requisitos Executáveis: O modelo FIT / FitNesse

Requisitos Executáveis: O modelo FIT / FitNesse Requisitos Executáveis: O modelo FIT / FitNesse Jorge Diz Globalcode 57 Encontro do SPIN-SP Slide 1 Instrutor Jorge Alberto Diz ( 95 Mestre em Eng. Elétrica (UNICAMP ( 89 Bach. em Ciência da Computação

Leia mais

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. JDBC CRIANDO O BANCO DE DADOS: Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. CRIANDO O PROJETO JAVA PARA DESKTOP: Crie um projeto Java chamado Prograd Crie um pacote chamado

Leia mais

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC Módulo 5 No módulo anterior adaptamos nosso projeto para persistir as informações no banco de dados utilizando as facilidades da extensão demoiselle-jpa. Experimentamos o controle transacional do Framework

Leia mais

Drive MySql de conexão para Eclipse

Drive MySql de conexão para Eclipse Drive MySql de conexão para Eclipse de Setembro de 0 Olá, neste artigo iremos focar em como utilizar o drive de conexão do Mysql na IDE eclipse. Veremos passo-a-passo como instalar, o que é uma coisa muito

Leia mais

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

Leia mais

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel Acesso a Banco Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel As conexões em Java são feitas através de uma ponte que implementa todas as funcionalidades que um banco de dados padrão deve

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado ARQUITETURA SISGRAD Manual de Utilização Versão: 2.0 Criação: 05 de julho de 2007 Autor: André Penteado Última Revisão: 09 de outubro de 2009 Autor: Alessandro Moraes Controle Acadêmico - Arquitetura SISGRAD

Leia mais

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC Java Database Connectivity Provê acesso SQL ao banco de dados Principais

Leia mais

Tecnologias Java JDBC. Marcio Seiji Oyamada msoyamada@gmail.com

Tecnologias Java JDBC. Marcio Seiji Oyamada msoyamada@gmail.com Tecnologias Java JDBC Marcio Seiji Oyamada msoyamada@gmail.com JDBC JDBC: Java Database Connectivity API Java para acessar dados armazenados em um Banco de Dados Conectar a um banco dados Enviar consultas

Leia mais

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF) Sessão Prática II JPA entities e unidades de persistência 1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF) a) Criar um Web Application (JPAsecond) como anteriormente:

Leia mais

Auditando persistência com JPA

Auditando persistência com JPA a r t i g o Em ambientes corporativos, a auditoria sobre as operações de banco de dados é importantíssima, quando não, indispensável. Essa importância surge a partir de um conjunto de necessidades, como:

Leia mais

Auditoria Avançada de Persistência com Hibernate, JPA e Envers

Auditoria Avançada de Persistência com Hibernate, JPA e Envers a r t i g o José Yoshiriro Ajisaka Ramos (jyoshiriro@gmail.com): bacharel em Sistema de Informação (IESAM). Mestrando em Ciência da Computação (UFPA). Instrutor na Equilibrium Web e na UAB. Engenheiro

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

(UFF) JDBC (I) TEPIS II

(UFF) JDBC (I) TEPIS II Aula 20: JDBC (I) Diego Passos Universidade Federal Fluminense Técnicas de Projeto e Implementação de Sistemas II Diego Passos (UFF) JDBC (I) TEPIS II 1 / 33 JDBC: Introdução Especificação que provê acesso

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Mini-Tutorial. Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti.

Mini-Tutorial. Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti. Mini-Tutorial Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti.br 1. Introdução O objetivo deste trabalho é mostrar de forma prática como

Leia mais

Leonardo Gresta Paulino Murta leomurta@gmail.com

Leonardo Gresta Paulino Murta leomurta@gmail.com Leonardo Gresta Paulino Murta leomurta@gmail.com O Que é JDBC? API de acesso a banco de dados relacional do Java Faz uso do driver provido pelo banco de dados Roda SQL (create, insert, update, etc.) no

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

Aula 4. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com)

Aula 4. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) Persistência com JDBC e JPA Aula 4 Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) A sabedoria não se transmite, é preciso que nós a descubramos fazendo uma caminhada que ninguém

Leia mais

Java Exemplo MDI. Tela Principal

Java Exemplo MDI. Tela Principal Java Exemplo MDI Nesta aula criaremos uma aplicação simples de cadastro para avaliar o nível de dificuldade/facilidade que é desenvolver softwares com a tecnologia Java. No NetBeans, crie um novo projeto

Leia mais

Analisando a performance das Estratégias que realizam o Mapeamento Objeto Relacional no JPA

Analisando a performance das Estratégias que realizam o Mapeamento Objeto Relacional no JPA a r t i g o Analisando a performance das Estratégias que realizam o Mapeamento Objeto Relacional no JPA Analisando a performance das estratégias do mapeamento objeto relacional na prática Douglas Rocha

Leia mais

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education JPA Passo a Passo Henrique Eduardo M. Oliveira henrique@voffice.com.br 1 Palestrante Henrique Eduardo M. Oliveira (henrique@voffice.com.br) > Trabalha: Arquiteto JEE / Instrutor Java > Formação: Ciências

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

DEFINIÇÃO DE MÉTODOS

DEFINIÇÃO DE MÉTODOS Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 2 DEFINIÇÃO DE MÉTODOS Todo o processamento que um programa Java faz está definido dentro dos

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

Leia mais

GUIA RÁPIDO DE UTILIZAÇÃO DO APLICATIVO RDB2LOD

GUIA RÁPIDO DE UTILIZAÇÃO DO APLICATIVO RDB2LOD GUIA RÁPIDO DE UTILIZAÇÃO DO APLICATIVO RDB2LOD Em sua versão inicial, o aplicativo RDB2LOD foi desenvolvido para instalação e execução em ambiente de máquina virtual Java, e oferece suporte aos SGBDs

Leia mais

Banco de Dados. Prof. Leonardo Barreto Campos 1

Banco de Dados. Prof. Leonardo Barreto Campos 1 Banco de Dados Prof. Leonardo Barreto Campos 1 Sumário Introdução; Banco de Dados Relacionais; SQL; MySQL; Manipulando Banco de Dados com o JDBC; Bibliografia; Prof. Leonardo Barreto Campos 2/25 Introdução

Leia mais

Padrões de Projeto e Persistência com DAO

Padrões de Projeto e Persistência com DAO Curso de Análise de Sistemas Análise de Sistemas II Padrões de Projeto e Persistência com DAO Prof. Giuliano Prado de Morais Giglio, M.Sc. Introdução a Padrões de Projeto Padrões de Projeto foram inicialmente

Leia mais

Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO

Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO POO Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO Marcelo Santos Daibert (marcelo@daibert.net) é professor do Curso de Bacharelado

Leia mais

: : www.mundoj.com.br : :

: : www.mundoj.com.br : : : : www.mundoj.com.br : : Marcelo Zeferino (marceloczeferino@gmail.com): formado em análise de sistemas, atua com TI desde 1999 e já participou de projetos de software para grandes organizações como Fundação

Leia mais

Programação Orientada a Objetos JDBC Java Database Connectivity

Programação Orientada a Objetos JDBC Java Database Connectivity Especialização em Engenharia de Software Programação Orientada a Objetos JDBC Java Database Connectivity Sérgio Soares scbs@cin.ufpe.br Objetivos Apresentar os conceitos básicos da especificação de Java

Leia mais

Microsoft Visual Studio 2010 C# Volume II

Microsoft Visual Studio 2010 C# Volume II Microsoft Visual Studio 2010 C# Volume II Apostila desenvolvida pelos Professores Ricardo Santos de Jesus e Rovilson de Freitas, para as Disciplinas de Desenvolvimento de Software I e II, nas Etecs de

Leia mais

Aula 1 Acesso a Banco de Dados

Aula 1 Acesso a Banco de Dados Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados Prof. Josenildo Silva jcsilva@ifma.edu.br Introdução O JDBC (Java Database Connectivity) foi criado com o intuito de fornecer aos programadores

Leia mais

Servidores REST usando TMS Aurelius e DataSnap

Servidores REST usando TMS Aurelius e DataSnap Servidores REST usando TMS Aurelius e DataSnap Introdução Em artigo anterior a framework na Active Delphi, apresentados o TMS Aurelius, uma framework para mapeamento objeto-relacional (ORM) e mostramos

Leia mais

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert UNIOESTE Universidade Estadual do Oeste do Paraná CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Colegiado de Informática Curso de Bacharelado em Informática Sistema Gerenciador de Hotel Adriano Douglas Girardello

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com Hibernate Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com Hibernate O que é? Ferramenta para mapeamento O/R em Java Uma das mais difundidas Transparência Independência quanto ao tipo de base

Leia mais

Persistência de Classes em Tabelas de Banco de Dados

Persistência de Classes em Tabelas de Banco de Dados UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução! Em algumas situações, pode ser necessário preservar os objetos

Leia mais

Framework utilizando reflexão e aspectos para persistência de objetos em java

Framework utilizando reflexão e aspectos para persistência de objetos em java Framework utilizando reflexão e aspectos para persistência de objetos em java Antonio Carlos Rolloff (UNIPAR) acrolloff@gmail.com Arthur Cattaneo Zavadski (UNIPAR) arthur@datacoper.com.br Maria Aparecida

Leia mais

Resolvendo objeto-relacional impedance mismatch com hibernate

Resolvendo objeto-relacional impedance mismatch com hibernate Resolvendo objeto-relacional impedance mismatch com hibernate August 7, 2013 Sumário I 1 Introdução 2 3 4 Sumário II 5 Contexto Mapeamento Objeto-Relacional (ORM) é uma técnica de programação para converter

Leia mais

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Ao projetar uma aplicação Web, é importante considerála como sendo formada por três componentes lógicos: camada

Leia mais

Testes Automatizados. : : COLUNA Cinto de Utilidades: :

Testes Automatizados. : : COLUNA Cinto de Utilidades: : : : COLUNA Cinto de Utilidades: : Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola): é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática

Leia mais

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações Java Persistence API Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações Entity Manager Entity Manager API Java Persistence Query Language (JPQL) Persistence Units 1 Java Persistence

Leia mais

LexML Brasil. Parte 4a Kit Provedor de Dados

LexML Brasil. Parte 4a Kit Provedor de Dados LexML Brasil Parte 4a Kit Provedor de Dados Versão 1.0 (RC1) Brasília Fevereiro de 2011 Parte 4a Kit Provedor de Dados 2 LexML Brasil Parte 4a Kit Provedor de Dados Versão 1.0 (Maio/2010) 1. Introdução...

Leia mais

TUTORIAL DE INTRODUÇÃO AO CEWOLF

TUTORIAL DE INTRODUÇÃO AO CEWOLF 1 TUTORIAL DE INTRODUÇÃO AO CEWOLF CRIANDO GRÁFICOS COM JSP, CEWOLF/JFREECHART E MYSQL 1. Introdução O Cewolf (http://cewolf.sourceforge.net/) é uma biblioteca que facilita a criação de gráficos dinâmicos

Leia mais

Desmistificando o Hibernate Envers em 10 passos

Desmistificando o Hibernate Envers em 10 passos _envers Desmistificando o Hibernate Envers em 10 passos Auditoria de dados? Registro de Log? Trilha de auditoria? Descubra como é fácil, através do Hibernate Envers, rastrear o histórico de mudanças e

Leia mais

HIBERNATE Criando um projeto em Java + Hibernate do zero

HIBERNATE Criando um projeto em Java + Hibernate do zero HIBERNATE Criando um projeto em Java + Hibernate do zero SUMÁRIO 1 Instalação do NetBeans 2 Instalação do Java Development Kit (JDK) 3 Criar projeto no NetBeans 4 O arquivo hibernate.cfg.xml 5 Criar as

Leia mais

Padrão J2EE Data Access Object (DAO)

Padrão J2EE Data Access Object (DAO) Introdução CRUD DAO Exemplo Padrão J2EE Data Access Object (DAO) Prof. Enzo Seraphim Motivação para usar Componentes precisam acessar e armazenar informações em armazenamento persistente As APIs de armazenamento

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

Documentação Usando o Javadoc

Documentação Usando o Javadoc Documentação Usando o Javadoc Prof. MSc. João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão 2.1 Última Atualização: 04/2005 1 Comentários e Documentação Comentários em Java Existem três tipos de comentários

Leia mais

Introdução à JPA-Java Persistence API

Introdução à JPA-Java Persistence API Introdução à JPA-Java Persistence API Prof. Pasteur Ottoni de Miranda Jr. DCC PUC Minas www.pasteurjr.blogspot.com 1-Entidades São objetos de domínio de problema persistentes. Representam uma tabela em

Leia mais

HIBERNATE EM APLICAÇÃO JAVA WEB

HIBERNATE EM APLICAÇÃO JAVA WEB HIBERNATE EM APLICAÇÃO JAVA WEB Raul Victtor Barbosa Claudino¹, Ricardo Ribeiro Rufino¹ ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil victtor.claudino@gmail.com, ricardo@unipar.br Resumo: Este

Leia mais

Manipulação de Banco de Dados com Java 1. Objetivos

Manipulação de Banco de Dados com Java 1. Objetivos Manipulação de Banco de Dados com Java 1. Objetivos Demonstrar os fundamentos básicos para a manipulação de banco de dados com Java; Apresentar a sintaxe de comandos SQL usados em Java. 2. Definições A

Leia mais

Acesso a Bancos de Dados em Java (JDBC)

Acesso a Bancos de Dados em Java (JDBC) Acesso a Bancos de Dados em Java (JDBC) Jomi Fred Hübner Universidade Regional de Blumenau Departamento de Sistemas e Computação Roteiro Introdução Objetivo da JDBC Vantagens Visão geral do acesso a SGBDs

Leia mais

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB. Anne Caroline O. Rocha Tester Certified BSTQB NTI UFPB

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB. Anne Caroline O. Rocha Tester Certified BSTQB NTI UFPB Testes de Software 1 AULA 04 FERRAMENTAS DE AUTOMAÇÃO DE TESTES FUNCIONAIS Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB Conteúdo Programático Aula 04 Automação de testes funcionais Ferramentas

Leia mais

MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java

MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java Leonardo Gresta Paulino Murta Gustavo Olanda Veronese Cláudia Maria Lima Werner {murta, veronese, werner}@cos.ufrj.br COPPE/UFRJ Programa

Leia mais

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M JAVA Marcio de Carvalho Victorino 1 JDBC - Java Database Connectivity 2 1 JDBC conceito JDBC é uma API (Application Program Interface) para acesso a SGBD s (Sistemas Gerenciadores de Banco de Dados) relacionais

Leia mais

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB Testes de Software 1 AULA 03 FERRAMENTAS DE AUTOMAÇÃO DE TESTES Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB Conteúdo Programático Aula 03 O que é automação de testes? Conceitos de automação de

Leia mais

Tutorial - Programando com o MIOLO

Tutorial - Programando com o MIOLO Tutorial - Programando com o MIOLO Conceitos Básicos Antes de iniciar a programação com o Miolo é fundamental compreender alguns conceitos básicos: - Uma aplicação no Miolo é constituída de um ou mais

Leia mais

Guião de Introdução ao Eclipse IDE Índice

Guião de Introdução ao Eclipse IDE Índice Índice 1. Introdução... 2 1.1. O que é um ambiente de desenvolvimento (IDE)?... 2 1.2. Visão geral sobre o Eclipse IDE... 2 2. Iniciar o Eclipse... 3 2.1. Instalação... 3 2.2. Utilizar o Eclipse... 3 3.

Leia mais

Integrando Java com Banco de Dados

Integrando Java com Banco de Dados Especialização em Engenharia de Software Programação Orientada a Objetos JDBC Java Database Connectivity Sérgio Soares scbs@cin.ufpe.br Objetivos Apresentar os conceitos básicos da especificação de Java

Leia mais

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código } Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver

Leia mais

Aula 5. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com)

Aula 5. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) Persistência com JDBC e JPA Aula 5 Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) Quem é sábio procura aprender, mas os tolos estão satisfeitos com a sua própria ignorância..

Leia mais

Introdução. Tutorial do Xdoclet. Resumo

Introdução. Tutorial do Xdoclet. Resumo Tutorial do Xdoclet Resumo Apresentar a ferramenta XDoclet uma ferramenta utilizada como tarefa (task) do Jakarta Ant que permite executar e criar templates para gerar arquivos, inclusive código Java,

Leia mais

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona alcides.pamplona@gmail.com Tópicos API JDBC Utilizando JDBC Statement PreparedStatement Mapeamento Objeto-Relacional 2 API JDBC 3 API

Leia mais

PROJETO PEDAGÓGICO DE CURSOS

PROJETO PEDAGÓGICO DE CURSOS 1 de 6 PROJETO PEDAGÓGICO DE CURSOS BURITREINAMENTOS MANAUS-AM MARÇO / 2015 2 de 6 PACOTES DE TREINAMENTOS BURITECH A Buritech desenvolveu um grupo de pacotes de treinamentos, aqui chamados de BuriPacks,

Leia mais

para persistência de objetos na Google App Engine

para persistência de objetos na Google App Engine capa_ Usando JSON para persistência de objetos na Google App Engine A criação de aplicações de larga escala com dados distribuídos exige que repensemos nossos modelos de persistência de objetos. Ambientes

Leia mais

Exemplo25 Leitura de dados de arquivos txt. Passos para a elaboração da aplicação:

Exemplo25 Leitura de dados de arquivos txt. Passos para a elaboração da aplicação: Exemplo25 Leitura de dados de arquivos txt Passos para a elaboração da aplicação: 1. Faça um arquivo texto usando o Bloco de Notas obedecendo a uma estrutura de linhas e colunas de dados, conforme mostra

Leia mais

Autenticação e Autorização

Autenticação e Autorização Autenticação e Autorização Introdução A segurança em aplicações corporativas está relacionada a diversos aspectos, tais como: autenticação, autorização e auditoria. A autenticação identifica quem acessa

Leia mais

Java Persistence API (JPA)

Java Persistence API (JPA) Java Persistence API (JPA) Você já percebeu que gravar informações num banco de dados usando puramente JDBC dá muito trabalho. Mas, não só você como também um grupo de pessoas já passaram pela mesma experiência

Leia mais