JPA 2: os novos recursos inspirados no Hibernate

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

Download "JPA 2: os novos recursos inspirados no Hibernate"

Transcrição

1 artigo JPA 2: os novos recursos inspirados no Hibernate A JPA 2.0 está apta a permitir todos os poderosos recursos que utilizamos do Hibernate? Paulo Silveira (paulo.silveira@caelum.com.br): é bacharel e mestre em Ciência da Computação pela USP, trabalha com Java há 10 anos, sendo 5 anos com consultoria, desenvolvimento e treinamento na Caelum. Raphael Lacerda (raphael.lacerda@caelum.com.br): é bacharel em Ciência da Computação pela Universidade Católica de Brasília, analista de sistemas do Banco do Brasil e instrutor da unidade Caelum Brasília. Possui as certificações SCJP 5.0 e SCWCD 5.0. A JPA 1.0 foi um grande passo: uma API baseada na experiência e sucesso do Hibernate para interfacear as diversas ferramentas ORM existentes no mercado. Mesmo com ela, muitos recursos específicos do Hibernate como Criteria, Second Level Cache, entre outros, não estavam disponíveis, fazendo com que frequentemente precisássemos acessar o framework diretamente. Como fica isso na JPA 2.0? O EJB3 ajudou a popularizar as ferramentas de mapeamento objeto-relacional (ORMs), que careciam de uma especificação dentro do Java EE. Uma tentativa mais abrangente, o Java Data Objects (JDO), ocorreu previamente sem alcançar muito sucesso. Um dos principais fatos que fez a Java Persistence API 1.0 (JPA) suceder foi, sem sombra de dúvidas, ter se baseado no que o mercado já estava adotando em larga escala: o Hibernate. Apesar de ser mais popular que a JDO, a JPA 1.0 não possui uma série de recursos um tanto populares entre os usuários do Hibernate. Podemos citar dois em especial: a forma orientada a objetos de pesquisa (Criterias) e o cache de entidades entre diferentes EntityManagers (2nd level cache). Será que a JPA 2.0 cobre bem esses aspectos, de tal forma que teremos uma real liberdade de escolha entre as implementações de JPA? As implementações da JPA 2.0 Para usarmos a JPA 2.0, precisamos de um persistence provider. Temos diversas opções, como o Hibernate, a OpenJPA e o EclipseLink. O Hibernate está em sua versão 3.5 beta2, sem a implementação de alguns recursos de Criteria aqui explorados. Usaremos o EclipseLink como exemplo que, além de ser a implementação de referência do Java EE 6, é um excelente teste para saber se os clássicos recursos presentes no Hibernate estão sendo bem implementados em outros providers.

2 Usando o EclipseLink e nosso modelo de classes Para utilizar a JPA 2.0 com o EclipseLink, basta você criar um projeto que contenha o eclipselink.jar, o jar da javax.persistence (que vem no pacote do EclipseLink) e o driver JDBC do seu banco de dados no build path do seu projeto. Além disso, você precisa configurar o persistence.xml dentro do META-INF (no eclipse, basta criar esse diretório dentro do seu src, que ele será criado no bin). A Listagem 1 mostra o persitence.xml configurado para o MySQL. Repare que muitas das propriedades foram padronizadas (não iniciam mais com hibernate ou eclipselink). Apenas as mais específicas dependem do provider que você está utilizando. As Listagens 2 e 3 mostram as classes Fornecedor e ContaPagar, que formam um relacionamento one-to-many bidirecional, mapeadas com as anotações já conhecidas da JPA 1.0, que serão utilizadas nos nossos testes. As Listagens 4 e 5 mostram uma simples classe JPAUtil apenas para facilitar nossos exemplos (no projeto, deve-se utilizar injeção de dependências para quem precisar de um EntityManager) além de uma superclasse para os testes dos nossos DAOs, que populam o banco de dados. Esse teste, somado a opção drop-and-create-tables do persistence.xml, faz com que uma pequena base seja populada para usarmos nas asserções. Esse superteste já utiliza do método save dos DAOs que veremos a seguir. Listagem 1. Persistence.xml. <persistence xmlns= xmlns:xsi= xsi:schemalocation= java.sun.com/xml/ns/persistence/persistence_2_0.xsd version= 2.0 > <persistence-unit name= caelum > <class>br.com.caelum.fornecedor</class> <class>br.com.caelum.contapagar</class> <properties> <property name= javax.persistence.jdbc.driver value= com.mysql.jdbc.driver /> <property name= javax.persistence.jdbc.url value= jdbc:mysql://localhost/caelum /> <property name= javax.persistence.jdbc.user value= root /> <property name= javax.persistence.jdbc.password value= /> <property name= eclipselink.ddl-generation value= drop-and-create-tables /> <property name= eclipselink.ddl-generation.output-mode value= database /> <property name= eclipselink.logging.level value= FINE /> </properties> </persistence-unit> </persistence> Listagem 2. Atributos da entidade public class private int id; private String fornecedor ) private List<ContaPagar> contas; // além de construtores auxiliares e getters Listagem 3. Atributos da entidade public class private int id; Criteria private String descricao; private Double private Fornecedor fornecedor; // além de construtores auxiliares e getters Listagem 4. Uma classe JPAUtil apenas para nossos testes. public class JPAUtil { private static EntityManagerFactory factory; public static EntityManager openmanager() { if (factory == null) factory = Persistence.createEntityManagerFactory( caelum ); return factory.createentitymanager(); public static void terminate() { factory.close(); factory = null; No Hibernate, é bem fácil criar um objeto que realizará uma pesquisa para retornar todos os fornecedores da nossa base de dados: session.createcriteria(fornecedor.class).list(); Como fica essa query com a JPA 2.0? A Listagem 6 mostra ela em uma forma minimal, que pode assustar no começo. Para dar um grande poder ao Criteria, a JPA 2.0 pode parecer um pouco verborrágica para quem estava acostumado com o modo sucinto do Hibernate. Se quisermos buscar por todos os valores de todas as contas a pagar do nosso sistema, no Hibernate podemos fazer uma Criteria como a seguinte: Projection property = Projections.property( valor ); session.createcriteria(contapagar.class).setprojection(property).list(); Já usando a JPA 2.0, utilizamos os selects em vez de projections. Para realizar a mesma pesquisa, devemos utilizar a Criteria do ContaPagarDAO mostrada na Listagem

3 Listagem 5. A superclasse dos nossos testes que popula a base. public class DaoTest { protected FornecedorDao fornecedordao; protected ContaPagarDao contadao; protected EntityManager public void setup() { this.manager = JPAUtil.openManager(); this.manager.gettransaction().begin(); this.fornecedordao = new FornecedorDao(manager); this.contadao = new ContaPagarDao(manager); // utilizando construtores auxiliares Fornecedor f1 = new Fornecedor( kalunga ); Fornecedor f2 = new Fornecedor( supervinhos ); Fornecedor f3 = new Fornecedor( saraiva ); ContaPagar cp1 = new ContaPagar( resmas, 100, f1); ContaPagar cp2 = new ContaPagar( canetas, 250, f1); ContaPagar cp3 = new ContaPagar( livros, 300, f3); this.fornecedordao.save(f1); this.fornecedordao.save(f2); this.fornecedordao.save(f3); this.contadao.save(cp1); this.contadao.save(cp2); this.contadao.save(cp3); public void teardown() { this.manager.close(); JPAUtil.terminate(); Listagem 6. FornecedorDAO e método para listar todos os fornecedores. public class FornecedorDao { private final EntityManager manager; public FornecedorDao(EntityManager manager) { this.manager = manager; Listagem 7. ContaPagarDAO e método para listar todos valores das contas(projection). public class ContaPagarDao { private final EntityManager manager; public ContaPagarDao(EntityManager manager) { this.manager = manager; public void save(contapagar cp) { this.manager.persist(cp); public List<Double> listtodosvalores() { CriteriaQuery<Double> cq = cb.createquery(double.class); Root<ContaPagar> cpagar = cq.from(contapagar.class); CriteriaQuery<Double> select = cq.select(cpagar.<double>get( valor )); return this.manager.createquery(select).getresultlist(); Apesar do intuito do artigo não ser ensinar a API nova de Criteria, e sim comparar seu poder ao do Hibernate, começa a ficar claro a analogia. O método createquery recebe o tipo de objeto que será retornado no momento da execução; o método from define o ponto de partida da pesquisa. Com a CriteriaQuery em mãos, já é possível criar uma TypedQuery através do método createquery, como foi feito no primeiro exemplo da Listagem 6. Também temos objetos que representam Paths (e suas filhas Root e Join), como as referências fornecedor e cpagar da listagem. Essas referências podem ser utilizadas para os selects (no lugar das antigas projections do hibernate), dessa forma evitando um pouco as Strings em excesso, mas criando a necessidade de escrever mais código. O CriteriaBuilder possui um número muito grande de métodos para criar Expressions, que são objetos semelhantes aos Criterions do Hibernate. O CriteriaBuilder nada mais é que uma fábrica para muitas Expressions, assim como no Hibernate temos as classes Restrictions, Property e Order que fabricam Criterions. Como fica uma Criteria mais complicada? Imagine que precisamos listar quanto dinheiro foi gasto com cada fornecedor. Para isso, precisamos fazer uma Criteria que busca por todos fornecedores, fazendo join com as respectivas contas, agrupando pelo fornecedor e, desejando que no relatório conste também os que não possuem pagamentos, precisamos utilizar um left outer join. Com o Hibernate diretamente, teríamos algo como: public List<Fornecedor> listtodosfornecedores() { CriteriaQuery<Fornecedor> cq = cb.createquery(fornecedor.class); return this.manager.createquery(cq).getresultlist(); session.createcriteria(fornecedor.class, f ).createcriteria( contas, c, Criteria.LEFT_JOIN).setProjection( Projections.projectionList().add(Projections.property( f.nome )).add(projections.sum( c.valor )).add(projections.groupproperty( c.fornecedor )) ).addorder(order.asc( nome )).list(); 63

4 A Listagem 8 mostra uma Criteria da JPA 2.0 que obtém o mesmo resultado, e a Listagem 9 mostra seu teste, no qual obtemos como resultado 350 reais gastos na Kalunga, 300 na Saraiva, e null como resultado para o Supervinhos. Repare como a expressão cb.sum(cpagar.<double> get("valor") é interessante, pois fica claro que estamos somando os valores do objeto retornado pelo nosso join. Infelizmente, como não declaramos uma variável para o Path retornado por cpagar.get( valor ) o Java não consegue inferir Path<Double>, forçando a generificação da invocação, pois o método sum do CriteriaBuilder espera por Expressions que envolvam Number. Uma Tuple é uma forma um pouco mais interessante de trabalhar com resultados que retornam mais de um valor, porém você poderia utilizar Object[] como na Criteria do Hibernate, passando Object[].class para o createquery. O método multiselect recebe um varargs, onde passamos tudo que queremos receber de resposta nas nossas tuplas. Listagem 8. Método do FornecedorDAO para fazer o relatório de quanto gastamos com cada fornecedor. public List<Tuple> listacontasporfornecedor() { public class FornecedorDaoTest extends DaoTest { CriteriaQuery<Tuple> cq = cb.createtuplequery(); ListJoin<Object, Object> cpagar = fornecedor.joinlist( contas, JoinType.LEFT); cq.groupby(fornecedor); cq.orderby(cb.asc(fornecedor.get( nome ))); return this.manager.createquery( cq.multiselect(fornecedor, cb.sum(cpagar.<double> get( valor )))).getresultlist(); Listagem 9. Teste do método da Listagem public void testalistagemdascontasporfornecedor() { List<Tuple> lista = this.fornecedordao.listacontasporfornecedor(); Assert.assertEquals(3, lista.size()); Assert.assertEquals( kalunga, ((Fornecedor) lista.get(0).get(0)). getnome()); Assert.assertEquals(350d, ((Double) lista.get(0).get(1)). doublevalue(), 0.1); Assert.assertEquals( saraiva, ((Fornecedor) lista.get(1).get(0)). getnome()); Assert.assertEquals(300d, ((Double) lista.get(1).get(1)). doublevalue(), 0.1); Assert.assertEquals( supervinhos, ((Fornecedor) lista.get(2). get(0)).getnome()); Assert.assertNull(lista.get(2).get(1)); O metamodelo dinâmico A JPA 2.0 traz o conceito de metamodelo das entidades, algo análogo ao metamodelo (schema) do banco de dados, porém sem pensar no banco. Através do método getmetamodel podemos acessar todas as entidades e respectivos atributos e relacionamentos (Attributes e suas interfaces filhas). Esses atributos podem ser usados como argumentos para criar os Paths do Criteria, dando um pouco mais de segurança de tipos. A Listagem 10 utiliza esse recurso para executar a mesma query da Listagem 9. Repare que o join referenciado pela variável cpagar agora está tipado por Fornecedor e ContaPagar (anteriormente eram Objects). Mesmo com tanto código, ainda continuamos com algumas Strings, que ainda podem gerar erros em tempo de execução. Listagem 10. Mesma query da Listagem 8, agora com modelo dinâmico. public List<Tuple> listacontasporfornecedor() { Metamodel model = manager.getmetamodel(); CriteriaQuery<Tuple> cq = cb.createtuplequery(); EntityType<Fornecedor> fonecedorentity = model. entity(fornecedor.class); ListJoin<Fornecedor, ContaPagar> cpagar = fornecedor.join(fonecedorentity.getlist( contas, ContaPagar.class), JoinType.LEFT); cq.groupby(fornecedor); cq.orderby(cb.asc (fornecedor.get (fonecedorentity.getsingularattribute( nome )))); EntityType<ContaPagar> contapagarentity = model.entity(contapagar.class); CriteriaQuery<Tuple> x = cq.multiselect(fornecedor, cb.sum(cpagar.get (contapagarentity.getsingularattribute( valor, Double.class)))); return this.manager.createquery(x).getresultlist(); O metamodelo estático Como poderíamos criar uma Criteria sem nenhuma referência a Strings, reduzindo o risco de erros em tempo de execução de queries para praticamente zero? Precisaríamos nos referenciar a atributos da classe com verificação do compilador. Infelizmente o Java ainda não possui um recurso para referenciar aos objetos Method, Field e Constructor como sendo literais (isso é possível para objetos do tipo Class, através das expressões Classe.class). Pensando nessa carência, os líderes da JPA 2.0 chegaram a um consenso: utilizar classes auxiliares com atributos estáticos que representem os atributos das nossas entidades e possam ser passadas como parâmetros: o metamodelo estático, como os da Listagens 11 e 12. Esse metamodelo possui uma forma canônica muito bem definida, com 64

5 padrões de nomenclatura e como cada atributo deve ser declarado. Isso é, o uso do underscore e das interfaces filhas de Attribute (SingularAttribute, ListAttribute etc.) são bem definidas em relação à sua utilização. Listagem 11. Metamodelo da classe public abstract class Fornecedor_ { public static volatile SingularAttribute<Fornecedor, Integer> id; public static volatile SingularAttribute<Fornecedor, String> nome; public static volatile ListAttribute<Fornecedor, ContaPagar> contas; Listagem 12. Metamodelo da classe public abstract class ContaPagar_ { public static volatile SingularAttribute<ContaPagar, Integer> id; public static volatile SingularAttribute<ContaPagar, String> descricao; public static volatile SingularAttribute<ContaPagar, Double> valor; public static volatile SingularAttribute<ContaPagar, Fornecedor> fornecedor; Com essas classes de metamodelo estático, podemos em vez de usar os métodos getattribute das entidades devolvidas pelo metamodelo dinâmico, passar esse valores referenciando diretamente pela estranha forma Entidade_.nomeDoAtributo. Fazemos isso na Listagem 13, que diminui bastante o código anteriormente feito com o modelo dinâmico, mantendo a tipagem forte. Listagem 13. Query da Listagem 8 utilizando os metamodelos estáticos. public List<Tuple> listacontasporfornecedor() { CriteriaQuery<Tuple> cq = cb.createtuplequery(); ListJoin<Fornecedor, ContaPagar> cpagar = fornecedor.join(fornecedor_.contas, JoinType.LEFT); cq.groupby(fornecedor); cq.orderby(cb.asc(fornecedor.get(fornecedor_.nome))); CriteriaQuery<Tuple> x = cq.multiselect (fornecedor, cb.sum(cpagar.get(contapagar_.valor))); return this.manager.createquery(x).getresultlist(); Porém daria bastante trabalho ter de escrever esses metamodelos estáticos e mantê-los atualizados (além de esses atributos ainda estarem null!). A JPA 2.0 define um modelo estático canônico, que deve ser gerado pelo provider, que por sua vez usa APT. O Annotation Processor Tool (APT) existe desde o Java 5 para gerar código baseado em algumas anotações, por um Processor. No Java 6 isso deve ser feito automaticamente pelo compilador: ele deve procurar por JARs no classpath que possuam dentro de META-INF/services o arquivo javax.annotation.processing.processor, definindo os Processors que devem ser invocados. No caso do Eclipse e do Hibernate, eles possuem JARs com esses arquivos, fazendo com que esse metamodelo seja gerado automaticamente a cada compilação. Para ativar o APT no Eclipse, você precisa ir nas propriedades do projeto e dentro de Java Compiler habilitar o Annotation Processing, e dentro do Factory Path colocar o jar de metamodelo (que no Hibernate e EclipseLink são jars separados). Caso prefira, pode usar uma task do ant semelhante à Listagem 14 apenas para fazer esse trabalho. Listagem 14. Build.xml para invocar os processadores, no nosso caso para gerar MetaModel. <project name= jpa2 default= generate-metamodel > <path id= lib > <fileset dir= lib > <include name= *.jar /> </fileset> </path> <target name= clean > <delete dir= generated /> <mkdir dir= generated /> </target> <target name= generate-metamodel depends= clean > <javac srcdir= src destdir= generated debug= true > <compilerarg value= -proc:only /> <classpath> <path refid= lib /> </classpath> </javac> </target> </project> Então temos três maneiras bem diferentes de criar a mesma Query: inteiramente baseada em Strings, uma com o metamodelo dinâmico, e outra com o metamodelo estático, além de poder combiná-las entre si. A proposta inicial era de não haver a opção de utilizar Criterias sem os metamodelos, que tornaria impossível a join query montada inicialmente neste artigo. Qual dessas formas é a mais indicada? Qual será que o mercado vai adotar? Certamente a tipagem forte é atraente, porém o metamodelo estático, além de trazer estranhamento para os desenvolvedores Java, assusta ainda mais quem está acostumado com as Criterias do Hibernate, muito mais sucintas. Second level cache O recurso de second cache level (cache de segundo nível) já é conhecido pelos desenvolvedores adeptos do Hibernate e agora está de certa forma especificado no JPA 2.0. Através dele evitamos que objetos sejam buscados do banco de dados mais de uma vez, já que internamente é guardado uma associação entre a chave primária e o objeto para cada entidade cacheada. O trade-off de se usar o segundo nível de cache também já é conhecido, inclusive as soluções para os problemas de "stale read" (leitura obsoleta o objeto que está em cache é uma versão mais antiga do que a que está no banco de dados no caso de base compartilhada entre aplicações). Caso se deseje contornar este problema, deve-se usar uma estratégia de cache 65

6 apropriada e configurar tempos de expiração. Trabalhar com segundo nível de cache é totalmente transparente para o desenvolvedor. Uma diferença importante é como os providers usufruem desse recurso. O EclipseLink já vem com cache de segundo nível habilitado por padrão e utiliza seu próprio cache. Já se você for trabalhar com Hibernate, deve informar quem será o provider de cache (como o EhCache ou JBoss Tree Cache), assim como parâmetros de customização (como o tamanho do pool no ehcache.xml). Na documentação da especificação (item 3.7) estão definidas algumas propriedades para se configurar o cache de segundo nível e, além disso, deixa a cargo do provider permitir a escolha de outros detalhes. No artigo, será mostrado como configurar o segundo nível de cache do EclipseLink usando JPA 2.0, que por opção, já vem habilitado. Logo, ao anotar uma entidade ela já é candidata a ser cacheada assim que você começar a manipulá-la com o EntityManager. Caso queira que alguma entidade e seu estado não sejam cacheados pelo EclipseLink, deve-se anotá-la Esta anotação especifica se uma entidade deve ser cacheada. Entretanto, seu comportamento pode ser alterado dependendo de como o elemento shared-cache-mode localizado no persistence.xml foi configurado (ver Listagem 15). Além da a especificação fornece meios para customizar o cache de acordo com a necessidade. O principal elemento é o shared-cache-mode, que define se as entidades e seus estados irão ser cacheados. Esse elemento é uma tag aninhada do persistence-unit (ver Listagem 16) que aceita os seguintes valores como parâmetros para definir quais estratégias o provider de cache vai adotar: nada entidade estiver anotada ela não será cacheada. O shared-cache-mode no persistence.xml tem preferência sobre as anotações nas entidades cache-mode no xml. Logo, a configuração padrão do provider será aplicada. Por fim, esses dois últimos parâmetros são usados em conjunto com a especificado. Entidades que não tiveram o elemento especificado ou foram anotadas não são cacheadas. ceção das que forem anotadas Retrieve and Store Busca e armazenamento de elementos na cache Pode-se definir propriedades para trabalhar com cache nas operações de busca e armazenamento de elementos no próprio EntityManager (método setproperty). As enums javax.persistence.cacheretrievemode e javax.persistence.cachestoremode fornecem estratégias (USE, BYPASS, REFRESH) para decisões de uso da cache para determinada ação. Como exemplo, o método find ou quando um dado é persistido. A exceção é o método refresh, que sempre vai fazer o BYPASS (acessar diretamente o banco de dados sem procurar em nenhuma cache). A tag shared-cache-mode tem preferência sobre esses elementos também, caso seja configurada como NONE, essas propriedades são ignoradas. O código da Listagem 17 mostra como verificar o uso do segundo nível de cache. Repare que o Eclipselink executa o select para buscar o fornecedor, já para o segundo Entity Manager (linha 6) ele busca o fornecedor que está cacheado. Agora a Listagem 18 mostra uma forma de desabilitar o segundo nível de cache e executar o mesmo código da Listagem 17, repare na saída do log que agora o eclipse link realiza dois selects na base. Listagem 15 Mapeamento de caches para @Cacheable(false) //Significa que a entidade e seu estado não devem ser cachedados pelo provider. Class que a entidade e seu estado devem ser cachedados pelo provider. Class Fornecedor{ Listagem 16 Possíveis estratégias de cache com shared-cache-mode. <persistence-unit name= caelum > <shared-cache-mode>all</shared-cache-mode> <shared-cache-mode>none</shared-cache-mode> <shared-cache-mode>unspecified</shared-cache-mode> <shared-cache-mode>enable_selective</shared-cache-mode> <shared-cache-mode>disable_selective </shared-cache-mode> </persistence-unit> Listagem 17 Uso do segundo nível de cache. EntityManager em = JPAUtil.openManager(); Fornecedor f1 = em.find(fornecedor.class, 1); System.out.println( Primeiro Fornecedor: + f1.getnome()); EntityManager em2 = JPAUtil.openManager(); Fornecedor f2 = em2.find(fornecedor.class, 1); System.out.println( Segundo Fornecedor: + f2.getnome()); Log de saída no console (<property name="eclipselink.logging.thread" value="true" /> configurado no persistence.xml): [EL Fine]: Connection( )--Thread(Thread[main,5,main])--SELECT ID, NOME FROM FORNECEDOR WHERE (ID =?) bind => [1] [EL Finest]: Thread(Thread[main,5,main])--Register the existing object kalunga Primeiro Fornecedor: kalunga [EL Finer]: Thread(Thread[main,5,main])--client acquired Segundo Fornecedor: kalunga [EL Finer]: Thread(Thread[main,5,main])--release unit of work 66

7 Listagem 18. Desabilitar o segundo nível de cache. <shared-cache-mode>none</shared-cache-mode> [EL Fine]: Connection( )--Thread(Thread[main,5,main])--SELECT ID, NOME FROM FORNECEDOR WHERE (ID =?)bind => [1] Primeiro Fornecedor: kalunga [EL Finer]: Thread(Thread[main,5,main])--client acquired [EL Fine]: Connection( )--Thread(Thread[main,5,main])--SELECT ID, NOME FROM FORNECEDOR WHERE (ID =?)bind => [1] Segundo Fornecedor: kalunga [EL Finer]: Thread(Thread[main,5,main])--release unit of work Caso você queira testar os códigos aqui apresentados no Hibernate, basta colocar os jars do Hibernate 3.5 no seu path e retirar do EclipseLink, sem nem ter de especificar o persistence provider. Para a versão atual beta você ainda precisa definir as antigas propriedades do Hibernate como hibernate.connection.driver_class, entre outros. A versão com total suporte a JPA 2.0 deve sair muito em breve, e o grupo resolveu unir os três projetos (core, annotations e entitymanager) numa única distribuição, Considerações finais A JPA 2.0 não só implementa os recursos da Criteria criados e popularizados pelo Hibernate como vai além, dando a possibilidade do uso fortemente tipado, as custas de mais linhas de código. Já o second level cache, apesar de presente, continua contando com muitas configurações dependentes do seu persistence provider, que não ajuda muito em uma teórica mudança entre providers. Outros recursos muito importantes não foram padronizados, como configurações de connection pool e o gerenciamento de estatísticas (como o HibernateStatistics), mas a JPA 2.0 ainda traz diversos mapeamentos que antes só eram possíveis com as anotações específicas do Hibernate Annotations. Referências - 67

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

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

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

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

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

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

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

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

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

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

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

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Curso: Engenharia de Software Arquitetura de Software Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 9 Mapeamento em JPA Introdução O mapeamento objeto-relacional

Leia mais

Hibernate Envers Easy Entity Auditing

Hibernate Envers Easy Entity Auditing Hibernate Envers Easy Entity Auditing Auditando suas classes de persistência com Hibernate Envers Castro (@CastroAlexandre) Consultor (Summa) e Instrutor (Globalcode) SCJP, SCWCD, SCBCD, SCEA-I, SCSNI

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Curso: Engenharia de Software Arquitetura de Software Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 12 Consultas JPQL Consultas JPQL Consultas em JPQL

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

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

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 Índice 1 - Objetivo 2 - Descrição do ambiente 2.1. Tecnologias utilizadas 2.2. Estrutura de pastas 2.3. Bibliotecas já incluídas 3 - Características gerais 4 - Criando

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Curso: Engenharia de Software Arquitetura de Software Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 11 Mapeamento em JPA - Continuação Objetos Embutidos

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

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

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

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 a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva 1. O que são Serviços Web (Web Services)? Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva A ideia central dos Web Services parte da antiga necessidade

Leia mais

Orientação a Objetos

Orientação a Objetos Orientação a Objetos 1. Sobrecarga (Overloading) Os clientes dos bancos costumam consultar periodicamente informações relativas às suas contas. Geralmente, essas informações são obtidas através de extratos.

Leia mais

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

Acessando um Banco de Dados

Acessando um Banco de Dados Acessando um Banco de Dados Introdução Agora que você já está craque em JSP e já instalou seu servidor, vamos direto para a parte prática! Neste tutorial vamos aprender a acessar um banco de dados. Para

Leia mais

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Luis Gustavo Zandarim Soares 1, Késsia Rita da Costa Marchi 1 1 Universidade Paranaense (Unipar) Paraná PR Brasil luisgustavo@live.co.uk,

Leia mais

Android e Bancos de Dados

Android e Bancos de Dados (Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do

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

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

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

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

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

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

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

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

Parte I. Demoiselle Mail

Parte I. Demoiselle Mail Parte I. Demoiselle Mail Para o envio e recebimento de e-s em aplicativos Java, a solução mais natural é usar a API JavaMail [http:// www.oracle.com/technetwork/java/java/index.html]. Ela provê um framework

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

Java Persistence Query Language JPQL

Java Persistence Query Language JPQL Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Java Persistence Query Language JPQL Prof. Enzo Seraphim Definições Tornar SQL orientado a objetos Classes e propriedades ao invés de Tabelas e colunas

Leia mais

Java 2 Standard Edition Como criar classes e objetos

Java 2 Standard Edition Como criar classes e objetos Java 2 Standard Edition Como criar classes e objetos Helder da Rocha www.argonavis.com.br 1 Assuntos abordados Este módulo explora detalhes da construção de classes e objetos Construtores Implicações da

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

O nome ANT é uma sigla para another neat tool (mais uma ferramenta organizada), segundo seu autor James Duncan Davidson.

O nome ANT é uma sigla para another neat tool (mais uma ferramenta organizada), segundo seu autor James Duncan Davidson. 1- Introdução 1.1- Visão Geral O ANT é uma ferramenta destinada a construção (build) de programas JAVA. É semelhante a ferramentas como make, nmake, jam mas com o diferencial de ser multi-plataforma, pois

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

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS Coleções Conceitos e Utilização Básica c Professores de ALPRO I Faculdade de Informática PUCRS 05/2012 ALPRO I (FACIN) Coleções: Básico 05/2012 1 / 41 Nota Este material não pode ser reproduzido ou utilizado

Leia mais

Aplicabilidade: visão geral

Aplicabilidade: visão geral CURSO BÁSICO SAXES 2 Aplicabilidade: visão geral BI Comércio Indústria nf-e Serviços Software house Enterprise Business Bus Banco financeiro Instituição Sindicato ERP html Casos 3 6 Customização: importação

Leia mais

Fixture-Factory. Criando objetos para seus testes. Como criar objetos através de templates para serem utilizados como massa de dados em seus testes.

Fixture-Factory. Criando objetos para seus testes. Como criar objetos através de templates para serem utilizados como massa de dados em seus testes. fixture-factory_ Fixture-Factory Criando objetos para seus testes Como criar objetos através de templates para serem utilizados como massa de dados em seus testes. Começamos testando métodos simples, mas

Leia mais

ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API

ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API Tiago Henrique Gomes da Silva Balduino 1, Ricardo Ribeiro Rufino 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil tiagobalduino77@gmail.com

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

Prof. Raul Sidnei Wazlawick UFSC-CTC-INE. Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010.

Prof. Raul Sidnei Wazlawick UFSC-CTC-INE. Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010. Casos de Uso de Alto Nível Prof. Raul Sidnei Wazlawick UFSC-CTC-INE 2010 Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010. Contexto Na fase de concepção

Leia mais

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária Cascavel Novembro de 2009 Pedro Patitucci Finamore Daniel Bordignon Cassanelli Marco Antonio da Rosa DIAGRAMAS DE CLASSE E SEQUÊNCIA

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

Introdução a Banco de Dados

Introdução a Banco de Dados Introdução a Banco de Dados Ricardo Henrique Tassi - Departamento de Replicação Índice 1- Introdução... 03 2- Quais são os bancos de dados mais conhecidos hoje em dia...04 3- Quais são os tipos de banco...05

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Repeater no GASweb. Regiões

Repeater no GASweb. Regiões Repeater no GASweb Por: Rodrigo Silva O controle de servidor Repeater é um container básico que permite a você criar uma lista de qualquer informação que deseja em uma página Web. Ele não tem uma aparência

Leia mais

Padrões de Projeto. Singleton

Padrões de Projeto. Singleton Padrões de Projeto Padrões de Criação Singleton Singleton Assegura que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela 2 Livro Texto: Design Pattern - Elements 1 Motivação

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

Síntese das discussões do fórum Livro-APF: Julho/2010

Síntese das discussões do fórum Livro-APF: Julho/2010 Síntese das discussões do fórum Livro-APF: Julho/2010 Assunto: Estimativa de Aumento de Produtividade Data: 01/07/2010 Link: http://br.groups.yahoo.com/group/livro-apf/message/2577 Dúvida: Existe alguma

Leia mais

Persistência com JPA2 e Hibernate TREINAMENTOS

Persistência com JPA2 e Hibernate TREINAMENTOS Persistência com JPA2 e Hibernate TREINAMENTOS Persistência com JPA 2 e Hibernate 18 de junho de 2012 Sumário i Sobre a K19 1 Seguro Treinamento 2 Termo de Uso 3 Cursos 4 1 Introdução 1 1.1 Persistê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

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

UML Aspectos de projetos em Diagramas de classes

UML Aspectos de projetos em Diagramas de classes UML Aspectos de projetos em Diagramas de classes Após ser definido o contexto da aplicação a ser gerada. Devemos pensar em detalhar o Diagrama de Classes com informações visando uma implementação Orientada

Leia mais

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos Programação Estruturada e Orientada a Objetos Fundamentos Orientação a Objetos 2013 O que veremos hoje? Introdução aos fundamentos de Orientação a Objetos Transparências baseadas no material do Prof. Jailton

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em

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

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

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br 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

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education Java Como Programar, 8/E Slide 1 Slide 2 Slide 3 Métodos genéricos e classes genéricas (e interfaces) permitem especificar, com uma única declaração de método, um conjunto de métodos relacionados ou, com

Leia mais

LOGGING DE EVENTOS COM LOG4J

LOGGING DE EVENTOS COM LOG4J LOGGING DE EVENTOS COM LOG4J por Luiz Gustavo Stábile de Souza O que é logging? Fazer o logging de uma aplicação é uma das possíveis maneiras de debugá-la, registrando em algum meio (arquivo, enviando

Leia mais

Figura 1. A Classe Java

Figura 1. A Classe Java Conexã o com MySQL Connection Factory Para criar as conexões com o banco de dados será utilizado um padrão chamado Factory, onde através dele se terá uma única classe que proverá uma fábrica de conexão

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

2 Orientação a objetos na prática

2 Orientação a objetos na prática 2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Hibernate Mapeamento Objeto-Relacional Baseado nas notas de aula de João Dalyson e Raphaela Galhardo Fernandes Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Objetivos Aprender MOR usando Hibernate

Leia mais

Aula 2 - Revisão de JPA (Java Persistence API)

Aula 2 - Revisão de JPA (Java Persistence API) Aula 2 - Revisão de JPA (Java Persistence API) Professor: Ricardo Luis dos Santos IFSUL 2015 Tabela para Revisão Assunto (JPA) Interesse? 1 Vantagens e Desvantagens 4 2 Principais Conceitos 7 3 Anotações

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

www.coldfusionbrasil.com.br

www.coldfusionbrasil.com.br www.coldfusionbrasil.com.br 2000 PASSANDO VARIÁVEIS ATRAVÉS DE FORM E URL 3 ALTERA.CFM 3 FORMALTERA.CFM 4 ALTERA.CFM 4 FORMALTERA.CFM 4 CRIANDO E MANIPULANDO VARIÁVEIS COM CFSET 4 VALORES ESTÁTICOS 5 PARÂMETROS

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor

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

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Organizando Classes em Pacotes. Profa. Thienne Johnson EACH/USP

Organizando Classes em Pacotes. Profa. Thienne Johnson EACH/USP Organizando Classes em Pacotes Profa. Thienne Johnson EACH/USP Criando e usando pacotes Nomeando um pacote Usando membros de pacotes Gerenciando arquivos Exercícios Usando pacotes no Eclipse Tutorial da

Leia mais

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

O Komunik é uma ferramenta de comunicação interna que permite a interação completa entre todos os setores de uma empresa.

O Komunik é uma ferramenta de comunicação interna que permite a interação completa entre todos os setores de uma empresa. ORG 13.8 KOMUNIK O QUE É Manual Estoque - Versão 4.55.001-2ª Edição - 2012 O Komunik é uma ferramenta de comunicação interna que permite a interação completa entre todos os setores de uma empresa. PRA

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

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Especificação do 3º Trabalho

Especificação do 3º Trabalho Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,

Leia mais

Aula 2 - Revisão de JPA (Java Persistence API)

Aula 2 - Revisão de JPA (Java Persistence API) Aula 2 - Revisão de JPA (Java Persistence API) Professor: Ricardo Luis dos Santos IFSUL 2015 Tabela para Revisão Assunto (JPA) Interesse? 1 Vantagens e Desvantagens 4 2 Principais Conceitos 7 3 Anotações

Leia mais

Tutorial: Programando no Linux

Tutorial: Programando no Linux UECE Universidade Estadual do Ceará CCT Centro de Ciências e Tecnologia Curso de Ciência da Computação Tutorial: Programando no Linux Alunos: Henrique Neto e João Gonçalves Professora: Ana Luiza E-mails:

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

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 As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

NetBeans. Conhecendo um pouco da IDE

NetBeans. Conhecendo um pouco da IDE NetBeans Conhecendo um pouco da IDE Professor: Edwar Saliba Júnior Sumário Apresentação:...1 Criando Um Novo Projeto de Software:...1 Depurando Um Código-fonte:...4 Entendendo o Código-fonte:...7 Dica

Leia mais

Gerenciamento de Contatos

Gerenciamento de Contatos Gerenciamento de Contatos O objetivo deste módulo é ajudar a gerenciar todos os contatos da empresa. Além dos dados mais importantes, o módulo permite cadastrar anotações e relacionar as tarefas e eventos

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA RESUMO DE AULA CRIAÇÃO E MANIPULAÇÃO DO BANCO DE DADOS

Leia mais

TOTVS BA Guia de Customização Linha Logix

TOTVS BA Guia de Customização Linha Logix TOTVS BA Guia de Customização Linha Logix Guia de Customização Sumário Título do documento 1. Objetivo... 3 2. Introdução... 3 3. Customização... 3 2 TOTVS BA Linha Logix Guia de Customização Projeto/Versão:

Leia mais