MODELOS DE PERSISTÊNCIA EM JAVARonaldo Carvalho Moura JúniorEngenharia de Computação Centro de Excelência Borland no ITA Parceria Borland / ITA
Objetivos • Apresentar as principais soluções de persistência em Java • Realizar tutorial do Hibernate • Compartilhar Experiências Salvador Dali. The Persistence of Memory. 1931 Parceria Borland / ITA
Roteiro • Modelos de Persistência em Java • Introdução ao Hibernate Parceria Borland / ITA
A. Modelos de Persistência em Java Parceria Borland / ITA
Definição • Persistência em Java pode ser definida como a manutenção do estado de objetos de uma aplicação em um armazenamento não-volátil, durante múltiplas execuções da JVM sujeitas a falhas do sistema e da aplicação. Parceria Borland / ITA
Os 5 Frameworks de Persistência Parceria Borland / ITA
Solução # 1 : JDBC JDBC Vantagens Desvantagens Parceria Borland / ITA
Solução # 2 : EJB ( Entity Beans) EJB ( Entity Beans) Vantagens Desvantagens Parceria Borland / ITA
Solução # 3 : ORM ORM Vantagens Desvantagens Parceria Borland / ITA
Solução # 4 : JDO JDO Vantagens Desvantagens Parceria Borland / ITA
Solução # 5 : Serialization Serialization Vantagens Desvantagens Parceria Borland / ITA
B. Introdução ao Hibernate Parceria Borland / ITA
Models de Dados OO Modelo de Dados Relacional • Classes • Instâncias • Tabelas • Registros • Hibernate: é um software livre de mapeamento objeto-relacional (ORM) para Java. Ferramentas ORM Parceria Borland / ITA
Características do Hibernate • Mapeamento objeto-relacional flexível: • representação de herança em 3 formas; • cascateamento configurável de operações; • associaçoes bidirecionais e polimórficas: many-to-one, many-to-many e outras; • Geração automática de chave primária: • métodos: sequence, hilo, uuid, foreign, native e outros. • Alta performance • Suporte a lazy inicialization de coleções e objetos; • overhead < 10% em relação ao JDBC; • Opção de optimistic locking. Parceria Borland / ITA
Características do Hibernate • Suporte a dialetos de vários banco de dados: • DB2, PostgreSQL, MySQL, Oracle, SAP DB, HypersonicSQL, Interbase, Firebird e outros • Linguaguens de consulta suportadas: • Dialeto SQL nativo de seu banco de dados; • HQL :linguagem de consulta OO semelhante ao SQL e independente de banco de dados. Parceria Borland / ITA
Scopo degli interventi Arquiteura Scopo degli interventi Aplicação Hibernate Arquitetura 1 2 3 4 5 Parceria Borland / ITA
Criando uma Aplicação com o Hibernate • 1º Passo: Instalar e configurar o Hibernate • Download do site http://www.hibernate.org • Colocar no diretório /lib o arquivo jar do driver JDBC. • Editar hibernate.properties e configurá-lo para o seu banco de dados. 1 • 2º Passo: Modelar as classes de entidade a serem persistidas • Criar as classes de entidades com métodos get e set para cada atributo (JavaBean) • Criar os arquivos de mapeamento XML para cada classe de entidade. 2 • 3º`Passo: Criar as classes de acesso a dados • Carregar configuração do Hibernate • Abrir sessão • Realizar operação 3 Parceria Borland / ITA
1º Passo: Instalar e configurar o Hibernate Parceria Borland / ITA
2º Passo: Modelar as classes de entidade a serem persistidas Parceria Borland / ITA
2º Passo: Modelar as classes de entidade a serem persistidas + Parceria Borland / ITA
2º Passo: Modelar as classes de entidade a serem persistidas A classe deve possuir construtor sem parâmetros. Importante ! Id == -1 para instância não persistida Parceria Borland / ITA
3º Passo: Criar as classes de acesso a dados. Parceria Borland / ITA
3º Passo: Criar as classes de acesso a dados • DAOHibernate.java • import net.sf.hibernate.cfg.*; • import net.sf.hibernate.*; • publicclass DAOHibernate implements IDAO { • privatestatic SessionFactory factory; • publicstaticvoid loadProgrammaticConfiguration() throws • MappingException, HibernateException { • Configuration cfg = new Configuration() • .addClass(Jogador.class) • .addClass(Time.class) • .setProperty(Environment.HBM2DDL_AUTO, "create"); • DAOHibernate.factory = cfg.buildSessionFactory(); • } • public Object getEntity(Class classType, long id) throws • Exception { • // Obtém uma conexão JDBC e instancia uma nova sessão • Session s = factory.openSession(); • // Inicia uma nova transação (opcional) • Transaction tx = s.beginTransaction(); • Object aObject = s.load(classType, new Long(id)); • tx.commit(); • s.close(); • return aObject; • } • publicvoid saveOrUpdade(Object entity) throws Exception { • Session s = factory.openSession(); • Transaction tx = null; • try { • tx = s.beginTransaction(); • s.saveOrUpdate(entity); tx.commit(); • } • catch (Exception e) { • if (tx != null) tx.rollback(); • throw e; • } • finally { s.close(); } • } • public List getAllJogadores(Time time) throws HibernateException { • Session s = factory.openSession(); • Transaction tx = s.beginTransaction(); • List queryResult = s.find( • "from br.ita.borcon.entity.Jogador as jog where jog.time.id=?", • new Long(time.getId()), Hibernate.LONG); • tx.commit(); • s.close(); • return queryResult; } • } Parceria Borland / ITA
Futuro do Hibernate • Hibernate3 previsto para início de 2005 • Novas características do JDK 1.5: Java generics para coleções seguras; • Mapeamento de entidades para stored procedures; e • Maior suporte a design orientado a evento. Parceria Borland / ITA
Perguntas Exemplo Simples de uma Aplicação Hibernate www.redecasd.ita.br/rmoura/lectures/Borcon2004-Hibernate.zip Parceria Borland / ITA
Obrigado! • <<Favor preencher a ficha de avaliação>> ronaldo.c.moura@bol.com.br Parceria Borland / ITA