DW2 Desenvolvimento Web 2 Prof. Dr. Gustavo Poli IFSP - São Carlos : 2013.08.26
Avaliação
Avaliação Provas: 60% Trabalho: 20% Seminários: 10% Lista de Exercícios: 10%
Avaliação Provas: 60%
Avaliação Provas: 60% Matéria será organizada em duas provas Aula que antecede a prova será revisão Materia data até a data da aula de revisão
Avaliação Provas: 60%
Avaliação Provas: 60%!!! PODE COLAR!!! COLA: Nome do Aluno Folha A4 Branca Escrita a mão - APENAS Pessoal e intransferível Pode escrever o que quizer Deve estar assinada pelo aluno Será entregue junto com a prova
Avaliação Trabalho: 20%
Avaliação Trabalho: 20% Implementação do aplicativo Grupo de no máximo 4 alunos Avaliação é individual: participação e perguntas diretas
Avaliação Seminários: 10%
Avaliação Seminários: 10% Sala será organizada em grupos de 4 alunos Temas serão distribuídos Avaliação é individual: participação e perguntas diretas Apresentação deverá durar no máximo 20 min. Material a ser entregue: texto e apresentação (PDF)
Avaliação Lista de Exercícios: 10%
Avaliação Lista de Exercícios: 10% Serão distribuídas durante o curso Entrega não obrigatória Antes da prova será entregue uma lista resolvida Cada aula PODERÁ ser reservado um tempo para resolver uma questão de interesse da sala
DESCRIÇÃO DO PROJETO
ER - Modelo do Projeto
MVC Lógica da Aplicação Persistência dos Dados Interface com Usuário (M)odelo (V)isão (C)ontrolador
Ambientes de Tecnologia Heterogêneos Aplicação Orientada a Objetos Banco de Dados Relacional Camada de Mapeamento Objeto Relacional
MVC Lógica da Aplicação Persistência dos Dados Interface com Usuário (M)odelo (V)isão (C)ontrolador
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria JTA JDBC JNDI Database
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria JTA JDBC JNDI Database Criado quando a aplicação é inicializada. Contem informações de configuração: Conexão com o banco de dados: Pool de conexão (concorrência) etc... Fornece dois componentes básicos: Database connection Configurado via hibernate.cfg.xml Class Mapping Setup Cria a conexão entre as classes Java e as tabelas físicas no banco de dados.
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria Fornece os objetos de seção (Session) Aponta para um único banco de dados Se for usado mais de um banco de dados devem haver mais de um objeto SessionFactory JTA JDBC JNDI Database
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria JTA JDBC JNDI Fornece uma conexão física com o banco de dados É obtido por meio do objeto SessionFactory A existência de mais de um objeto Session gera concorrência do objeto SessionFactory responsável pela criação destes Deve ser encerrado (Fechado) Database
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria Fornece a capacidade transação de dados Possui integração via JTA JTA: Java Transaction API fornece capacidade realização de transações em ambiente distribuido JTA JDBC JNDI Database
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria Envia instruções ao banco de dados Podem ser utilizados instruções SQL padrão HQL: Hibernate Query Language JTA JDBC JNDI Database
Arquitetura do Hibernate Java Application Persistence Objects Hibernate Framework Configuration SessionFactory Session Transaction Query Criteria JTA JDBC JNDI Java Transaction API especificação de uma interface para a gerencia de transações remotas. Java Database Conection driver de conexão com o banco de dados. Java Naming and Directory Interface especificação de interface para acesso a serviços de naming e directory. SGBD/Dados
Exemplo
hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.url">jdbc:mysql://localhost/ifsp</property> <property name="connection.username">usr_ifsp</property> <property name="connection.password">st2k17w</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.mysqldialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.nocacheprovider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- Mapping files --> <mapping resource="user.hbm.xml"/> <mapping resource="task.hbm.xml"/> </session-factory> </hibernate-configuration>
hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.url">jdbc:mysql://localhost/ifsp</property> <property name="connection.username">usr_ifsp</property> <property name="connection.password">xxxxx</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.mysqldialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.nocacheprovider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- Mapping files --> <mapping resource="user.hbm.xml"/> <mapping resource="task.hbm.xml"/> </session-factory> </hibernate-configuration> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.url">jdbc:mysql://localhost/ifsp</property> <property name="connection.username">usr_ifsp</property> <property name="connection.password">xxxxx</property>
hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.url">jdbc:mysql://localhost/ifsp</property> <property name="connection.username">usr_ifsp</property> <property name="connection.password">xxxxx</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.mysqldialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.nocacheprovider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- Mapping files --> <mapping resource="user.hbm.xml"/> <mapping resource="task.hbm.xml"/> </session-factory> </hibernate-configuration> <mapping resource="user.hbm.xml"/> <mapping resource="task.hbm.xml"/>
task.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ifsp.dw2.aula05.beans.task" table="dw2_tasks"> <id name="id" type="int" column="id" > <generator class="native"/> </id> <property name="userid"> <column name="user_id" /> </property> <property name="title"> <column name="title" /> </property> <property name="description"> <column name="description"/> </property> </class> </hibernate-mapping>
task.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ifsp.dw2.aula05.beans.task" table="dw2_tasks"> <id name="id" type="int" column="id" > <generator class="native"/> </id> <property name="userid"> <column name="user_id" /> </property> <property name="title"> <column name="title" /> </property> <property name="description"> <column name="description"/> </property> </class> </hibernate-mapping>
task.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ifsp.dw2.aula05.beans.user" table="dw2_users" > <id name="id" type="int" column="id" > <generator class="native"/> </id> <property name="firstname"> <column name="first_name" /> </property> <property name="lastname"> <column name="last_name"/> </property> </class> </hibernate-mapping>
task.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ifsp.dw2.aula05.beans.user" table="dw2_users" > <id name="id" type="int" column="id" > <generator class="native"/> </id> <property name="firstname"> <column name="first_name" /> </property> <property name="lastname"> <column name="last_name"/> </property> </class> </hibernate-mapping>
Task.java package ifsp.dw2.aula05.beans; public class Task { private Integer id; private Integer userid; private String title; private String description; public Integer getid() { return id; public void setid(integer id) { this.id = id; public Integer getuserid() { return userid; public void setuserid(integer userid) { this.userid = userid; public String gettitle() { return title; public void settitle(string title) { this.title = title; public String getdescription() { return description; public void setdescription(string description) { this.description = description;
User.java package ifsp.dw2.aula05.beans; public class User { private Integer id; private String firstname; private String lastname; public Integer getid() { return id; public void setid(integer id) { this.id = id; public String getfirstname() { return firstname; public void setfirstname(string firstname) { this.firstname = firstname; public String getlastname() { return lastname; public void setlastname(string lastname) { this.lastname = lastname;
HibernateUtil.java package ifsp.dw2.aula05; import org.hibernate.sessionfactory; import org.hibernate.cfg.configuration; public class HibernateUtil { private static final SessionFactory sessionfactory = buildsessionfactory(); @SuppressWarnings("deprecation") private static SessionFactory buildsessionfactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); public static SessionFactory getsessionfactory() { return sessionfactory;
HibernateUtil.java
HibernateUtil.java private void adduser(string firstname, String lastname) { Transaction trns = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { trns = session.begintransaction(); User user = new User(); user.setfirstname(firstname); user.setlastname(lastname); session.save(user); session.gettransaction().commit(); catch (RuntimeException e) { if(trns!= null){ trns.rollback(); e.printstacktrace(); finally{ session.flush(); session.close();
HibernateUtil.java private void updatelastname(int id, String lastname) { Transaction trns = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { trns = session.begintransaction(); String hqlupdate = "update User u set u.lastname = :newlastname where u.id = :oldid"; int updatedentities = session.createquery( hqlupdate ).setstring( "newlastname", lastname ).setinteger( "oldid", id ).executeupdate(); trns.commit(); catch (RuntimeException e) { if(trns!= null){ trns.rollback(); e.printstacktrace(); finally{ session.flush(); session.close();
Atividade http://www.dc.ufscar.br/~gustavo.poli/