techday - sistemas web em java - rogério n. jr

44
Sistemas WEB em Java utilizando as tecnologias Hibernate, JSF, Facelets e Richfaces Rogério Napoleão Júnior [email protected] @rogerionj

Upload: rogerio-napoleao-jr

Post on 02-Jun-2015

1.849 views

Category:

Technology


0 download

DESCRIPTION

Mini Curso apresentado no Unisul TechDay - 26/11/2011- Sistemas WEB em Java utilizando as tecnologias Hibernate, JSF, Facelets e Richfaces - Rogério Napoleão Júnior

TRANSCRIPT

Page 1: TechDay - Sistemas WEB em Java - Rogério N. Jr

Sistemas WEB em Java utilizando as tecnologias Hibernate, JSF, Facelets e

RichfacesRogério Napoleão Júnior

[email protected]@rogerionj

Page 2: TechDay - Sistemas WEB em Java - Rogério N. Jr

O que estaremos utilizando?

• Eclipse JEE

• Tomcat 7.0

• MySQL

• Importar projeto modelo para o Eclipse

Page 3: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Framework de código aberto

• Feito especificamente para o JSF

• Norteado por 3 ideias centrais:o Integração com JSFo Templateso Composições de Componentes

Facelets

Page 4: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Disponibiliza um novo compilador de páginasbaseado em XHTML

• Realiza a criação da árvore de componentesdas telas JSF

• Criação de templates de tela JSF e reuso(herança) de telas

• Facelets é de 30% a 50% mais rápido que JSP

Facelets - Características

Page 5: TechDay - Sistemas WEB em Java - Rogério N. Jr

Facelets

Page 6: TechDay - Sistemas WEB em Java - Rogério N. Jr

Facelets

Page 7: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Importe o arquivo facelets.jar para dentro da pasta lib da aplicação

• Dentro do arquivo faces-config.xml inclua o trecho a seguir:

<application><view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

</application>

Configuração

Page 8: TechDay - Sistemas WEB em Java - Rogério N. Jr

• No arquivo web.xml adicionar:<context-param>

<param-name>javax.faces.DEFAULT_SUFFIX</param-name><param-value>.xhtml</param-value>

</context-param>

Configuração

Page 9: TechDay - Sistemas WEB em Java - Rogério N. Jr

• O Facelets oferece um ótimo mecanismo para geração de templates, o que torna a construção de uma aplicação toda com o mesmo layout, muito simples e rápida, além de evitar a repetição de código html

• Na criação do template, definimos os “espaços” que podem ser substituídos no template através da tag <ui:insert> e o atributo name dessa tag define o nome desse “espaço”.

<div id="esquerda"> <ui:insert name="menu" /></div>

<div id="centro"> <ui:insert name="corpo" /></div>

Funcionamento

Page 10: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Para informarmos que estamos utilizando um template incluímos a tag <ui:composition> com o seu atributo template que define o diretório onde está o template.

<ui:composition template="/pages/TemplateDiv.xhtml">

• Utilizando a tag <ui:define> definimos o que vai preencher o “espaço” do template

<ui:define name="menu"> <h:outputText value="Menu1:" /><br/> <h:outputText value="Menu2:" /><br/> <h:outputText value="Menu3:"/><br/> </ui:define>

Funcionamento

Page 11: TechDay - Sistemas WEB em Java - Rogério N. Jr

• JavaServer Faces é um framework MVC para o desenvolvimento de aplicaçoes WEB.

• O JSF é atualmente considerado por muitos como a última palavra em termos de desenvolvimento de aplicações Web, resultado da experiência e maturidade adquiridas com o JSP/Servet.

Java Server Faces

Page 12: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Permite que o desenvolvedor crie UIs (User Interfaces) através de um conjunto de componentes UIs pré-definidos;

• Fornece um conjunto de tags JSP para acessar os componentes;

• Reutiliza componentes da página; • Associa os eventos do lado cliente com os

manipuladores dos eventos do lado do servidor (os componentes de entrada possuem um valor local representando o estado no lado servidor);

Java Server Faces

Page 13: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Fornece separação de funções que envolvem a construção de aplicações Web.

• A estrutura das aplicações permanecem a mesma.

• Continuam existindo Servlet e JSP, na mesma aplicação.

• Novos elementos de marcação de textosão presentes nas páginas.

Java Server Faces

Page 14: TechDay - Sistemas WEB em Java - Rogério N. Jr

Java Server Faces

Page 15: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Importar arquivos jsf-api.jar, jsf-impl.jar e jstl.jar para pasta lib do projeto

• Incluir no web.xml a seguinte configuração <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping>

Configurando JSF

Page 16: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Criar o arquivo faces-config.xml na pasta WEB-INF com o seguinte conteúdo:

<faces-config>

</faces-config>

Obs.: Ajustar o build.xml para copiar este arquivo

Configurando JSF

Page 17: TechDay - Sistemas WEB em Java - Rogério N. Jr

• hello.jsp:

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><html><head><title>Teste JSF</title></head><body><f:view> <h:outputText value="Hello"/></f:view></body></html>

Primeiro exemplo

Page 18: TechDay - Sistemas WEB em Java - Rogério N. Jr

• http://download.oracle.com/javaee/5/javaserverfaces/1.2/docs/tlddocs/

• Contém todas as tags disponívels do JSF.

Tag Library Documentation - JSF

Page 19: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Managed Bean é um JavaBean gerenciado pelo framework JSF, ou seja, ele é instanciado, e colocado no escopo de acordo com as configurações encontradas no faces-config.xml

• Um ManagedBean também é chamado de backing bean, pois contém os dados e os métodos que serão executados quando algum dos componentes da página JSF tiver que executar uma ação.

Managed Bean

Page 20: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Criar uma classe java HelloManagedBeano Siga os passos

• Declaração do Managed Bean no faces-config.xml:

<managed-bean> <managed-bean-name>hello</managed-bean-name><managed-bean-class> br.com.projedata.projeto.view.backbean.HelloBackBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Criando um Managed Bean

Page 21: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Utilizamos Taglibs e EL (Expression Language) para associar (fazer o binding) de um componente de UI com um ManagedBean.

• Ex: <h:outputText value=“#{hello.msg}”/>

Managed Bean

Page 22: TechDay - Sistemas WEB em Java - Rogério N. Jr

• As regras de navegação no JSF são definidas no faces-config.xml. Isso possibilita a partir do retorno de um método, seguir para o destino desejado.

• Exemplo:<navigation-rule> <from-view-id>/hello.jsp</from-view-id> <navigation-case> <from-outcome>stringRetorno</from-outcome> <to-view-id>/hello2.jsp</to-view-id> </navigation-case> </navigation-rule>

Regras de navegação

Page 23: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Framework ajax para JSF Ajax4JSF

• Funciona em qualquer conteiner Java

• Skins dinâmicos

• Decidimos que parte da pagina atualizar (reRender)

• Web 2.0

Richfaces

Page 24: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Inserir no web.xml:

<context-param><param-name>org.richfaces.SKIN</param-name><param-value>blueSky</param-value></context-param>

<filter><filter-name>richfaces</filter-name><filter-class>org.ajax4jsf.Filter</filter-class></filter>

<filter-mapping><filter-name>richfaces</filter-name><servlet-name>Faces Servlet</servlet-name><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher></filter-mapping>

Configuração Richfaces

Page 25: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Inserir na pasta os arquivos:o richfaces-api-3.3.3.Final.jaro richfaces-impl-3.3.3.Final.jaro richfaces-ui-3.3.3.Final.jaro commons-logging.jaro commons-digester.jaro commons-collections.jaro commons-beanutils.jar

Configuração Richfaces

Page 26: TechDay - Sistemas WEB em Java - Rogério N. Jr

• http://docs.jboss.org/richfaces/latest_3_3_X/en/tlddoc/

• Live demo:o http://livedemo.exadel.com/richfaces-demo/index.jsp

Richfaces - TLD

Page 27: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Framework opensource de mapeamento objeto-relacional.

• Representa um modelo de Objetos para um modelo Relacional.

• Possibilita a persistência através de objetos, e não de comandos SQL’s escritos diretamente.

Hibernate – O que é?

Page 28: TechDay - Sistemas WEB em Java - Rogério N. Jr

• O aumento da popularidade da orientação a objetos

• Uso de Banco de Dados do Modelo Relacional

• Dificuldade de utilizar os dois juntos

Hibernate – Por que usar?

Page 29: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Visa diminuir a complexidade no tratamento dos dados provenientes de um banco;

• Torna o programa portável, deixando-o independente do banco de dados;

• Gera automaticamente todo o schema do banco de dados;

• Pode ser utilizado em um servidor de aplicações ou standalone.

• Para mapear as classes, são utilizadas configurações em arquivos XML ou JPA;

Hibernate - Características

Page 30: TechDay - Sistemas WEB em Java - Rogério N. Jr

• O Hibernate configura-se como uma camada entre a aplicação e o banco de dados;

• Uma classe Java é mapeada no Hibernate como uma tabela no banco;

• Cada instância dessa classe corresponde a um registro da tabela alocado na memória;

Hibernate - Funcionamento

Page 31: TechDay - Sistemas WEB em Java - Rogério N. Jr

Hibernate - Funcionamento

Page 32: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Criar pasta META-INF no src do projeto.• Criar arquivo persistence.xml e colocar dentro da pasta

META-INF:<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="projetoPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost/test"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>

Hibernate - Configuração

Page 33: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Adicionar as libs a seguir na pasta lib:o ejb3-persistence.jaro hibernate-entitymanager.jaro hibernate-annotations.jaro hibernate-commons-annotations.jaro hibernate-core.jaro hibernate-validator.jaro dom4j.jaro slf4j-api-1.5.6.jaro slf4j-log4j12-1.5.6.jaro log4j.jaro javassist.jaro jboss-javaee.jaro antlr.jar

Hibernate - Configuração

Page 34: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Hibernate precisa de metadados para transformar de uma representação para outra.

• Sem necessidades de mapeamento XML, apenas com anotações

• As anotações são antecedidas por um arroba(@)

Hibernate com Anotações

Page 35: TechDay - Sistemas WEB em Java - Rogério N. Jr

• @Entity – deve ser posto em uma classe de entidade

• @Table – dados da tabela

• @Id – Identificador

• @GeneratedValue – Gerador de valor da chave primaria

• @Column – transforma um atributo do objeto em campos da tabela

Algumas anotações

Page 36: TechDay - Sistemas WEB em Java - Rogério N. Jr

• @OneToOne – um para um

• @OneToMany – um para muitos

• @ManyToMany – muitos para muitos

• @JoinColumn – coluna que recebera os dados de outra tabela

• @JoinTable – tabela intermediaria do relacionamento

Relacionamentos

Page 37: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Mapear UsuarioBean

Exemplo

Page 38: TechDay - Sistemas WEB em Java - Rogério N. Jr

• EntityManagerProvider – Fornece a conexão para a transação da operação através do Hibernate:

public class EntityManagerProvider {

private static EntityManagerFactory emf;

private EntityManagerProvider(){

}

public static EntityManagerFactory getEntityManagerFactory(){

if(emf == null){emf = Persistence.createEntityManagerFactory("projetoPU");

}return emf;}

}

Operações com Hibernate

Page 39: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Exemplo de execução de transação:

public static EntityManager em;

public void inserirUsuario(UsuarioBean usuario){

em = EntityManagerProvider.getEntityManagerFactory().createEntityManager();

try{em.getTransaction().begin();em.persist(usuario);em.getTransaction().commit();

}finally{em.close();

}}

Operações com Hibernate

Page 40: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Hibernate Query Language

• Totalmente orientada a objetos

• Possui paradigmas de herança, polimorfismo e encapsulamento.

• O HQL é bastante similar ao SQL, porém ao invés de usar tabelas ele usa as classes de entidades.

HQL

Page 41: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Consultas podem ser tanto em SQL como em HQL

• Exemplo:o “from UsuarioBean where nome = “Rogério””

o Onde o nome é o nome do atributo da entidade e não o nome da coluna!

HQL

Page 42: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Lazy – Não carrega os objetos do relacionamento

• Eager – Carrega os objetos do relacionamento da classe

• Qual pode ser o impacto disto?

Relacionamentos - Lazy e Eager

Page 43: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Criar classe genérica de exemplo

• Pode ser empacotada em um jar, e ser utilizada como framework.

Class genérica de persistência

Page 44: TechDay - Sistemas WEB em Java - Rogério N. Jr

• Email: [email protected]

• Twitter: @rogerionj

• Linkedin: http://br.linkedin.com/in/rogerionapoleao

Perguntas?