0% acharam este documento útil (0 voto)
13 visualizações218 páginas

Apostila Java WEB

O documento aborda o desenvolvimento de aplicações Web utilizando a tecnologia Java Enterprise Edition (JEE), destacando suas principais especificações e ferramentas. A disciplina é estruturada em várias unidades que cobrem desde a introdução às tecnologias JEE até práticas avançadas com JSF e PrimeFaces. O objetivo é proporcionar um entendimento abrangente sobre o desenvolvimento de software distribuído e as boas práticas de programação em Java.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
13 visualizações218 páginas

Apostila Java WEB

O documento aborda o desenvolvimento de aplicações Web utilizando a tecnologia Java Enterprise Edition (JEE), destacando suas principais especificações e ferramentas. A disciplina é estruturada em várias unidades que cobrem desde a introdução às tecnologias JEE até práticas avançadas com JSF e PrimeFaces. O objetivo é proporcionar um entendimento abrangente sobre o desenvolvimento de software distribuído e as boas práticas de programação em Java.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 218

WBA0179_v1.

3
Desenvolvimento JAVA WEB
Desenvolvimento JAVA WEB
Autor: Bruno Zolotareff dos Santos
Como citar este documento: SANTOS, B.Z. Desenvolvimento JAVA WEB. Valinhos: 2016.

Sumário
Apresentação da Disciplina 03
Unidade 1: Introdução às Tecnologias Java Enterprise Edition 05
Unidade 2: Web Container Necessidades de uma aplicação Web 24
Unidade 3: Persistência e Reaproveitamento de Código na utilização de sistemas Web 47
Unidade 4: Configurando o Hibernate e Integração JSF e JPA 77
Unidade 5: Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de
122
Projeto (Prático-Conceitual)
Unidade 6: JSF com PrimeFaces 149
Unidade 7: Temas do PrimeFaces, apresentação e utilização 166
Unidade 8: JSF com JPA e MVC apresentação e utilização 188

2/218
Apresentação da Disciplina
A tecnologia Web é uma das principais fer- da engenharia de software fazem parte do
ramentas no mundo corporativo que utiliza entendimento do conteúdo programado.
a rede de computadores como meio de co-
Contudo, a disciplina abordará os concei-
municação capaz de proporcionar a inter-
tos de desenvolvimento necessários para
conectividade e transações de informações
uma aplicação, utilizando o Java Enterprise
de instituições financeiras, militares, hospi-
Edition (JEE) e todos os recursos necessários
tais, dentre outros.
para realizar uma programação de software
A disciplina foi estruturada para um apro- distribuída.
fundamento nas tecnologias necessárias
Além disso, a abordagem da disciplina pro-
para o desenvolvimento de aplicativos Web,
porcionará a utilização de padrões e APIs
utilizando o JAVA como ferramenta. Portan-
necessários para o desenvolvimento utili-
to, serão apresentados os principais con-
zando persistência de dados. Assim, poderá
ceitos da importância da tecnologia e como
ter o domínio de tecnologias como JSP/JSF e
utilizá-la.
Servlet para o desenvolvimento de páginas
Entender métodos práticos e ágeis para o Web.
desenvolvimento de projetos Web e esti-
A disciplina proporciona um entendimento
mular boas práticas de programação utili-
maior do assunto em relação a tecnologias
zando padrões das especificações do JAVA e

3/218
Web, tais como: HTML, XML, JAAS, AJAX, que
são abordadas para o conhecimento geral.
Portanto, o desenvolvimento começa com
uma introdução a tecnologia JAVA e explora
as especificações do JEE. Em seguida, você
conhecerá as ferramentas necessárias para
o desenvolvimento e como configurar o am-
biente de desenvolvimento.

4/218
Unidade 1
Introdução às Tecnologias Java Enterprise Edition

Objetivos

1. Visão geral da tecnologia Java Enter-


prise Edition.
2. Entender os princípios de desenvolvi-
mento para aplicações Web.
3. Desenvolver aplicações utilizando
técnicas modernas com Java.
4. Entender as arquiteturas de padrões
de desenvolvimento de software.

5/218
Introdução

O desenvolvimento Web é um tema relevan-


te no mercado mundial de tecnologia, sendo Para saber mais
que Java Enterprise Edition (JEE) destaca-se, James Gosling foi o líder do projeto para o desen-
principalmente, em aplicações corporativas volvimento de uma tecnologia que pudesse ser
pela robustez e aplicabilidade. utilizada em dispositivos como geladeiras, rádios
Desde o advento da Web, Java, desenvol- e televisores. Essa tecnologia, inicialmente base-
vida pela equipe de James Gosling e Sun ada em SmallTalk, foi batizada pelo nome de AOK
Microsystems, é uma das tecnologias mais (Carvalho em inglês) e posteriormente necessitou
utilizadas por apresentar diversas vanta- ser renomeada para Java, pois já havia uma em-
gens, principalmente por ter uma platafor- presa com esse nome (ORACLE, 2016).
ma independente (CAELUM, 2016).
Por um lado, JEE segue todas as normas e pa-
drões exigidos pela engenharia de software
proporcionando qualidade assegurada em
suas aplicações em projetos Web (PRESS-
MAN, 2016). Por outro, é flexível em aceitar
diversos frameworks e não é projetada sob
um único padrão de desenvolvimento Web.

6/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


JEE é uma tecnologia cliente/servidor que sui toda a especificação do JEE com-
funciona sob um servidor Web e é conheci- pleto e é aconselhável para aplicações
da como aplicação distribuída. Assim, são que não utilizam tudo do JEE. Desta-
usados alguns protocolos no processo de cam-se os servidores: TOMCAT e Jetty.
comunicação. • Web application: possui todas as espe-
Portanto, o mercado tecnológico disponibi- cificações do JEE e há diversos servi-
liza diversos servidores Web para JAVA, des- dores: Glassfish, JBOSS, WebSphere e
taque para: TOMCAT, Jetty, Glassfish, JBOSS, WebLogic. Alguns desses servidores
WebSphere e WebLogic. são gratuitos, destaca-se o Glassfish
No entanto, há uma classificação bási- que a SUN/ORACLE produziu e é con-
ca dentre esses servidores Web que é (CA- siderado um dos lideres do mercado.
ELUM, 2016): JSP é o padrão de páginas dinâmicas do
JEE que possui extensão .jsp. Semelhante a
• Web container: servidor que suporta uma página de HTML, possui a capacidade
algumas especificações do JEE como: de processar códigos Java dentro da
JSP (JavaServer Page), Servlet, JSTL (JSP própria página, chamados de <scriplets>
Standard Tag Library) e JSF (JavaServer (ORACLE_2, 2016).
Faces). Esse tipo de servidor não pos-
7/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition
JSF (JavaServer Faces) é um padrão mais atu- aplicação é o Websphere (IBM, 2016).
al das especificações JEE que possibilita a Portanto, há diversas empresas que contri-
criação de interfaces nas páginas de ma- buem para o desenvolvimento da tecnologia
neira ágil (________, 2016). Java e, principalmente, para JEE. Segundo a
JSTL é um mecanismo de recuperação de ORACLE (2016), a tecnologia Java também
dados que pode acessar arquivos que con- utiliza outros recursos e possui um conjunto
tenham XML e é recomendado pela W3C de tecnologias.
(EDUARDO, 2016). Segundo a ORACLE (2016), há mais de quatro
Entretanto, o servidor mais conhecido é o bilhões de dispositivos no mundo que utilizam
TOMCAT, que suporta a maioria das aplica- Java, e esse número aumenta com o trans-
ções de projetos Web com JEE e é um servi- correr dos anos, sendo que essa tecnologia é
dor gratuito e mantido pela Apache (APACHE, encontrada por toda parte, desde televisores,
2016). celulares, carros, robôs e na Web.
A IBM é uma das principais empresas que Há diversas aplicações que utilizam JEE e a
contribui para o desenvolvimento da tecnolo- tecnologia Java para conectar-se a outras
gia Java e, ainda, ajudou no servidor Glassfish tecnologias a fim de obter soluções de ne-
junto com a Oracle. Porém, seu servidor de gócio, como SOA (Arquitetura Orientada a

8/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


Serviços), que é um tipo de conceito de ar- 1. CONCEITOS SOBRE DESEN-
quitetura de software. VOLVIMENTO BÁSICO EM JAVA
Todavia, o JEE utiliza servidores Web com alta
escalabilidade, ou seja, suporta um gran- O Java apresenta dois principais produtos
de número de dados e processos paralelos e, de plataforma: Java Runtime Environment
ainda, sua arquitetura de container apresenta (JRE) e Kit de Desenvolvimento Java (JDK).
vantagens por ser utilizado em qualquer pla- O JRE fornece as bibliotecas, a Máquina Vir-
taforma. O universo Java e diversas empresas tual Java e outros componentes para execu-
que utilizam essa tecnologia são pioneiros tar applets e aplicativos escritos na lingua-
na apresentação de novas soluções. gem de programação Java.
É também o alicerce para as tecnologias
Para saber mais em Java Web (JEE) para o desenvolvimento e
implantação de software empresarial. O JRE
Empresas como a Apache desenvolvem ferra-
não contém ferramentas e serviços de utili-
mentas em Big Data para extrair e processar da-
dade pública, tais como compiladores e de-
dos da Web. Essas ferramentas de Big Data são
puradores de desenvolvimento de applets e
desenvolvidas em Java e utilizam recursos do JEE
aplicações.
(APACHE, 2016).

9/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


Java Development Kit (JDK) é um conjunto g-ins necessários. Serão utilizadas as duas
do JRE que contém tudo o que está na JRE, IDEs, porém o Netbeans completo abrange
além de ferramentas, tais como os compi- todos os exemplos das lições.
ladores e depuradores necessários para o
desenvolvimento de applets e aplicações. 1.1 Descrições de especifica-
ções JEE
Para saber mais Há um grande conjunto de especificações
Diversos assuntos referentes ao Java estão dispo-
do Java Enterprise Edition (JEE), e algumas
níveis no site oficial da ORACLE, desde ambien-
Application Programming Interfaces (APIs)
tes de desenvolvimento até produtos, como, por
podem ser destacadas para ter uma melhor
exemplo, o servidor Web e JDK/JRE em diferentes
visão da tecnologia. As APIs no (Quadro
versões e plataformas necessárias para o desen-
1) destacam-se dentre as disponibilizadas
volvedor e usuário (ORACLE, 2016).
pelo Java Enterprise:
Para programar em Java, é aconselhável uti-
lizar o Netbeans ou Eclipse JEE, que são IDEs
(Integrated Development Environment). O
ambiente deve estar configurado e com plu-
10/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition
Quadro 1 – Especificação de APIs do JEE

APIs Descrição
JavaServer Pages (JSP) (páginas Web)

Java Server Faces (JSF)


Enterprise Javabeans Components (EJB) (objetos distribuídos, persistência de dados)

Java Persistence API (JPA)


Java API for XML Web Services (JAX-WS) (arquivos XML e webservices)

Java API for XML Binding (JAX-B)


Java Authentication and Authorization Service (JAAS) (Segurança)
Java Transaction API (JTA) (controle de transação no contêiner)
Java Message Service (JMS) (troca de mensagens assíncronas)
Java Naming and Directory Interface (JNDI) (espaço de nomes e objetos)
Java Management Extensions (JMX) (administração da sua aplicação e estatísticas so-
bre a mesma)

Fonte: Adaptado de descrição original da (CAELUM, 2016) e (ORACLE, 2016).

11/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


Você inicialmente utilizará páginas JSPs e
Servlets para o desenvolvimento e poste-
riormente será empregado JSF e PrimeFaces
para o entendimento dos diferentes tipos
de aplicações em camada.
Serão estudados outros conceitos da tecno-
logia Web, dentre eles HTML e XML (stands
for EXtensible Markup Language), bem como
camada de persistência, ou seja, conexão
com dados utilizando padrão Data Access
Object (DAO) e com Java Persistence API (JPA)
e Hibernate.

12/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


Glossário
Netbeans: é uma IDE que engloba diversas tecnologias.
Persistência: é o nome dado para a conexão com alguma base de dados; em Java, são utilizadas
especificações como o JPA, que é uma API responsável em fazer o processo de mapeamento ob-
jeto-relacional.
.NET: é a tecnologia da Microsoft que utiliza um framework para execução de sistemas e aplica-
ção.

13/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


?
Questão
para
reflexão

A tecnologia Java Enterprise Edition (JEE) contém especi-


ficações padronizadas e há um arcabouço cultural pelos
desenvolvedores e empresas que a utilizam. Reflita como
essa tecnologia Web pode trazer vantagens comerciais
e faça uma pesquisa de empresas que a utilizam.

14/218
Considerações Finais

• Conhecer uma tecnologia Web, que tem grande aplicabilidade e é consolida-


da no mercado de trabalho, pode ser uma vantagem;
• Entender os principais conceitos envolvidos no ambiente de desenvolvimen-
to de software é essencial para um profissional Web;
• Estudar as principais especificações do Java Enterprise Edition (JEE) ampliará o
conhecimento relacionado com a tecnologia estudada;
• Fatores de aplicação em JEE envolvem uma programação distribuída que uti-
liza servidores Web específicos.

15/218
Referências

APACHE. Servidor TOMCAT. Disponível em: <http://tomcat.apache.org/>. Acesso em: 30 jul. 2016.
OASIS. SOA. Disponível em: <http://www.pcs.usp.br/~pcs5002/oasis/soa-rm-csbr.pdf>. Acesso
em: 12 jul. 2016.
CAELUM. O que é Java? Disponível em: <https://www.caelum.com.br/apostila-java-orientacao-
-objetos/o-que-e-java/#2-3-maquina-virtual>. Acesso em: 12 jul. 2016.

EDUARDO, Carlos. Introdução-JSTL-Java. Disponível em: <http://www.devmedia.com.br/introdu-


cao-jstl-java/23582>. Acesso em: 12 jul. 2016.

IBM. Websphere. Disponível em: <https://www-01.ibm.com/software/br/websphere/>. Acesso


em: 12 jul. 2016.
JAVASE. Framework Java. Disponível em: <http://docs.oracle.com/javase/8/docs/>. Acesso em: 12
jul. 2016.
JDK. Java Development Kit (JDK). Disponível em: <http://www.oracle.com/technetwork/pt/java/
javase/downloads/index.html>. Acesso em: 12 jun. 2016.

MARQUES, Rafael. Servidor Web. Disponível em: <http://pt.slideshare.net/raphaelamarques/ser-


vidor-web-8225869>. Acesso em: 12 jul. 2016.

16/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


ORACLE. The History of Java. Disponível em: <Technologyhttp://www.oracle.com/technetwork/
java/javase/overview/javahistory-index-198355.html>. Acesso em: 12 jul. 2016.

ORACLE_2. JavaServer Faces Technology. Disponível em: <http://www.oracle.com/technetwork/


java/javaee/overview/index.html>. Acesso em: 12 jul. 2016.

PRESSMAN, Roger; MAXIM, Bruce. Engenharia de Software. 8. ed. New York, McGraw Hill Brasil,
2016.

17/218 Unidade 1 • Introdução às Tecnologias Java Enterprise Edition


Questão 1
1. Qual desses procedimentos relaciona-se a uma aplicação Web dinâmica?

a) Uma aplicação é interpretada/compilada no browser.


b) Aplicação dinâmica é interpretada do lado do servidor.
c) Para aplicação dinâmica, é necessário um servidor Web.
d) A aplicação dinâmica é interpretada pelo browser.
e) A aplicação é interpretada no servidor.

18/218
Questão 2
2. Qual foi o propósito da criação do Java por James Gosling?

a) Aplicação para vídeo games.


b) Aplicativos para Smarthphones.
c) Aplicação para dispositivos encaixados.
d) Aplicação Web.
e) Aplicação Desktop.

19/218
Questão 3
3. Para programação distribuída com JEE, quais são os requisitos?

a) JDK + IIS + Visual Studio.


b) JDK + APACHE TOMCAT + Eclipse/Netbeans.
c) JDK + JRE + Eclipse.
d) JSE + JRE + Netbeans.
e) JSE + JDK + IIS + Eclipse/Netbeans.

20/218
Questão 4
4. Quais desses servidores Web suportam JEE?

a) IIS
b) APACHE
c) MySQL
d) FTP Server
e) Glassfish

21/218
Questão 5
5. Quais dessas tecnologias representa melhor o sistema de mensageria
no JEE?

a) JSE
b) JRE
c) JSF
d) JTA
e) JMS

22/218
Gabarito
1. Resposta: C. Java. Porém, é preciso ter um servidor Web
e uma IDE para auxiliar no desenvolvimento
Qualquer aplicação dinâmica em um proje- do software.
to Web é preciso ter um servidor Web, se não
irá compilar. Uma aplicação estática não 4. Resposta: E.
precisa de um servidor e é interpretada ao
lado do cliente. Glassfish é um servidor Web que suporta
aplicações Java Enterprise Edition.
2. Resposta: C.
5. Resposta: D.
O Java foi originalmente projetado para dis-
positivos eletrodomésticos baseado na lin- O Java Message Service é a tecnologia espe-
guagem SmallTalk e que mais tarde foi utili- cífica para tratar serviços de mensagens.
zado para Web.

3. Resposta: B.

O Java Development Kit possui todas as es-


pecificações para o desenvolvimento em
23/218
Unidade 2
Web Container Necessidades de uma aplicação Web

Objetivos

1. Conceitos de Web container;


2. Ciclo de vida de um Servlet;
3. Introdução ao JavaServer Pages – JSP.

24/218
Introdução

A tecnologia Web é considerada de grande Para você compreender o funcionamento


importância por utilizar protocolos de rede do ciclo de vida de um Servlet, é preciso sa-
como HTTP (Hypertext Transfer Protocol). O ber como funciona um Web container e, para
funcionamento de aplicações Web cresce isso, iremos estudar o servidor Web Apache
com o uso de dispositivos móveis, tais como TOMCAT e explorar suas funcionalidades.
tablets e smartphones que acessam a Inter- A empresa responsável em manter o servi-
net. dor TOMCAT é a: Apache Software Founda-
As aplicações Web utilizam a arquitetura tion (ASF), que é uma organização sem fins
cliente/servidor, que engloba um conjunto lucrativos que disponibiliza toda documen-
de tecnologias desenvolvidas sob padrões tação e assuntos relevantes a essa tecno-
definidos por instituições como IEEE (Insti- logia, sendo que está disponível gratuita-
tuto de Engenheiros Eletricistas e Eletrôni- mente no site oficial da apache (TOMCAT,
cos). 2016).
Os servidores mais utilizados são: Apache e
IIS (Internet Information Services) (LINHARES
et al., 2014), sendo que há diversos outros
servidores Web com tecnologias diferentes.

25/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


1 Entendendo a arquitetura do TOMCAT

A arquitetura básica do Apache TOMCAT é o processamento em seu container das especificações:


JavaServer Pages e Servlets e funciona com a versão do Java de acordo com a versão do TOMCAT.
Uma arquitetura Web está baseada em uma aplicação cliente/servidor, em que há requisições e
resposta do servidor (request/response) como ilustrado na (Figura 1):
Figura 1 – Processamento servidor TOMCAT

Fonte: Elaborada pelo autor.

26/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


As páginas no browser do computador ciona um protocolo HTTP, que é respon-
mandam ou requisitam informações que sável principalmente pela requisição feita
são processadas pelo recipiente do servidor pelo browser e resposta pelo servidor Web.
Web. Dentro desse processo, são utilizados Serão utilizados os métodos GET e POST
o Servlet, conhecido como um “servidorzi- para a maioria das aplicações por oferecer
nho”, e a página HTML ou JSP. as especificações necessárias para o funcio-
Os códigos dentro dessas páginas utilizam namento dos exemplos que serão demons-
em sua ação os Servlets criados no projeto; trados durante seu aprendizado.
as páginas podem estar em HTML ou JSP. En-
tretanto, páginas HTML não processam có-
digos em Java diretamente em sua página,
Para saber mais
como scriptlets (códigos em Java), mas cha- Java possui mais de um milhão de APIs (Applica-
mam o Servlets no escopo dos formulários. tion Programming Interface) para diversas aplica-
ções (conexão de banco de dados, autenticação,
2. SERVLETS interface visual etc.). A maioria dessas APIs está
disponível para consulta. Disponível em: <ht-
Para entender o funcionamento do Servlet, tps://docs.oracle.com/javase/7/docs/api/>.
é preciso ter conhecimento de como fun- Acesso em: 20 jul. 2016.

27/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


Para o funcionamento do Servlets e JSPs, o servidor Web deve estar configurado adequadamente
no Netbeans ou em outra IDE (Integrated Development Environment) para desenvolvimento Web.
A classe descrita a seguir é a formação da estrutura básica de um Servlet com construtor e os
métodos GET e POST:
package web.curso.jee; Pacote de onde se encontra o Servlet

import java.io.IOException;
import javax.servlet.ServletException; APIs importadas para o Servlet
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

Comentários
/**
Nome do Servlet
* Servlet implementation class CursoServlet
*/ Herda a classe HttpServlet (API)
28/218 Unidade 2 • Web Container Necessidades de uma aplicação Web
Nome do Servlet
@WebServlet(“/CursoServlet”)
public class CursoServlet extends HttpServlet { Herda a classe HttpServlet (API)
private static final long serialVersionUID = 1L;
public CursoServlet() { Construtor

super();
// TODO Auto-generated constructor stub
} Método doGet

protected void doGET(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException {
// TODO Auto-generated method stub
response.GETWriter().append(“Served at: “).append(request.GETContextPath());
}

29/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


Método doPost

protected void doPOST(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
// TODO Auto-generated method stub
doGET(request, response); }
}
Todas as APIs necessárias com o protocolo HTTP são importadas automaticamente, e todos seus
Servlets devem estar identificados e dentro de pacotes para estar organizado e seguindo as es-
pecificações da engenharia de software. Os métodos GET e POST agem de maneira semelhante,
porém o GET deixa as informações explícitas na URL (Uniform Resource Locator) do navegador.
Será utilizado o método POST como demonstração do funcionamento do Servlet, que deverá ser
a ação dentro de um formulário de uma página JSP. A seguir, você verá como imprimir uma men-
sagem no browser quando requisitado o Servlet, que foi criado com nome cursoServlet.java.

30/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


protected void doPOST(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGET(request, response);
out é um objeto declarado para
PrintWriter out = response.getWriter(); saída vinda do import da API de

java.io.PrintWriter
out.println(“Olá JAVA”);

} Irá imprimir Olá


JAVA
}

Com essa atualização em cursoServlet no método POST, será possível apresentar os dados em
nosso browser. Para isso, deve ser chamado a página JSP no browser de nome: index.jsp, que
contém o formulário, apenas para demonstrar como chamar esse Servlet na execução como no
código a seguir:
Index.jsp
<html><head>

31/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


<meta http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1”>
<title>Insert title here</title></head>
<body> Nome do Servlet

<form action=”CursoServlet” method”post” />


<input type=”submit” value=”mostrar” />
Método escolhido
</form>
</body>
</html>

O resultado ao carregar o projeto será como na Figura 2. Caso ocorra algum erro, verifique o có-
digo e se configurou todo o ambiente do Eclipse ou Netbeans para o funcionamento correto, pois
qualquer detalhe que faltar pode resultar erros.

32/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


Figura 2 – Resultado da demonstração com Servlet

Fonte: Elaborado pelo autor.

Lembre-se de que o mapeamento do Servlet é realizado por um arquivo web.xml nas especifica-
ções anteriores ao JEE 6. A partir das novas especificações, é utilizada a seguinte notação para o
nome da classe:
Notação para mapeamento do
Servlet quando requisitado.
@WebServlet(“/CursoServlet”)
public class CursoServlet extends HttpServlet {

Todo esse processo é realizado pelo container do servidor Web e engloba um ciclo de vida do Ser-
vlet que é requisitado. A Figura 3 auxilia no entendimento de como funciona o ciclo de vida do
33/218 Unidade 2 • Web Container Necessidades de uma aplicação Web
Servlet segundo as especificações da JSR (JCP, 2016).
Figura 3 – Ciclo de vida do Servlet

Fonte: Adaptado de SAUVÉ (2016).

Segundo o professor Sauvé (2016), o ciclo de vida de um Servlet passa pelas seguintes fases apre-
sentadas no Quadro 2:

34/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


Quadro 2 – Descrição das fases do um Servlet

Fases Descrição
Instanciação O Web container cria uma instância do servlet
Inicialização O Web container chama o método init() do servlet
Serviço Se o container receber um pedido para o servlet, o método service() do servlet é chamado
Destruição Antes de destruir a instância, o Web container chama o método destroy() do servlet
Não disponível A instância é destruída e marcada para coleta de lixo

Fonte: Adaptado de (SAUVÉ, 2016).

O processo do ciclo de vida do Web container possui todas as fases especificadas no quadro, sen-
do importante conhecer o funcionamento do Servlet para compreender o que acontece em seu
projeto Web.

3. Introdução a Java Server Pages (JSP)


Páginas JSP (JavaServer Pages) possuem semelhanças às páginas HTML (HyperText Markup Langua-
ge) e aceitam scriptlet que são códigos em Java no escopo da página (HUNTER, 2001 p. 37-42).
Os scriptlets utilizam esses símbolos <% %> dentro da página JSP, sendo que todo código em
Java é colocado dentro dessas diretivas. As páginas JSP contêm outras diretivas importantes de
referência para usar recursos como JSTL (JavaServer Pages Standard Template Library) e a lingua-
gem EL (Expression Language) (LUCKOW, 2010 p. 74-75).

35/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


No exemplo a seguir, você verá um escopo de uma página JSP com scriptlets, que nesse caso não
utiliza o Servlet em sua requisição para processar e carregar o resultado no browser.

<html>
<head>
<title>Insert title here</title>
</head>
<body> Código Java dentro da JSP
<%
if (request.getParameter(“nome”) == null){
out.println(“Olá Java”);
} else {
out.println(“olá, “ + request.getParameter(“nome”));
} %>
</body>
</html>
A tecnologia JSP é utilizada, principalmente, para separar a camada de apresentação da camada
lógica da programação (HUNTER, 2001 p. 4-21).
36/218 Unidade 2 • Web Container Necessidades de uma aplicação Web
Glossário
Container: recipiente.
TOMCAT: servidor Web.
MVC: Model View Controller (Modelo Visão Controle).

37/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


?
Questão
para
reflexão

Qual vantagem você encontra em utilizar notações para ma-


pear Servlet em sua aplicação ao invés de utilizar um arquivo
web.xml para fazer essa tarefa?

38/218
Considerações Finais

• Funcionamento de um Web container;


• Servidores Web;
• Ciclo de vida do Servlet;
• Funcionamento de páginas JSP.

39/218
Referências

HUNTER, Jason; CRAWFORD, William. Java servlet programming. “O’Reilly Media, Inc.”, 2001.
LINHARES, E.S. et al. TÓPICOS AVANÇADOS COMPARATIVOS ENTRE OS SERVIDORES WEB APA-
CHE E IIS. Revista Computação Aplicada – UNG, v. 3, n. 1, p. 35-39, 2014.
LUCKOW, Décio Heinzelmann; MELO, Alexandre Altair. Programação Java para a WEB. São Paulo:
Novatec, 2010.
SAUVE, Jacques Philippe. Introdução a Containers Web: A Primeira Aplicação Web com Servlets.
Disponível em: <http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm>.
Acesso em: 12 jul. 2016.
TOMCA. Apache Software Fundation. Disponível em: <https://tomcat.apache.org>. Acesso em:
12 jul. 2016.

40/218 Unidade 2 • Web Container Necessidades de uma aplicação Web


Questão 1
1. Qual dessas opções é considerado um protocolo Web?

a) HTTP.
b) IEEE.
c) IOT.
d) POST.
e) GET.

41/218
Questão 2
2. Qual dessas alternativas se refere a um Web container?

a) É um servidor de requisição HTTP.


b) É a aplicação do Servlet com o JSP.
c) É conhecido também como um recipiente de Servlet .
d) É reconhecido com um componente do Servlet .
e) É interpretado como uma parte do ciclo do Servlet .

42/218
Questão 3
3. Qual desses servidores Web não suportam JEE?

a) Apache TOMCAT
b) JBOSS
c) Web Sphere
d) IIS
e) GlassFish

43/218
Questão 4
4. Qual desses métodos existe no Servlet e apresenta os dados na URL no
browser quando processado?

a) POST
b) GET
c) processRequest
d) delete
e) DAO

44/218
Questão 5
5. O mapeamento automático com anotações foi implementado a partir de
qual versão do JEE?

a) Versão 1.4 Java para Web


b) Versão 2.0 J2EE
c) Versão 5 JEE
d) Versão 6 JEE
e) Versão 7 JEE

45/218
Gabarito
1. Resposta: A. 4. Resposta: B.

HTTP é a única opção que representa um Não há o cuidado de ocultar informações


protocolo as alternativas não são protoco- no método GET como no POST que oculta os
los. dados.

2. Resposta: C. 5. Resposta: D.

Um Web container é um recipiente de Servlet Foi implementado a partir da versão 6 do JEE


que contém todas as especificações neces- como uma das melhorias na nova especifi-
sárias. cação da ORACLE/Sun.

3. Resposta: D.

O servidor IIS é o servidor da Microsoft que


não possui a tecnologia da Web container.

46/218
Unidade 3
Persistência e Reaproveitamento de Código na utilização de sistemas Web

Objetivos

1. Persistência.
2. Reaproveitar dados.
3. Padronização.

47/218
Introdução

Em sua aplicação JEE, é possível se conectar LETE), será apresentado o padrão de cone-
a qualquer Sistema Gerenciador de Banco xão DAO (Data Access Object) junto com o
de Dados (SGBD) que contenha o Driver dis- banco de dados MySQL.
ponível para essa ação. Para conectar-se a Com esse padrão, é possível ter um aprovei-
uma base de dados, é preciso utilizar APIs tamento melhor no código e reutilizar sem
que façam essa ligação e possibilitem fazer precisar reescrever ou validar novamen-
ações como: gravar, consultar, editar e ex- te. O padrão DAO utiliza os paradigmas da
cluir. programação orientada a objetos, que fa-
Segundo as especificações do Java, o JDBC cilitam na herança e abstração das classes
(Java Database Connectivity) é capaz de fa- (CORDEIRO, 2014, p. 7-15).
zer essa ligação de conexão com SGBD (JCP, Essa camada de persistência possui uma
2016). A empresa ORACLE possui o SGBD estrutura padrão, e, no exemplo a seguir,
mais famoso, que é o ORACLE (mesmo nome serão utilizadas as seguintes classes:
da companhia), e a empresa também possui
um dos SGBD gratuitos mais utilizados, que • Conexão com banco de dados: den-
é o MySQL. tro dessa classe, há especificações de
qual banco de dados será utilizado e
Para conectar-se e efetuar as ações do cha-
a referência do Driver e o endereço do
mado CRUD (CREATE, READ, UPDATE E DE-
48/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
servidor que utiliza o JDBC como API, e é responsável em fazer a ligação.
• GETTERS e SETTERS: há uma classe que representa os mesmos atributos da tabela do ban-
co de dados; nessa classe, são gerados os GETTERS e SETTERS para ações de transações de
dados.
• CRUD: essa classe contém os métodos necessários para fazer as operações: gravar, consul-
tar, editar e excluir.
Antes de começar a programar, você deve criar um banco de dados com nome: cadastro e uma
tabela chamada users com os seguintes atributos (id_usuario, login, senha e email). Segue o có-
digo SQL para criar os requisitos no MySQL:
CREATE DATABASE cadastro; Nome do banco de dados

CREATE TABLE users(


id_usuario int not null auto_increment, Nome da tabela e
atributos
login varchar(100) null,
senha varchar(100) null,
email varchar(160) null,
Primary key(id_usuario));
49/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
Para utilizar o MySQL no projeto com banco de dados, é preciso baixar o Driver de conexão no
site. Esse arquivo jar deve ser colocado dentro de bibliotecas do projeto para que funcione.
As classes estão dentro do pacote bd.jee.connexao, e, após criar um banco de dados e a tabela
como indicado anteriormente, será possível desenvolver os códigos a seguir da classe Conexão.
java:
package bd.jee.conexao;

import java.io.*; APIs necessárias para o


import java.sql.Connection; funcionamento com banco
import java.sql.DriverManager; de dados
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public final class Conexao {


private Conexao(){
PreparedStatement pstmt = null;
}
50/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
static {
try { Driver do banco de
//Carrega o driver do banco dados escolhido

Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException ex) {
System.out.println(“Driver do banco nao encontrado.”);
System.exit( -1); }
}
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection( Banco de dados no
“jdbc:mysql://localhost/cadastro”, MySQL
“root”,
Usuário e senha do
“1234”
banco de dados
);
} catch (SQLException ex) {

51/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


System.err.print(“Erro ao obter conexao: “ + ex.getMessage());
}
return conn; }
}

A próxima classe a ser criada é a classe Dados.java que representará os atributos do banco de
dados para manipular e encapsular as informações.

package bd.jee.conexao;

public class Dados {


Variáveis
private int id_usuario;
private String login;
private String senha;
private String email;
Deve gerar os Getters e Setters
//Gerar getters e Setters em sua aplicação
}
52/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
Para completar o DAO, a próxima classe DadosDao.java terá todos os métodos necessários para
o CRUD.

package bd.jee.conexao; APIs necessárias para o


funcionamento com banco
import java.sql.*; de dados

public class DadosDAO { Colocar todas como na


classe anterior
private static DadosDAO instance;
static {
instance = new DadosDAO();
}

public DadosDAO() {}

public static DadosDAO getInstance() {


return instance;
}
53/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
Método para ler os dados

public Dados read(Dados dados) {

Dados dadosAux = new Dados();


Connection conn = Conexao.getConnection();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
“SELECT * FROM users WHERE id_usuario = “ + dados.getId_usuario());
if (rs.next()) {
dadosAux = carregaDados(dados, rs);
} else {
dadosAux = null;
}
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}

54/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


return dadosAux; } Método para carregar os dados

private Dados carregaDados(Dados dados, ResultSet rs) throws SQLException {

Dados dadosAux = new Dados();


dadosAux.setId_usuario(rs.getString(“Id_usuario”));
dadosAux.setLogin(rs.getString(“login”));
dadosAux.setSenha(rs.getString(“senha”));
dadosAux.setEmail(rs.getString(“email”));

return dadosAux;
} Método para apagar os dados

public boolean delete(Dados dados) {

boolean retorno = true;


Connection conn = Conexao.getConnection();

55/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


try {
Statement stmt = conn.createStatement();
stmt.executeUpdate(“DELETE FROM users WHERE id_usuario = “ + dados.getId_usuario());
conn.close();
} catch (SQLException ex) {
retorno = false;
ex.printStackTrace();
}
return retorno; Método para criar os dados
}
public boolean create(Dados dados) {

Connection conn = Conexao.getConnection();


PreparedStatement pstmt;
boolean retorno = true;
try {
pstmt = conn.prepareStatement(

56/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


“INSERT INTO users (id_usuario, login, senha, email) VALUES (?, ?, ?, ?)”);

pstmt.setString(1, dados.getId_usuario());
pstmt.setString(2, dados.getLogin());
pstmt.setString(3, dados.getSenha());
pstmt.setString(4, dados.getEmail());

pstmt.executeUpdate();
conn.close();
} catch (SQLException ex) {
retorno = false;
ex.printStackTrace();
}
return retorno;
}

57/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


Método para atualizar os dados

public boolean update(Dados dados) {

boolean retorno = true;


Connection conn = Conexao.getConnection();
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(
“UPDATE users SET “+ “nome=?, idade = ? “+”WHERE codigo = ?”);
pstmt.setString(1, dados.getId_usuario());
pstmt.setString(2, dados.getLogin());
pstmt.setString(3, dados.getSenha());
pstmt.setString(4, dados.getEmail());
pstmt.executeUpdate();
conn.close();
} catch (SQLException ex) {
retorno = false;
ex.printStackTrace();
}
return retorno;
}
}
58/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
O método DAO é um padrão de conexão (Design Pattern) e há variações desse padrão que podem
ser implementadas em um projeto dependendo da aplicação e do propósito. Nas especificações
do site da ORACLE, é possível conhecer esses outros modelos.
O padrão DAO facilita a reutilização do mesmo código em todo o projeto e é uma das opções que
poderá escolher se estiver de acordo com as especificações de seu projeto. O padrão DAO abstrai
e encapsula todos os dados para a utilização dos dados (ORACLE, 2016).

1. Aplicando padrão DAO

Assim que o padrão DAO estiver pronto, você poderá utilizar junto às páginas JSP e Servlets. No
exemplo proposto, será aplicado o padrão DAO para fazer as seguintes ações: gravar (CREATE).
Com o exemplo utilizando a ação de cadastrar para demonstrar, você será capaz de desenvolver
outras ações do CRUD. No projeto, iremos utilizar uma página cadastro.jsp e desenvolver o for-
mulário:

59/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


<html><head>
<title>Cadastro Web</title>
</head> Nome do Servlet que será utilizado
<body>
<FORM action=”cadastroServlet” method=”post”>
<TABLE style=”background-color: #95BB85;” WIDTH=”40%” >
<TR>
<TH width=”50%”>Usuário:</TH>
<TD width=”50%”><INPUT NAME=”login” TYPE=”text” maxlength=”10” size=”20%”></TD>
</tr>
<TR>
<TH width=”50%”>Senha:</TH>
<TD width=”50%”><INPUT NAME=”senha” TYPE=”password” maxlength=”10” size=”20%”></TD>
</tr>
<TR>
<TH width=”50%”>E-mail:</TH>
<TD width=”50%”><INPUT NAME=”email” TYPE=”text” maxlength=”30” size=”50%”></TD>
</tr>
<TD width=”50%”><INPUT TYPE=”submit” VALUE=”Cadastrar” ></TD> </tr>
</TABLE>
</FORM>
</body>
</html>
60/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
O formulário apresenta como resultado a Figura 4:
Figura 4 – Resultado ao carregar página cadastro.jsp.

Fonte: Elaborada pelo autor.

Para colocar as ações no botão, você deverá criar um Servlet com nome cadastroServlet e es-
colher o método POST que terá todos os códigos necessários em sua programação. Dentro do
método POST, deverá ter os seguintes códigos:

61/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//Declara session
HttpSession session = request.getSession(true);

DadosDAO dao = new DadosDAO();


Dados dado = new Dados(); Pega o parâmetro da
página cadastro.jsp

//Pega argumentos da página jsp


String login = request.getParameter(“login”);
String senha = request.getParameter(“senha”);
String email = request.getParameter(“email”);

//coloca valores para manipulae


dado.setLogin(login);
dado.setSenha(senha);
dado.setEmail(email);
//método para gravar do DAO
62/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web
Sessão para manipular os
dao.create(dado); dados entre as páginas JSP

//session para manipular os dados entre as páginas JSP


session.setAttribute(“ulogin”,dado.getLogin());
session.setAttribute(“usenha”, dado.getSenha());
session.setAttribute(“uemail”, dado.getEmail());

Deverá redirecionar para


//Redireciona para outra página essa nova página JSP.
response.sendRedirect(“resultado.jsp”);
}

Esse código capturará o que foi digitado nos campos do formulário na página cadastro.jsp e
chamará o cadastroServlet para fazer a ação de cadastrar. Dentro do código, você pode perceber
que os parâmetros são colocados em variáveis e o método CREATE (que irá gravar) é chamado
pelo objeto instânciado: dao que contém os métodos de ação para ser gravado no banco de da-
dos conforme a (Figura 5). Além disso, é utilizada a API de sessão que serve para navegar entre
as sessões de uma página para outra e manipular os dados.

63/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


Figura 5 – Consulta de cadastro no banco de dados

Fonte: Elaborada pelo autor.

Para verificar o funcionamento do recurso de sessão, uma página resultado.jsp deve ser criada
para receber os dados para demonstração:

64/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


<html>
<head>
<title>Insert title here</title>
</head>
Usando a sessão feita no
<body> cadastroServlet
<%
String login = (String) session.getAttribute(“ulogin”);
String senha = (String) session.getAttribute(“usenha”);
String email = (String) session.getAttribute(“uemail”);
Imprime o valor
%> da sessão
<form>
Login: :<br /><input type=”text” name=”codigo” value=”<%= login%>” /><br />
Senha: :<br /><input type=”text” name=”nome” value=”<%= senha%>” /><br />
E-mail:<br /><input type=”text” name=”idade” value=”<%= email%>” /><br />
</form>
</body>
</html>

65/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


O resultado é a impressão e é apresentado em um novo formulário na página resultado.jsp, como na
Figura 6. Portanto, a aplicação utilizou recursos de sessão para manipular os dados e o padrão DAO.
Figura 6 – Resultado do uso da sessão

Fonte: Elaborada pelo autor.

A utilização do DAO não é o único método empregado para persistência de dados e há alguns
frameworks que fazem todo processo de mapeamento relacional com a base de dados. Você verá
na próxima lição a configuração do framework Hibernate para completar seu conhecimento.

66/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


Glossário
Persistência: conexão ou ligação com dados.
Encapsular: abstrair ou ocultar dados.
DAO: padrão de persistência.

67/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


?
Questão
para
reflexão

Atualmente, o padrão DAO seria a melhor opção para a


maioria dos projetos com muitas tabelas?

68/218
Considerações Finais

• Controle de dados;
• Gerenciar códigos com persistência;
• Encapsular e padronizar dados;
• Reaproveitar código.

69/218
Referências

CORDEIRO, Gilliard. Aplicações Java para a web com JSF e JPA. São Paulo: Editora Casa do Códi-
go, 2014.
ORACLE. Acesso a dados. Disponível em: <http://www.oracle.com/technetwork/java/dataacces-
sobject-138824.html>. Acesso em: 12 jul. 2016.

70/218 Unidade 3 • Persistência e Reaproveitamento de Código na utilização de sistemas Web


Questão 1
1. Qual Driver padrão do Java é utilizado para conexão de banco de dados?

a) ODBC.
b) JDBC.
c) TOPLINK.
d) MYSQL.ODBC.
e) DERBY.

71/218
Questão 2
2. Qual dessas alternativas refere-se ao Driver do MySQL?

a) com.mysql.odbc.Driver
b) orm.mysql.jdbc.Driver
c) mysql.jdbc.odbc.Driver
d) com.jdbc.odbc.Driver
e) com.mysql.jdbc.Driver

72/218
Questão 3
3. Qual dessas páginas aceita scriptlets?

a) ASP
b) ASP.NET
c) HTML
d) PHP
e) JSP

73/218
Questão 4
4. Qual dessas alternativas representa melhor o CRUD?

a) CREATE, ROAD, UPDATE E DELETE.


b) CREATE, READ, UPDATE E DELETE.
c) CREATE, READ, SELECT E DELETE.
d) CREATE, INSERT, UPDATE E DELETE.
e) CREATE, READE, UPDATED E DELETE.

74/218
Questão 5
5. Qual dessas API é utilizada para sessão em JEE?

a) javax.servlet.http.HttpSession.Sessiom
b) java.servlet.http.HttpSession
c) javax.servlet.http.HttpSession
d) javax.servlet.HttpSession
e) java.http.HttpSession

75/218
Gabarito
1. Resposta: B. 5. Resposta: C.
O padrão do JAVA é o JDBC que está nas es- A API utilizada em Servlets para o protocolo
pecificações da tecnologia. HTTP é javax.servlet.http.HttpSession.

2. Resposta: E.
A declaração do Driver correto é com.mys-
ql.jdbc.Driver.

3. Resposta: E.
Scriptlets é utilizado apenas na linguagem
JSP.

4. Resposta: B.

As siglas do CRUD é a abreviação de CREATE,


READ, UPDATE E DELETE.

76/218
Unidade 4
Configurando o Hibernate e Integração JSF e JPA

Objetivos

1. Entender o JPA Hibernate.


2. Configurar Hibernate no ambiente de
programação.
3. Integrar JPA Hibernate com framework
JavaServer Faces.

77/218
Introdução

A utilização de banco de dados relacionais 1 JPA


em Java é um grande desafio por tratar-se de
um mundo de objetos. Essa persistência é re- A especificação do JPA é um mapeamen-
alizada com processo de ORM (mapeamen- to objeto-relacional. O JPA foi desenvolvi-
to objeto-relacional) facilitando a realização do para o EJB 3.0 (Enterprise JavaBean) e faz
de tarefas complexas, como manipulação de parte do grupo do JSR 220 (Java Specification
dados, associando o mundo de objetos ao Requests) e estende-se seu uso além do JEE
estruturado (KONDA, 2014 p. 18). (Java Enterprise Edition), por exemplo, em
programação para Desktop (ORACLE, 2016).
Para fazer ORM, é possível utilizar especi-
ficações do framework JPA (Java Persisten- O framework JPA facilita o gerenciamento
ce API), que é da própria especificação do de dados em aplicações Java e consiste em
Java, e também outro framework conhecido quatro áreas: the Java Persistence API; the
como Hibernate, que utilizaremos para in- query language; the Java Persistence Crite-
tegrar em uma aplicação com JSF (JavaSer- ria API e object/relation mapping metadata (
ver Faces). _______, 2016).

78/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


O JPA faz o mapeamento de classes POJOS FireBird etc). Porém, em projetos grandes
(Plain Old Java Objects), que são Beans de a utilização do JDBC era muito trabalhosa
Entidade: classes que utilizam Java Persis- para os desenvolvedores e havia muita re-
tence metadata. Esse mapeamento utiliza petição de código (KONDA, 2014 p. 20).
anotação @Entity na classe que deve ter a Para esse propósito, a organização Hiber-
mesma estrutura da tabela do banco de da- nate fez o framework ORM de forma gratui-
dos (TULIO, 2016). ta e muitos desenvolvedores adotaram por
Diversos frameworks implementam o JPA, ser de código aberto e estar disponível para
que é uma especificação para realizarem a baixar no site oficial (HIBERNATE, 2016).
persistência em um banco de dados, dentre O Hibernate é um dos frameworks mais po-
eles: Hibernate, EclipseLink e TopLink. pulares dentre os programadores Java e foi
adquirida pela Red Hat, que é uma das em-
2. HIBERNATE presas de software que mantém um dos ser-
vidores Web mais conhecidos, JBOSS, e toda
Por muito tempo, os desenvolvedores em
documentação disponível para o usuário.
Java utilizaram a API JDBC (Java Database
Connectivity) para fazer conexões com ban-
co de dados relacionais (MySQL, SQL Server,
79/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
O JSF utiliza padrões de projetos (design pat-
Para saber mais terns) da engenharia de software, princi-
Red Hat é uma empresa proveniente de uma das palmente o modelo MVC (Model View Con-
versões mais conhecidas do Linux e é a mantene- troller), que possui a ideia em dividir a apli-
dora do framework Hibernate, que disponibiliza cação em três camadas: modelo, visualiza-
on-line e gratuitamente um guia oficial de ótima ção e controle (_______, 2016).
qualidade.
Para saber mais
3. JSF Uma das principais referências em engenharia de
software é Roger Pressman. Os conhecimentos
Um dos frameworks mais utilizados para dessa área são essenciais para um profissional na
camada de visão é o JSF (JavaServer Faces), área de desenvolvimento em TI..
que entrou para especificação do JEE (Java
Enterprise Edition). É um padrão de mercado Será apresentado como integrar essas três
em diversas empresas (EDS, EMC, HP, IBM, tecnologias no ambiente de programação
Apache) e contribui com ferramentas inte- Netbeans, a fim de ter um melhor resulta-
gradas ao JSF, dentre as quais temos: MyFa- do no seu desenvolvimento em aplicações
ces e o ICE Faces (LUCKOW, 2010 p.72-74). Web.
80/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
No Netbeans, você deve fazer a conexão
Para saber mais com o banco de dados MySQL. Vá para ser-
O Netbeans é um ambiente de desenvolvimento viços e, se não visualizar em seu Netbeans,
completo para tecnologia Java que possui diver- vá ao menu em Ferramentas e encontrará
sos frameworks já disponibilizados como: Hiber- serviços. Na tela de serviço dentro da pasta
nate e JSF. Drivers, você encontrará o MySQL (Connec-
tor) e deverá fazer a instância com seu ban-
co de dados cadastro como na Figura 7.
4. Integrando JPA Hibernate com
JSF

Para realizar a persistência, utilizaremos o


mesmo banco de dados com nome: cadas-
tro com a tabela users do capítulo anterior
referente ao DAO. Inclua alguns registros na
base de dados para ser apresentada em sua
aplicação com JSF.

81/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 7 – Conexão com banco de dados

Fonte: Elaborada pelo autor.

82/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Com a conexão estabelecida, você deverá criar um projeto Java Web com servidor GlassFish e, na
tela de frameworks, escolher JavaServer Faces e Hibernate (Figura 8). Não se esqueça de escolher
a conexão para o MySQL.
Figura 8 – Configurando projeto com JSF e Hibernate

Fonte: Elaborada pelo autor.

83/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Ao criar o projeto, abrirá uma página hibernate.cfg.xml (Figura 9) contendo dados de conexão
com o MySQL com usuário, senha (se houver) e uma página index.xhtml.
Figura 9 – Configuração hibernate.cfg.xml

Fonte: Elaborada pelo autor.

84/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


O código do arquivo XML deve ser:
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//
EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory>
<property name=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>
<property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>
<property name=”hibernate.connection.url”>jdbc:mysql://localhost:3306/cadastro?zero-
DateTimeBehavior=convertToNull</property>
<property name=”hibernate.connection.username”>root</property>
<property name=”hibernate.connection.password”>suasenha</property>
</session-factory>
</hibernate-configuration> Caso houver senha, no banco de
dados, aparecerá essa linha

85/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Com a conexão criada com Hibernate, o próximo passo é utilizar um: Assistente de Engenha-
ria Reversa do Hibernate. Para isso, volte ao menu de opções do Netbeans e entre em: Novo e
escolha a opção outros (Figura 10): Em Tipos de Arquivos e escolha a opção do Assistente de
engenharia reversa (Figura 11).
Figura 10 – Outras opções dentro do Netbeans

Fonte: Elaborada pelo autor.

86/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 11 – Assistente do Hibernate

Fonte: Elaborada pelo autor.


87/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
Apenas avance até chegar à escolha de tabela que está no banco de dados e adicione a tabela
escolhida como na (Figura 12).
Figura 12 – Escolha de tabela no Hibernate

Fonte: Elaborada pelo autor.


88/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
Agora, o Hibernate gerará um arquivo chamado hibernate.reveng.xml com o seguinte código.

<?xml version=”1.0” encoding=”UTF-8”?>


<!DOCTYPE hibernate-reverse-engineering PUBLIC “-//Hibernate/Hibernate Reverse Engineer-
ing DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd”>
<hibernate-reverse-engineering>
<schema-selection match-catalog=”cadastro”/>
<table-filter match-name=”users”/>
</hibernate-reverse-engineering>

Agora, você criará o POJO, que é a representação da persistência. Volte na pasta do Hibernate e
escolha (Figura 13): Arquivos de Mapeamento e POJOS de banco de dados.

89/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 13 – Mapeamento do Hibernate

Fonte: Elaborada pelo autor.

90/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Como na Figura 14, escolha o arquivo de engenharia reversa, marque todas as opções e nomeie
o pacote de model.
Figura 14 – Gerando POJO

Fonte: Elaborada pelo autor.


91/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
O seu projeto deverá ficar semelhante à Figura 15:
Figura 15 – Estrutura do projeto

Fonte: Elaborada pelo autor.

92/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


O arquivo Users.hbm.xml terá uma estrutura dos campos de sua tabela no banco de dados, como
apresentado no código a seguir:
<?xml version=”1.0”?>
<!-- Generated 02/08/2016 21:18:12 by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name=”model.Users” table=”users” catalog=”cadastro” optimistic-lock=”version”>
<id name=”idUsuario” type=”java.lang.Integer”>
<column name=”id_usuario” />
<generator class=”identity” />
</id>
<property name=”login” type=”string”>
<column name=”login” length=”100” />
</property>
<property name=”senha” type=”string”>
<column name=”senha” length=”100” />
</property>
<property name=”email” type=”string”>
<column name=”email” length=”160” />
</property>
</class>
</hibernate-mapping>
93/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
O arquivo Users.java contém todos GETTERS e SETTERS com as anotações do @Entity da JPA.

package model;
APIs utilizados no JPA
import javax.persistence.Column; Hibernate
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
Anotação JPA
@Entity
@Table(name=”users”
,catalog=”cadastro”
)
public class Users implements java.io.Serializable {

94/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


private Integer idUsuario;
private String login;
private String senha; Construtor
private String email;

public Users() {
}
public Users(String login, String senha, String email) {
this.login = login;
this.senha = senha; Anotação
this.email = email; identificação da
} chave primária
@Id @GeneratedValue(strategy=IDENTITY)

@Column(name=”id_usuario”, unique=true, nullable=false)


public Integer getIdUsuario() {
return this.idUsuario;

95/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


}
GETTERS e
public void setIdUsuario(Integer idUsuario) { SETTES
this.idUsuario = idUsuario;
}
@Column(name=”login”, length=100)
public String getLogin() {
return this.login;
}
public void setLogin(String login) {
this.login = login;
}
@Column(name=”senha”, length=100)
public String getSenha() {
return this.senha;
}
public void setSenha(String senha) {
this.senha = senha;

96/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


}
@Column(name=”email”, length=160)
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}

Com essa estrutura, é possível utilizar recursos da linguagem do Hibernate, o HQL. Para fazer
consultas, por exemplo, clique com botão direito do mouse sobre o arquivo hibernate.cfg.xml e
escolha a opção: Executar a consulta HQL (Figura 16).

97/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 16 – Consulta com HQL

Fonte: Elaborada pelo autor.

98/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Dentro da tela de consulta, poderá utilizar
o HQL. Se, na primeira consulta, não fun-
cionar, deverá atualizar o projeto (limpar e
construir) e tentar novamente. Essa ação
deverá consultar todos os dados inseridos
em sua base na tabela users.
Agora, você configurará o arquivo Hiberna-
teUtil.java. Retorne à pasta do Hibernate,
em que se encontram os arquivos de confi-
guração, e escolha o arquivo como na Figu-
ra 17. Na próxima tela (Figura 18), mude o
nome de NovoHibernateUtil para Hiberna-
teUtil e coloque no mesmo pacote model.

99/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 17 – Inserir arquivo HibernateUtil

Fonte: Elaborada pelo autor.

100/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Figura 18 – Nome e pacote do arquivo HibernateUtil

Fonte: Elaborada pelo autor.

Esse arquivo servirá para o Hibernate utilizar o recurso de sessão em suas transações, ou seja,
para navegar de uma página para outra e utilizar dados. Dentro dessa classe, terá os seguintes
códigos:

101/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


package model;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class HibernateUtil { A fábrica de sessão


utiliza o arquivo
private static final SessionFactory sessionFactory; hibernate.cfg.xml
configurado para
conexão no início da
static { lição.
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println(“Initial SessionFactory creation failed.” + ex);
throw new ExceptionInInitializerError(ex);
}
}
102/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

Com a classe HibernateUtil configurada, agora você terá de criar uma classe com comandos que
enviam informações para camada de visão que é utilizado o JSF. Na classe, coloque o nome de
Consulta.java dentro de um novo pacote chamado controller. O seguinte código deve ter em
sua classe:

package controller;
import model.HibernateUtil;
import model.Users;
import org.hibernate.SessionFactory;
public class Consulta {
private Users user;

public Users getUser() {


return user;
}
103/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
public String sessao(){

try{

SessionFactory fab = HibernateUtil.getSessionFactory();


fab.getCurrentSession().beginTransaction();
this.user = (Users) fab.getCurrentSession().get(Users.class, 1);
fab.getCurrentSession().getTransaction().commit();
fab.getCurrentSession().close();

} catch(Exception e){
e.printStackTrace();
}
return null;
}

104/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Agora, você irá configurar o arquivo faces-config.xml. Escolha a opção, como na Figura 19, para
adicionar o arquivo xml que terá um mapeamento de classe com Beans.
Figura 19 – Arquivo de configuração do JSF

Fonte: Elaborada pelo autor.

105/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Quando o arquivo for criado, deverá inserir o Bean referente à classe que contém o acesso a ses-
são que permitirá navegar os dados na tabela users do seu banco cadastro no MySQL. Para inse-
rir o Bean (Figura 20), coloque o nome referente. No caso, será colocado o nome do Bean de con.
Figura 20 – Criando Bean no arquivo faces-config.xml.

106/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Fonte: Elaborada pelo autor.

Você deve fornecer o nome sugerido ao Bean e localizar a classe Consulta.java para adicionar ao
arquivo xml. Seu código deverá ficar semelhante ao descrito:

<?xml version=’1.0’ encoding=’UTF-8’?>


<faces-config version=”2.2”
xmlns=”http://xmlns.jcp.org/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/
javaee/web-facesconfig_2_2.xsd”>
<managed-bean>
<managed-bean-name>con</managed-bean-name>
<managed-bean-class>controller.Consulta</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>

107/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Agora que configurou o seu arquivo faces-config.xml, você precisará atualizar seu arquivo hi-
bernate.cfg.xml para que o framework entenda que utilizará a sessão.
Deverá inserir uma linha que é uma propriedade referente à sessão:

<property name=”hibernate.current_session_context_class”>
org.hibernate.context.internal.ThreadLocalSessionContext</property>

Seu código deverá ficar semelhante ao código a seguir:

<?xml version=”1.0” encoding=”UTF-8”?>


<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//
EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory>
<property name=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>
<property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>
<property name=”hibernate.connection.url”>jdbc:mysql://localhost:3306/cadastro?zero-
108/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
DateTimeBehavior=convertToNull</property>
<property name=”hibernate.connection.username”>root</property>
<property name=”hibernate.current_session_context_class”>org.hibernate.context.inter-
nal.ThreadLocalSessionContext</property>
<mapping resource=”model/Users.hbm.xml”/>
</session-factory> Propriedade
</hibernate-configuration> adicionada

Toda configuração do Hibernate está pronta, e, agora que você atualizou e criou o Bean no aqui-
vo xml do JSF, é possível acessar os dados com Hibernate. Na página index.xhtml, faça uma atu-
alização, como no código a seguir:

<?xml version=’1.0’ encoding=’UTF-8’ ?>


<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/
xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html”>
109/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Olá minha JSF JPA Hibernate
<h:form>
<h:commandButton value=”Aparecer” action=”#{con.sessao()}” />
<h:outputText id=”teste” value=”id: #{con.user.idUsuario} login=#{con.user.login} se-
nha=#{con.user.senha} email=#{con.user.email}” />
</h:form>
</h:body>
</html>

Na classe Consulta.java, foi determinado para trazer o primeiro registro gravado em sua base
de dados. Se modificar esse registro para 2 ou 3, irá trazer os registros com esse número em sua:
id_usuario.
Não se esqueça de incluir o Driver do MySQL nas Bibliotecas do projeto Web no Netbeans para
110/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA
que ele possa ler as requisições. Faça uma atualização (limpar e construir) em seu projeto e car-
regue para ver o resultado, que ficará como na Figura 21.
Figura 21 – Resultado da aplicação

Fonte: Elaborada pelo autor.

Com essa aplicação, você aprendeu a integrar as tecnologias JSF e JPA com Hibernate, que po-
derão servir como base para outras aplicações futuras. Há uma vasta documentação nos links
disponibilizados para aperfeiçoar os estudos.

111/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Glossário
JPA: Java Persistence API.
Hibernate: framework que utiliza JPA.
JSF: JavaServer Faces.

112/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


?
Questão
para
reflexão

Por que alguns desenvolvedores preferem utilizar JSP ao


invés de JSF e qual dessas tecnologias você escolheria
em sua aplicação?

113/218
Considerações Finais

• Persistência;
• frameworks que implementa o JPA;
• reaproveitamento de código;
• integração de tecnologias utilizando MVC.

114/218
Referências

KONDA, M. Introdução ao Hibernate. Boston: O’Reilly Media, 2014.


LUCKOW, Décio Heinzelmann; DE MELO, Alexandre Altair. Programação Java para a WEB. São
Paulo: Novatec, 2010.
ORACLE. Persistência. Disponível em: <http://www.oracle.com/technetwork/java/javaee/tech/
persistence-jsp-140049.html>. Acesso em jul. 2016.

_______. Tutorial JEE. Disponível em: <http://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html>.


Acesso em: 30 ago. 2016.
TULIO. Aplicação CRUD com JSF2 + Hibernate + JPA + Primefaces. Disponível em: <http://www.
lucianotulio.com.br/hibernate-primefaces/>. Acesso em: 30 ago. 2016.

115/218 Unidade 4 • Configurando o Hibernate e Integração JSF e JPA


Questão 1
1. Qual dessas especificações possui o JPA nativo?

a) JSP.
b) JSF.
c) EJB.
d) JSE.
e) JME.

116/218
Questão 2
2.Qual desses frameworks refere-se à camada View do MVC?

a) JSF.
b) Hibernate.
c) JPA.
d) TopLink.
e) EclipseLink.

117/218
Questão 3
3. No MVC, qual desses frameworks utiliza a camada do Model?

a) Hibernate.
b) JSF.
c) JSP.
d) HTML.
e) XHTML.

118/218
Questão 4
4. Qual dessas opções representa melhor a camada do Controller do MVC?

a) Pode ser considerado o front-end da aplicação.


b) É representado tudo o que está no back-end da aplicação.
c) Tudo o que controla a persistência.
d) Classe que contém a lógica de negócio que trocará informações com outras camadas.
e) É uma classe que configura o mapeamento de Servlets para apresentação.

119/218
Questão 5
5. Qual dessas empresas que mais contribui para o JSF?

a) Microsoft.
b) Apache.
c) Facebook.
d) HP.
e) Googl.

120/218
Gabarito
1. Resposta: C. 4. Resposta: D.

Toda especificação do JPA venho do EJB. A camada Controller pertence ao MVC e nes-
sa camada é desenvolvida a lógica de negó-
2. Resposta: A. cio, ou seja, as regras que serão feitas den-
tro do sistema, por exemplo: o que o cliente
JSF, assim como o JSP, é a camada que apre- irá acessar na camada View não é o mesmo
senta os dados para o cliente. que o administrador irá acessar, há regras e
é nessa camada que deve estabelecê-las.
3. Resposta: A.
5. Resposta: B.
Hibernate persiste os dados, ou seja, a co-
nexão e manipulação dos dados é tratada A empresa Apache recebeu como doação
na camada do Model no MVC que interagem da SUN Microsystems toda especificação do
com as outras camadas que são responsá- JSF e é uma das empresas que mais contri-
veis pelas regras de negócio e apresentação bui para essa tecnologia.
das informações.

121/218
Unidade 5
Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Práti-
co-Conceitual)

Objetivos

1. Práticas de validação.
2. Validadores.
3. Ajax com JavaServer Pages.

122/218
Introdução

A validação de dados utilizando a camada 1 Práticas de Validação


de apresentação facilita o processo de in-
serção de dados validados. No caso do fra- Neste tema, você aprenderá como proceder
mework JSF, os validadores podem ser con- a validação de dados diretamente no fron-
figurados sem a necessidade de validar com t-end (visão) de sua aplicação. Há diversas
a persistência. maneiras de validar dados, desde direto na
persistência, por exemplo, com Hibernate
Contudo, essa validação de dados realizada
que utiliza anotações no modelo de suas
diretamente no cliente traz uma vantagem
classes que trazem mensagens ou trata-
de não acessar o banco de dados toda vez
mento na requisição (HIBERNATE, 2016).
que for requisitado na aplicação. Portanto,
quando há muitos acessos ao servidor, a va- É possível elaborar métodos para validar
lidação feita do lado do cliente não irá one- campos ou inserir dados em formulários ou
rar a capacidade de comunicação do cliente utilizar frameworks para validar dados para
e servidor. segurança, como o spring security empre-
gado principalmente para validar logins e
senha junto com a persistência utilizando
Hibernate (LUCKOW, 2010 p.232-236).

123/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Para essa aplicação, crie um projeto Web no Netbeans ou no Eclipse com framework JSF 2.x com
nome: WebValidador, e na página index.xhtml crie um formulário com os seguintes campos:
Nome, Idade e Telefone com Botão com valor:

<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html”>
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h1>Cadastro de Usuário</h1>
<hr/> Nomes dos campos
<h:form>
<h:panelGrid columns=”2”>
<h:outputLabel value=”Nome” for=”nome” />
<h:inputText id=”nome” label=”Nome” />
<h:outputLabel value=”Idade” for=”idade” />
124/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<h:inputText id=”idade” label=”idade” />
<h:outputLabel value=”Telefone” for=”telefone” />
<h:inputText id=”telefone” label=”telefone” />
<h:commandButton value=”Validar” />
</h:panelGrid>
</h:form>
</h:body>
</html>

O formulário da (Figura 22) gerado pelo código acima com JSF aceita qualquer tipo de caracteres
e isso irá gerar erros posteriores de validação em sua base de dados, por exemplo, se um campo
do banco de dados for inteiro e o cliente digitar letras, ocorrerá erros.

125/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Figura 22 – Formulário de cadastro com JSF implementados validadores para não aceitar
números no campo do nome e números ne-
gativos ou letras no campo da idade.
Primeiro, colocaremos no campo nome um
requerimento (required=”true”) e será adi-
cionada a tag <h:messages> para enviar a
mensagem para o cliente. Caso você não
coloque a tag para enviar a mensagem, o
cliente não saberá o que está acontecendo
e simplesmente não irá cadastrar.
Atualize seu código anterior do formulário
Fonte: Elaborada pelo autor. de Cadastro de Usuário como o código logo
Para validar os campos, o framework do JSF abaixo e teste sua aplicação sem a tag <h:-
possui recursos de validação desde suas pri- messages>, que não irá apresentar a men-
meiras versões 1.x até as mais atuais. Você sagem e com a tag aparecerá a mensagem
atualizará as tags do JSF do código anterior. como na (Figura 23).
No formulário de Cadastro de Usuários, serão
126/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html”>
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Tag <h:messages> para
<h1>Cadastro de Usuário</h1> exibir mensagens caso o
<hr/> required for igual a “true”.
<h:form>
<h:messages>
<h:panelGrid columns=”2”>
<h:outputLabel value=”Nome” for=”nome” />
<h:inputText id=”nome” label=”Nome” required=”true” />
<h:outputLabel value=”Idade” for=”idade” />
<h:inputText id=”idade” label=”idade” /> Deixar campo de
preenchimento
<h:outputLabel value=”Telefone” for=”telefone” /> obrigatório.
<h:inputText id=”telefone” label=”telefone” />

127/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<h:commandButton value=”Validar” />
</h:panelGrid>
</h:messages>
</h:form>
</h:body>
</html>

Figura 23 – Validação do campo nome com mensagem

Fonte: Elaborada pelo autor.

128/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
A tag <h:messages> possui diversas variações de validação, por exemplo, para mudar a cor da
mensagem para vermelho poderá atualizar seu código para:
<h:messages errorStyle=”color:red”>.

Personaliza a cor da mensagem requerida.

No campo de validação, é possível personalizar a mensagem (Figura 24) que será apresentada
para o usuário inserindo o requiredMessage, como no código a seguir.

<h:inputText id=”nome” label=”Nome” required=”true” requiredMessage=”Esse campo é obri-


gatório” />

Propriedade para personalizar a


mensagem exibida para o cliente.

129/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Figura 24 – Mensagem personalizada
2 Tipos de Validadores

Os validadores de campos são utilizados


para diversos propósitos, dentre eles: o ta-
manho do campo, tipo double e para vali-
dação de e-mail. Para validar os campos,
você deverá atualizar os códigos utilizados
nos validadores, como no exemplo a seguir:

Fonte: Elaborada pelo autor.

130/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<h:inputText id=”nome” label=”Nome” required=”true” requiredMessage=”Esse campo é obri-
gatório”>
<f:validateLength minimum=”4” maximum=”9” />
</h:inputText>
Validador de tamanho mínimo e
máximo de caracteres.

Na (Figura 25), o campo nome é validado e o cadastro não ocorrerá, gerando uma mensagem
para o usuário. No caso, exibe o mínimo de caracteres ou o máximo permitido.
Figura 25 – validação de tamanho de caracteres

Fonte: Elaborada pelo autor.


131/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
No JSF, há outra maneira de validação uti- Figura 26 – Arquivo de propriedade de validação

lizando um arquivo de propriedades que


contém as mensagens que serão apresen-
tadas nessas requisições. Dentro da tag de
validação do código anterior, não há o re-
quiredMessage, como no <h:inputText>.
Portanto, é possível chamar esse arquivo de
propriedade para validação. Faça um paco-
te com nome jsf.valida.campo e adicione
um arquivo de propriedades chamado mes-
sages, como na Figura 26.
Fonte: Elaborada pelo autor.

Dentro do arquivo, coloque as validações


requisitadas para exibir as mensagens de
acordo com a condição. As mensagens que
foram usadas até o momento devem colo-
car dentro do arquivo messages.properties:

132/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
javax.faces.component.UIInput.REQUIRED=’’{0})’’ campo obrigatório.
javax.faces.validator.LengthValidator.MINIM=Valor menor do que o mínimo permitido ‘’{0}’’
javax.faces.validator.LengthValidator.MINIM=Valor maior do que o máximo permitido ‘’{0}’’
Para o validador funcionar com o arquivo criado (messages.properties), você precisará modificar o
arquivo de configuração faces-config.xml (ORACLE, 2016). Caso não houver o arquivo de configu-
ração em seu projeto, insira um novo. Seu arquivo de configuração deverá ter os seguintes códigos:
<?xml version=’1.0’ encoding=’UTF-8’?>
<faces-config version=”2.2”
xmlns=”http://xmlns.jcp.org/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/
javaee/web-facesconfig_2_2.xsd”>

<application>
<message-bundle>jsf.valida.campo.messages</message-bundle>
</application>
</faces-config> Localizará o arquivo de mensagem
quando requisitado.

133/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Você irá notar que não será preciso utilizar mais o: requiredMessage=”Esse campo é obriga-
tório” dentro de seu código da página index.xhtml. Confira o código a seguir e veja o resultado,
como apresentado na Figura 27.

<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html”
xmlns:f=”http://xmlns.jcp.org/jsf/core”>
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h1>Cadastro de Usuário</h1>
<hr/>
<h:form>
<h:messages errorStyle=”color:red”>
<h:panelGrid columns=”2”>
<h:outputLabel value=”Nome” for=”nome” />
<h:inputText id=”nome” label=”Nome” required=”true” >
134/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<f:validateLength minimum=”4” maximum=”9” />
</h:inputText>
<h:outputLabel value=”Idade” for=”idade” />
<h:inputText id=”idade” label=”idade” />
<h:outputLabel value=”Telefone” for=”telefone” />
<h:inputText id=”telefone” label=”telefone” />
<h:commandButton value=”Validar” />
</h:panelGrid>
</h:messages>
</h:form>
</h:body>
</html>

135/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Figura 27 – Validado com arquivo messages.properties

Fonte: Elaborada pelo autor.

O arquivo messages.properties trará o nome do campo que está sendo validado antes da men-
sagem, como identificado na Figura 27. Nesse arquivo, você poderá adicionar todo tipo de vali-
dação para sua aplicação.
Há muitos tipos de validações que poderão ser adicionadas no documento e isso dependerá do
projeto que você estará desenvolvendo. Além de validações, é possível utilizar outros recursos e
linguagens para otimizar sua aplicação. Uma das tecnologias mais utilizadas é conhecida como
Ajax, que poderá ser um recurso em sua aplicação que reduzirá o acesso constante ao servidor.

136/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
3 AJAX COM JAVASERVER PAGES cript, que faz parte das bibliotecas nativas
do JSF. Pode-se utilizar os códigos de Ajax
A utilização reduz a requisição de informa- em JSF em aplicações Web da seguinte ma-
ções que acessam o servidor tornando mais neira:
eficiente, não onerando o processo de tran-
• Usando a tag f:ajax como um compo-
sação na comunicação. Ajax é o acrônimo
nente do Facelets sem precisar confi-
para assíncrono JavaScript e XML uma tec-
gurar ou adicionar algum componen-
nologia altamente responsiva para aplica-
te;
ções Web. Na plataforma do JEE, há suporte
para utilização com JSF. • utilizar API do JavaScript e o méto-
do jsf.ajax.request() diretamente na
A tecnologia do Ajax não se limita apenas ao
aplicação com possibilidade de cus-
JavaScript e XML, podendo ser utilizados ou-
tomização de controle.
tros tipos nesse conjunto. Em uma requisi-
ção do cliente, o servidor manda respostas de A utilização do Ajax dentro do JSF de forma
atualização para o Document Object Model Built-in torna o uso de suas tags uma forma
(DOM) em formato XML ou em formato JSON. fácil de implementação desse recurso, por
exemplo, utilizando a tag f:ajax dentro do
É possível utilizar o Ajax como um recurso
contexto do JSF:
embutido (built-in) com biblioteca de JavaS-
137/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
<h:inputText value=”#{bean.message}”>
<f:ajax />
</h:inputText>

Para cada aplicação de requisição, é pos-


sível utilizar o Ajax trazendo vantagens na
performance de sua aplicação Web. Há uma
grande variação nos recursos do Ajax den-
tro do JSF. O tutorial de Ajax aborda nas es-
pecificações do JEE uma referência comple-
ta para esse recurso.
Portanto, é possível utilizar Ajax em sua
aplicação para reduzir a troca de informa-
ção com servidor, a fim de melhorar a comu-
nicação, diminuindo o acesso ao servidor e
tendo uma melhor resposta para o cliente.

138/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Glossário
DOM: Document Object Model.
JSON: JavaScript Object Notation.
AJAX: Asynchronous Javascript and XML.

139/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
?
Questão
para
reflexão

Por que utilizar Ajax em suas aplicações e quais seriam


as vantagens?

140/218
Considerações Finais

• Validadores;
• JSF e recursos de componentes;
• Ajax em aplicações JSF;
• integração de tecnologias Web.

141/218
Referências

AJAX. Disponível em: <https://developer.mozilla.org/pt-BR/docs/AJAX>. Acesso em: 10 ago.


2016.
AJAX_2. Disponível em: <http://www.w3schools.com/ajax/>. Acesso em: 10 ago. 2016.
DEVMEDIA. Faceletes. Disponível em: <http://www.devmedia.com.br/facelets-visao-geral-con-
ceitos-utilizacao-e-criacao-de-componentes/14068>. Acesso em: 10 ago. 2016.

DOM. Disponível em: <https://www.w3.org/DOM/>. Acesso em: 10 ago. 2016.


HIBERNATE. Disponível em:<http://hibernate.org/>>. Acesso em: 10 ago. 2016.
LUCKOW, Décio Heinzelmann; DE MELO, Alexandre Altair. Programação Java para a WEB. São
Paulo: Novatec, 2010.
ORACLE. Persistência. Disponível em: <https://docs.oracle.com/javase/tutorial/i18n/intro/steps.
html>. Acesso em: 30 jul. 2016.

ORACLE _2. Tutorial JEE. Disponível em: <http://docs.oracle.com/javaee/6/tutorial/doc/gkace.


html>. Acesso em: 2 ago. 2016.

142/218 Unidade 5 • Inclusão de Práticas de Validação, Requisição, outras Linguagens e Construção de Projeto (Prático-Conceitual)
Questão 1
1. Qual dessas alternativas requisita ao cliente o preenchimento do campo
obrigatório?

a) <h:inputText id=”nome” label=”Nome” required=”true” [...]


b) <h:inputText id=”nome” label=”Nome” required=”false” [...]
c) <h:inputText id=”nome” label=”Nome” [...]
d) <h:inputText id=”nome” label=”Nome” quired=”true” [...]
e) <h:inputText id=”nome” label=”Nome” require=”true” [...]

143/218
Questão 2
2. É possível ler um arquivo messages.properties para validação. Em qual
documento é declarado para ser lido na sua aplicação?

a) index.jsp.
b) web.xml
c) faces.xml
d) config.xml
e) faces-config.xml

144/218
Questão 3
3. Em qual dessas tags é declarado o arquivo messages.properties?

a) <message>jsf.valida.campo.messages</message>
b) <message-bundle>jsf.valida.campo.messages</message-bundle>
c) <bundle>jsf.valida.campo.messages</bundle>
d) < application>jsf.valida.campo.messages</application>
e) < faces-config>jsf.valida.campo.messages</faces-config>

145/218
Questão 4
4. Qual dessas alternativas é correta no uso do Ajax com JSF?

a) É possível utilizar o Ajax como um recurso embutido (built-in) com bibliotecas de JSON que
faz parte do JSF.
b) É possível utilizar o Ajax como um recurso embutido do framework com bibliotecas de JavaS-
cript que faz parte das biblioteca nativas do JSP.
c) É possível utilizar o Ajax como um recurso importado com bibliotecas de JavaScript que faz
parte do JSF.
d) É possível utilizar o Ajax como um recurso embutido (built-in) com bibliotecas de JavaScript
que faz parte das biblioteca nativas do JSF.
e) É possível utilizar o Ajax como um recurso inserido com bibliotecas que faz parte do JSF.

146/218
Questão 5
5. Para utilizar Ajax com JSF, qual desses procedimentos de tag é correto?

a) tag f:ajax como um componente do Facelets.


b) tag ajax como um componente do Facelets.
c) tag e:ajax como um componente do Facelets.
d) tag h:ajax como um componente do Facelets.
e) tag c:ajax como um componente do Facelets.

147/218
Gabarito
1. Resposta: A. 4. Resposta: D.

O required deve ser igual a ‘true’, que signi- O Ajax se encontra embutido no JSF.
fica que o campo é requerido.
5. Resposta: A.
2. Resposta: E.
A tag utilizada é a f:ajax no JSF.
O nome correto de configuração para JSF
estabelecido pelas normas regulamenta-
das pela ORACLE como nome padrão do ar-
quivo utilizado na elaboração dos padrões,
os demais não estão completos ou não se
referem ao JSF.

3. Resposta: B.

O nome da tag deve estar declarada dentro


do <message-bundle> por padrão.

148/218
Unidade 6
JSF com PrimeFaces

Objetivos

JSF é uma tecnologia que incorpora caracte-


rísticas do padrão MVC, que separa a aplica-
ção em três camadas: modelo, visualização
e controle. Neste tema, serão abordados os
tópicos referentes a:
1. PrimeFaces
2. MVC

149/218
Introdução

O JavaServer Faces (JSF), como já menciona- cliente, principalmente quando o usuário


do e utilizado em outros módulos, é um fra- tenta retornar para a sessão anterior (COR-
mework com diversos recursos, que faz par- DEIRO, 2014 p.16).
te da especificação do JEE (JSR-314) e utiliza Portanto, o JSF possui a característica de um
padrões (JCP, 2016). framework MVC dentro das especificações
Essa tecnologia Web possui componentes do Java Community Process (JCP) e possui
visuais pré-definidos para facilitar o desen- validadores e inclusão built-in do Ajax (Fi-
volvimento em suas aplicações, e, dentre gura 28).
esses componentes pré-prontos, desta- Figura 28 – Representação da iteração dos objetos no MVC
cam-se: calendários, combo, caixa de tex-
tos e tabelas (CAELUM, 2016).

1 MVC

Os componentes do JSF possuem caracte-


rísticas de Stateful, ou seja, guardam o esta-
do dos componentes das páginas automa-
Fonte: Elaborada pelo autor.
ticamente, evitando erros de navegação do
150/218 Unidade 6 • Metodologia da Problematização
A arquitetura do JSF possui algumas especificações dentro dos padrões de desenvolvimento em
camadas que separa a camada de negócios, dados e visão na aplicação. A ORACLE define a ar-
quitetura aplicada ao JSF e o padrão conhecido como MVC (Model, View e Controller):

[...] Uma das principais vantagens do JSF é que ele é ao mesmo tempo
um padrão de interface de usuário Java Web, bem como um quadro que
segue firmemente o padrão de design Model-View-Controller (MVC). Isso
faz com que aplicativos JSF sejam muito mais gerenciáveis, porque o có-
digo de interface do usuário (View) é claramente separado dos dados e
lógica (modelo). Para preparar o contexto JSF, que fornece acesso a dados
de aplicação para as páginas, e para se proteger contra o acesso não au-
torizado ou impróprio das páginas, todas as interações do usuário com o
aplicativo são manipuladas por um front-end “Faces” servlet (Controller)
[...] (ORACLE, 2016).
A Microsoft faz referência ao padrão MVC original da comunidade Smalltalk em um de seus sites
e descreve o padrão (MSDN, 2016):

151/218 Unidade 6 • Metodologia da Problematização


Modelo: o modelo administra o comporta- dos no MySQL para uma base no ORACLE
mento e os dados do domínio da aplicação e ou DB2 da IBM.
responde aos pedidos de informação sobre Há muitas aplicações que começam com
o seu estado (geralmente a partir do ponto uma tecnologia e, por razões políticas ou
de vista) e às instruções para alterar o esta- por necessidade, o sistema gerenciador de
do (geralmente a partir do controlador). banco de dados deve ser substituído, sendo
Visão: a visão gere a exibição de informa- que segue o mesmo princípio para outras
ções. camadas que podem sofrer mudanças sem
Controlador: o controlador interpreta as atingir toda arquitetura.
entradas de mouse e teclado do usuário, in- O JSF foi desenvolvido sob os padrões da
formando o modelo ou a visão para mudar engenharia de software e se aplica ao mo-
conforme o caso. delo MVC. Para entender como o JSF se en-
O modelo MVC é utilizado em qualquer tipo caixa dentro do MVC, uma representação
de projeto em camadas, trazendo a vanta- no Quadro 3 pode nos auxiliar.
gem de ser mais independente. Por exem-
plo: se sua aplicação for desenvolvida no
padrão MVC, poderá trocar sua base de da-

152/218 Unidade 6 • Metodologia da Problematização


Quadro 3 – Modelo MVC no JSF

Modelo Visão Controlador


• entidades e regras de • Componentes UI em • Faces Servlet (Front
negócio. páginas JSP/XHTML Controller)
• Objetos gerais da • Renderizadores (HTML, • Backing Bean (Page
aplicação, persistência. XML, bootstrap, jquery). Controller ou Modelo)

Fonte: Adaptado de Casaopen (2016).

2 PRIMEFACES
É um conjunto de componentes desenvolvido com as especiações do JSF e utiliza de forma nati-
va o Ajax. Para usar o framework do PrimeFaces, você precisa ter instalado no mínimo o Java 5 e
o JSF 1.2 (PALIARI, 2016). Entretanto, é recomendado instalar as últimas versões do framework
disponíveis no site oficial.
O PrimeFaces não é o único framework que possui a mesma linha de componentes que traba-
lham com JSF. Há outras empresas que disponibilizam tecnologias semelhantes, dentre elas: Ri-
chFaces (JBoss) e ICEFaces(ICEsoft).
Destaque para o framework ICEFaces, que possui ferramentas visuais em uma palette para ar-
rastar e soltar (Drag and drop) semelhantes ao antigo Visual JSF (ICEFACES, 2016).

153/218 Unidade 6 • Metodologia da Problematização


O framework PrimeFaces é mantido pela O PrimeFaces pode ser adquirido direta-
Prime Teknoloji da Turquia e assegura um mente do site e incluído no projeto como
desenvolvimento de forma leve e simples uma biblioteca. O framework apresenta a
para o usuário (PRIMEFACES, 2016). Além possibilidade de trocar o visual da aplicação
disso, a biblioteca foi projetada para reso- e seus componentes podem ser utilizados
lução de problemas de forma mais rápida.
em projetos Mobile.
O framework possui mais de cem compo-
nentes baseados em Ajax, add-ons para A integração do PrimeFaces com o JSF pode
mobile em aplicações Web com aparência trazer vantagens para o desenvolvedor ao
nativa e fácil integração com suporte para o utilizar componentes prontos, por exemplo:
Eclipse e o Netbeans (ORACLE_2, 2016). popular combos e preencher tabelas com
dados.
Para saber mais Portanto, o conhecimento de novas tecno-
O JSF pode ser agregado a diferentes tipos de fra-
logias e o domínio do uso de padrões da en-
meworks, dentre eles PrimeFaces, que possui uma
genharia de software, como o MVC poderá
coleção de componentes baseados em Ajax facili-
trazer benefícios na qualidade no desen-
tando o uso no desenvolvimento.
volvimento com JSF.

154/218 Unidade 6 • Metodologia da Problematização


Glossário
MVC: Document Object Model.
SERVLET: “servidorzinho”.
FRONT-END: camada de visão do MVC.

155/218 Unidade 6 • Metodologia da Problematização


?
Questão
para
reflexão

Por que utilizar diferentes frameworks com JSF e quais


seriam as diferenças de utilizar na camada View forma e
componentes baseados em Ajax e de aparência rica?

156/218
Considerações Finais

• MVC
• PrimeFaces
• Frameworks
• Design Pattern

157/218
Referências

CAELUM. Apostila de Java. Disponível em: <https://www.caelum.com.br/apostila-java-testes-js-


f-web-services-design-patterns/introducao-ao-jsf-e-primefaces/#7-2-caracteristicas-do-jsf>.
Acesso em: 30 ago. 2016.
CASAOPEN. JSF. Disponível em: <http://www.casaopen.com.br/2012/12/jsf-mvc.html>. Acesso
em: 30 ago. 2016.
_______. Modelo MVC. Disponível em:<http://www.casaopen.com.br/2012/12/jsf-mvc.html>.
Acesso em ago. 2016.
CORDEIRO, Gilliard. Aplicações Java para a web com JSF e JPA. São Paulo: Casa do Código, 2014.
ICEFACES. Componentes. Disponível em:<http://component-showcase.icesoft.org/component-
-showcase/showcase.iface>. Acesso em ago. 2016.

JCP. Java Specification Requests. Disponível em: <https://jcp.org/en/jsr/detail?id=314>. Acesso


em: 30 ago. 2016.
MSDN. Padrão MVC. Disponível em: <https://msdn.microsoft.com/en-us/library/ff649643.aspx>.
Acesso em: 10 ago. 2016.
ORACLE. Introdução ao JavaServer Faces. Disponível em: <http://www.oracle.com/technetwork/
topics/index-090910.html>. Acesso em: 30 ago. 2016.
158/218 Unidade 6 • Metodologia da Problematização
ORACLE_2. PrimeFaces. Disponível em: <http://www.oracle.com/technetwork/developer-tools/
netbeans/community/customer-case-study-primefaces-1912066.pdf>. Acesso em: 30 ago. 2016.

PALIARI, Marcos. O que é PrimeFaces. Disponível em: <http://www.matera.com/br/2011/09/30/


matera-utiliza-o-primefaces/>. Acesso em: 30 ago. 2016.

PRIMEFACES. Partners. Disponível em: <http://www.primefaces.org/partners>. Acesso em: 30


ago. 2016.

159/218 Unidade 6 • Metodologia da Problematização


Questão 1
1. Qual dessas alternativas possui a descrição da sigla MVC?

a) Model View Controller.


b) Model Viewed Controlled.
c) Modeled View Controller.
d) Model View Control.
e) Model View Controll.

160/218
Questão 2
2. Qual dessas empresas é responsável pelo ICEFaces?

a) Apache.
b) JBoss.
c) PrimeFaces.
d) RichFaces.
e) ICEsoft.

161/218
Questão 3
3. O padrão MVC tem origem de qual projeto?

a) Smalltalk.
b) JAVA.
c) Visual Studio.
d) NET.
e) UML.

162/218
Questão 4
4. Como é considerado o MVC dentro da engenharia de software?

a) O MVC é considerado um modelo de projeto (Design Model).


b) O MVC é considerado um padrão de projeto (Design Model).
c) O MVC é considerado um padrão de projeto (Design Pattern).
d) O MVC é considerado um projeto (Design Model).
e) O MVC é considerado um modelo de software (Design Model).

163/218
Questão 5
5. Qual framework pelo qual a empresa Prime Teknoloji da Turquia é res-
ponsável?

a) RichFaces.
b) PrimeFaces.
c) ICEFaces.
d) JavaServer Faces.
e) JavaServer Pages.

164/218
Gabarito
1. Resposta: A. 5. Resposta: B.

Essa é a descrição correta de cada sigla. O PrimeFaces é de uma empresa da Turquia.

2. Resposta: E.

A empresa responsável é a ICEsoft.

3. Resposta: A.

O MVC começou com o projeto Smalltalk


antes do JAVA.

4. Resposta: C.

É um padrão de projeto segundo a enge-


nharia de software.

165/218
Unidade 7
Temas do PrimeFaces, apresentação e utilização

Objetivos

1. Temas
2. PrimeFaces
3. Configuração

166/218
Introdução
O framework PrimeFaces possui a caracte-
1 TEMAS DO PRIMEFACES
rística de adicionar temas para trabalho em
projetos Web; é um complemento que dei- O framework PrimeFaces possui caracterís-
xa o visual de sua aplicação moderno e com tica de adicionar temas para trabalho em
satisfatória aparência para o cliente. projetos Web. No site oficial, é possível ad-
No site oficial, é possível adquirir temas quirir temas gratuitos para utilizar em sua
gratuitos para utilizar em sua aplicação. Há aplicação.
diversos temas a serem escolhidos no ar- Além disso, a utilização de temas com Pri-
cabouço de conteúdos do PrimeFaces. De meFaces é algo simples de implementar,
acordo com a aplicação que irá desenvolver, como será mostrado adiante. No site oficial,
poder-se-á selecionar a que se melhor en- são oferecidos outros temas pagos na cate-
caixa com suas perspectivas. goria premium.
Os temas do PrimeFaces possuem cores e O PrimeFaces integra-se ao ThemeRoller
efeitos que podem ser adicionados, trocados CSS framework, que disponibiliza outros
ou removidos de sua aplicação com facilida- temas para utilizar em sua aplicação Web.
de utilizando o arquivo em xml. Assim, seu No site do jQuery, poderá escolher diversas
projeto vislumbra uma apresentável camada alternativas para utilizar em sua aplicação.
de visão e desenvolvimento mais produtível.
167/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Além desses recursos, o PrimeFaces também se integra ao framework Bootstarp, que possui
muitos temas gratuitos e é fácil de utilizar em projetos Web.
Para um maior conhecimento desse recurso do Primefaces, você irá conhecer cinco temas que
poderão ser utilizados em sua aplicação. Esses temas podem ser desde o layout de sua aplicação
até componentes, como calendários disponibilizados sob a licença Apache.
O site do PrimeFaces possui um showcase para você fazer download e utilizar os componentes (Fi-
gura 29). Para escolher, entre no site, clique sobre os componentes e verá o código e o componente.
Figura 29 – PrimeFaces showcase

Fonte: PrimeFaces (2016).

168/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Após inserir o arquivo .jar do PrimeFaces em seu projeto, você precisa declarar no escopo do ca-
beçalho da página JSF os componentes do framework, como ilustra o código a seguir:

<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html”
xmlns:p=”http://primefaces.org/ui”>

Letra ‘p’ que representará os


componentes do PrimeFaces

Com o framework do PrimeFaces dentro de seu projeto, é possível utilizar em suas páginas do JSF
diversos temas em sua página xhtml do JSF que estão disponíveis dentro do repositório oficial na
Web para fazer download.
Você verá cinco temas diferentes aos temas (skins) disponíveis para utilizar em sua aplicação:
black-tie, bluesky, bootstrap, casablanca e dark-hive. Aplicando em seu projeto e ao carregar
os temas, verá essa aparência:

169/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
1º Tema: black-tie (Figura 30):
Figura 30 – Black-tie tema do PrimeFac

Fonte: Elaborada pelo autor.

2º Tema: bluesky (Figura 31):


Figura 31 – Bluesky tema do PrimeFaces

Fonte: Elaborada pelo autor.

170/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
3º Tema: bootstrap (figura 32):
Figura 32 – Bootstrap tema do PrimeFaces

Fonte: Elaborada pelo autor.

4º Tema: casablanca (Figura 33):


Figura 33 – Casablanca tema do PrimeFaces

Fonte: Elaborada pelo autor.


171/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
5º Tema: dark-hive (Figura 34):
Figura 34 – Dark-hive tema do PrimeFaces

Fonte: Elaborada pelo autor.

Você observou uma grande diferença dependendo do tema que escolher para sua aplicação. Tes-
te alguns temas para saber quais são os mais adequados para utilizar em algum projeto que tem
em mente ou mesmo para praticar.

2 Utilizando temas em sua aplicação

Utilizar os temas em sua aplicação com JSF + PrimeFaces é uma tarefa relativamente fácil. Ao
escolher o tema no repositório oficial do PrimeFaces, você precisa importar o arquivo jar para
dentro de seu projeto como na (Figura 35), que ilustra os arquivos com os temas apresentados.

172/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Note que o framework do JSF está no mes- Ao importar um ou mais temas, você pode
mo local: mudar a aparência de sua aplicação assim
Figura 35 – Framework do JSF no projeto Netbeans
que desejar. Para configurar o tema a ser uti-
lizado, abra o arquivo web.xml de sua apli-
cação e adicione as seguintes tags (<con-
text-param></context-param>), como o
código a seguir:

Para saber mais


É possível importar diversos temas em seu proje-
to e modificar sempre que precisar. Os temas são
arquivos jars de fácil manipulação que trabalham
com o JSF.

Fonte: Elaborada pelo autor.

173/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
<?xml version=”1.0” encoding=”UTF-8”?>
<web-app version=”3.1” xmlns=”http://xmlns.jcp.org/xml/ns/javaee” xmlns:xsi=”http://www.
w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/ja-
vaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd”>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<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>/faces/*</url-pattern>
</servlet-mapping>
<session-config><session-timeout>30</session-timeout>
174/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
</session-config>
<welcome-file-list><welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>dark-hive </param-value>
</context-param>
Tag para escolher o tema do
</web-app> PrimeFaces em sua aplicação

Observe no código anterior que o nome do tema que você escolheu deve ficar entre a tag (<pa-
ram-value>seu tema<param-value>), e o nome a ser colocado é o mesmo do arquivo jar.
Depois de configurar o arquivo XML e escolher o tema de sua aplicação, adicione alguns compo-
nentes do JSF para testar a sua aplicação. No código a seguir, há uma caixa de texto e um botão
dentro do corpo da página index.xhtml para verificar a mudança do tema.

175/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
<?xml version=’1.0’ encoding=’UTF-8’ ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/
xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://xmlns.jcp.org/jsf/html” Declaração dos
componentes do
xmlns:p=”http://primefaces.org/ui”> PrimeFaces
<h:head>
<title>Meu Tema</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns=”4” cellpadding=”5”>
<h:outputLabel for=”name” value=”Nome:” style=”font-weight:bold” />
<p:inputText id=”name” value=”#{basicView.text}” />
<p:commandButton value=”Enviar” update=”display” icon=”ui-icon-check” />
<h:outputText id=”display” value=”#{basicView.text}” />
</h:panelGrid>
</h:form>
</h:body> Componentes do PrimeFaces. A tag
inicia com ‘p’ e em seguida o
</html> componente escolhido.
176/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Ao carregar sua aplicação, você verá um re-
sultado semelhante à Figura 22 com o tema
dark-hive, que está declarado no arquivo
XML. Escolha um tema e veja os resultados.
PrimeFaces é um framework moderno que
apresenta facilidade no uso de aplicações
Web. Há diversas possibilidades no uso do
JSF + PrimeFaces, dentre elas: aplicações
Web e Mobile.
É recomendado explorar o framework do
PrimeFaces e seus componentes que possi-
bilitam trazer uma qualidade no front-end
de sua aplicação. Além disso, a integração
de tecnologias como Ajax e outros frame-
works com jQuery aumenta a possibilidade
em melhorar o visual da aplicação.

177/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Glossário
CSS: Cascading Style Sheets.
SKINS: temas.
STATEFUL: estado dos objetos.

178/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
?
Questão
para
reflexão

Como você escolheria o tema de sua aplicação? Quais se-


riam os critérios adotados?

179/218
Considerações Finais

• Temas;
• configurando temas;
• tipos de temas diferentes;
• aplicando temas.

180/218
Referências

BOOTSTRAP. Disponível em: <http://getbootstrap.com.br/>. Acesso em: 30 ago. 2016.


CORDEIRO, Gilliard. Aplicações Java para a web com JSF e JPA. São Paulo: Casa do Código, 2014.
JQUERY. Disponível em: <http://jqueryui.com/themeroller/>. Acesso em: 30 ago. 2016.
PRIMEFACES. Componentes do PrimeFaces. Disponível em: <http://www.primefaces.org>. Aces-
so em: 30 ago. 2016.

181/218 Unidade 7 • Planejamento de Ensino na Universidade: a Importância da Utilização dos Recursos Didáticos na Construção
do Conhecimento
Questão 1
1. Para que serve o ThemeRoller CSS framework?

a) Para facilitar o layout do JSP.


b) Adiciona temas do jQuery.
c) Adiciona temas do bootstrap.
d) Adiciona temas do HTML5.
e) Recurso de rotação de componentes.

182/218
Questão 2
2. O que é possível encontrar no showcase do PrimeFaces?

a) Diversos temas e componentes.


b) Apenas temas.
c) Apenas componentes.
d) É uma apresentação de temas.
e) É o local de informações e fórum.

183/218
Questão 3
3. O que é Stateful?

a) Estado dos objetos.


b) Estado do parâmetro.
c) Estado da variável.
d) Estado do JSF.
e) Estado do Servlet

184/218
Questão 4
4. Essa declaração xmlns:p=”http://primefaces.org/ui”> no escopo da JSF
representa?

a) Estado do parâmetro.
b) Estado da variável.
c) Estado dos objetos.
d) Adição de layout.
e) Adição de componentes

185/218
Questão 5
5. Em qual tag deve se colocar o nome do tema do PrimeFaces dentro da
<context-param>?

a) <param-name>
b) <param-value>
c) <url-pattern>
d) <session-config>
e) <welcome-file>

186/218
Gabarito
1. Resposta: B. 5. Resposta: B.

Recurso junto ao jQuery. Tag padrão de para declarar o tema escolhido.

2. Resposta: A.

Há uma variação dos temas e componentes.

3. Resposta: A.

Referente ao objeto.

4. Resposta: E.

Declaração do framework para componentes.

187/218
Unidade 8
JSF com JPA e MVC apresentação e utilização

Objetivos

1. CRUD
2. ORM
3. JPA
4. DAO
5. MVC

188/218
Introdução

Nos módulos anteriores, você aprendeu Portanto, o JPA será utilizado como fra-
como configurar o JSF com PrimeFaces e es- mework de persistência e, antes de come-
colher os temas de sua aplicação; ele poderá çar a desenvolver o projeto, verifique se o
ser usado com qualquer outro framework, banco de dados de nome: cadastro com a
inclusive com persistência. tabela users utilizado em lições anteriores
No Tema 4, você aprendeu a configurar o Hi- está disponível em seu Sistema Gerenciador
bernate integrando com JSF e JPA Hibernate, de Banco de Dados MySQL:
fazendo uma pequena aplicação para verifi-
car o funcionamento que faz uma consulta
ao banco de dados.
Neste tema, o foco é a persistência que re-
alizará as ações de CRUD (Create, Read, Up-
date e Delete) no padrão MVC (Model, View
e Controller). Além disso, colocar-se-á em
prática a persistência utilizando padrão
MVC com JSF.

189/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


CREATE DATABASE cadastro; Nome do banco de dados

CREATE TABLE users( Nome da tabela e atributos

id_usuario int not null auto_increment,


login varchar(100) null,
senha varchar(100) null,
email varchar(160) null,
Primary key(id_usuario));

Para realizar a persistência, será utilizado o mesmo banco de dados nomeado de: cadastro com
a tabela users do Tema 4. Inclua alguns registros na base de dados para serem apresentados em
sua aplicação com JSF.
No Tema 4, você fez uma pequena aplicação com a integração das tecnologias do JSF com persis-
tência, ao carregar o projeto pode entender como funciona a persistência de dados, conseguin-
do ter um melhor entendimento e ao clicar no botão na aplicação Web a programação trouxe os
dados do primeiro registro da tabela.
Para melhor aprendizado, você fará uma aplicação do CRUD utilizando o Netbeans. O objetivo é
utilizar o JPA. No caso, utilizará o EclipseLink para persistência, que é um dos frameworks seme-
190/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
lhante ao Hibernate, com as mesmas espe- to Java Web (JEE), não escolha nenhum fra-
cificações do JPA. mework, apenas avance e, assim que con-
Lembre-se de que o JPA é uma especificação cluir, verifique se seu projeto ficou com a
do JAVA vinda do EJB e há diversos frameworks aparência da Figura 36:
que auxiliam na persistência. A persistência Figura 36 – Estrutura do projeto WebCrudJPA

com JPA auxiliará na criação do CRUD.

1 CRIANDO PROJETO JPA CRUD


JSF
Primeiro, você deverá criar um projeto Java
Web (JEE) no Netbeans com nome sugerido
de WebCrudJPA, e depois escolha o servidor
GlassFish 4.x, que é um servidor completo
com todas as especificações do EJB.
Lembre-se de que o servidor TOMCAT não
contém todas as especificações do JPA e é
Fonte: Elaborada pelo autor.
apenas um Web container. Ao criar o proje-
191/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
Agora que criou o projeto no Netbeans, deve ir à aba Serviços (Database Explorer) e fazer uma
conexão com o banco de dados cadastro do MySQL, conforme a Figura 37, a seguir:
Figura 37 – Conexão com MySQL utilizando Netbeans

Fonte: Elaborada pelo autor.


192/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
Com o botão direito do mouse, clique em sua aplicação Web e entre em outros (Figura 38) e es-
colha persistência:
Figura 38 – Diretório para escolher aplicabilidade a ser utilizada

Fonte: Elaborada pelo autor.

193/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Logo em seguida (Figura 39), escolha Unidade de Persistência:
Figura 39 – Criação de unidade de persistência com JPA

Fonte: Elaborada pelo autor.

Ao abrir a próxima tela, escolha o Provedor de Persistência, no caso: EclipseLink (JPA 2.1) e na
estratégia de tabela coloque nenhuma (Figura 40), O próximo passo é estabelecer a conexão
com banco de dados cadastro no MySQL (Figura 41):

194/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Figura 40 – Escolha de provedor de JPA

Fonte: Elaborada pelo autor.

195/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Figura 41 – Escolhendo conexão com base de dados para mapeamento do JPA

Fonte: Elaborada pelo autor.

196/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Realizado o procedimento, ficará como na Figura 42, e em seguida finalize.
Figura 42 – Passos de configuração do JPA

Fonte: Elaborada pelo autor.

197/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Pronto, há uma unidade de persistência em sua aplicação e o próximo passo é mapear uma clas-
se do banco de dados. Para isso, vá em persistência, que está dentro de outros e escolha: Classes
de Entidade de Banco de Dados (Figura 43).
Figura 43 – Inserindo a classe de banco de dados

Fonte: Elaborada pelo autor.

Adicione a tabela que irá fazer o mapeamento. No banco de dados cadastro, há uma tabela users
que você irá utilizar nessa aplicação. Em seguida, deverá dar um nome ao pacote que será criado
a classe. Você deve colocar o nome de modelo e poderá avançar e finalizar (Figura 44):

198/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Figura 44 – Configurações da classe

Fonte: Elaborada pelo autor.

199/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Agora, o projeto possui o mapeamento dos itens do banco de dados, que é um modelo para criar
o CRUD. Em outros, na persistência deverá adicionar uma classe controladora JPA (Figura 45):
Figura 45 – Classe controladora

Fonte: Elaborada pelo autor.

Essa classe é responsável em utilizar os métodos do CRUD. Na sequência, escolha a classe que está
dentro do modelo e, em seguida, troque o nome do pacote para: controle e finalize (Figura 46):

200/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Figura 46 – Configuração para classe controladora

Fonte: Elaborada pelo autor.


201/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
O seu projeto contém as duas camadas do Model e Controller do padrão MVC. Você irá completar
o CRUD com JSF, que é a View desse modelo. Entre em outros e em persistência escolha: Páginas
JSF de classes de entidades (Figura 47):
Figura 47 – classe de entidade do JSF

Fonte: Elaborada pelo autor.

Ao selecionar essa opção, escolha a classe dentro do modelo e depois avançar e concluir. Verá
que a estrutura de seu projeto criará uma pasta chamada users com páginas JSFs com o CRUD
(Figura 48) e as pastas do restante do MVC.
202/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
Figura 48 – Estrutura do projeto WebCrudJPA

Fonte: Elaborada pelo autor.

Carregue seu projeto, que deverá iniciar com a seguinte tela (Figura 49):
203/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
Figura 49 – Resultado da aplicação WebCrudJPA

Fonte: Elaborada pelo autor.

Ao clicar para mostrar todos os itens, você verá o quadro apresentado na Figura 50, e, dentro
dele, é possível editar, ver e apagar o item desejado:

204/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Figura 50 – Lista de itens cadastrados no banco de dados

Fonte: Elaborada pelo autor.

205/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Para criar usuários, deve=se acessar o link (Figura 51) logo abaixo do quadro ou voltar para o
início da aplicação:
Figura 51 – Tela de cadastro no banco de dados

Fonte: Elaborada pelo autor.

206/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Portanto, essa é uma aplicação completa RichFaces, PrimeFaces, JPA, HTML 5.
com padrões do MVC e ações do CRUD. É O JEE pode ser utilizado em aplicações Web
possível modificar os itens para português e também para dispositivos móveis, como
ou qualquer parte do programa. Essa é uma tablets e smartphones. Os servidores Web
aplicação auxiliada pelo EclipseLink (JPA) e para JEE possuem uma tecnologia de pro-
Netbeans, que facilita o desenvolvedor criar cessamento muito alta e garantem transa-
exemplos como esse apresentado. ções de dados e o uso de padrões e especi-
O JPA e diversos recursos do JSF são ferra- ficações.
mentas que permitirão aplicações Web me- A tecnologia JAVA está sempre inovando e
lhor elaboradas e com tecnologias que aju- muitas de suas atualizações são feitas por
darão na performance como ferramentas diversos colaboradores, dentre eles: Apache
do Ajax e também com JPA na persistência. e o PrimeFaces. O JAVA, desde seu lança-
É possível utilizar diversos frameworks e mento, vem conquistando muitos desenvol-
padrões dentro de aplicações Web, que são vedores por ser uma das tecnologias mais
abrangentes e com propósitos diferentes. confiáveis e colaborativas.
A especificação do Java Enterprise Edition é
adaptada e atualizada a diversas tecnolo-
gias existentes para Web, dentre elas: Ajax,
207/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino
Glossário
JPA: Java Persistence API.
DAO: Data Access Object.
MVC: Model View Controller.

208/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


?
Questão
para
reflexão

Como escolher um provedor JPA em aplicações Web com


JEE?

209/218
Considerações Finais
• CRUD;
• PERSISTÊNCIA;
• FRAMEWORK;
• JPA;
• DAO;
• provedores JPA e EclipseLink;
• integração de tecnologias;
• aplicação JSF com JPA e DAO no padrão MVC;
• aplicação Web com CRUD completa;
• manipulação de dados na Web com JPA e MVC;
• servidor de aplicação para aplicação JPA/ORM.

210/218
Referências

DEVMEDIA. Netbeans. Disponível em: <http://www.devmedia.com.br/o-ide-netbeans-revista-e-


asy-java-magazine-7-parte-2/21376>. Acesso em: 30 ago. 2016.

GONSALVES, Edson. JPA. Disponível em: <http://www.edsongoncalves.com.br/category/jpa-2-


0/>. Acesso em: 30 ago. 2016.

GLASSFISH. Servidor Web. Disponível em: <https://glassfish.java.net/download.html>. Acesso em:


30 ago. 2016.
JBOSS. CRUD. Disponível em: <http://docs.jboss.org/tools/latest/en/seam/html/crud_database_
application.html>. Acesso em: 30 ago. 2016.

211/218 Unidade 8 • Dimensão Prática: Construção de Planos de Ensino


Questão 1
1. O que é CRUD?

a) São aplicações realizadas no banco de dados.


b) Padrão Web de provedor.
c) Persistência de dados JPA.
d) Sigla de design pattern.
e) Referência ao MVC.

212/218
Questão 2
2. Qual dessas ferramentas é uma IDE completa de gerenciamento de ban-
co de dados?

a) Eclipse.
b) JDeveloper.
c) Netbeans.
d) Workbench.
e) Visual Studio.

213/218
Questão 3
3. Para utilização do JPA, qual desses servidores não possui todas as espe-
cificações do EJB?

a) Glassfish.
b) JBoss.
c) WebSphere.
d) TOMCAT.
e) BEA.

214/218
Questão 4
4. Em qual dessas opções todos são provedores do JPA?

a) Hibernate, EclipseLink, DAO.


b) Hibernate, Eclipse, TopLink.
c) Hibernate, EclipseLink, TopLink.
d) Hibernate, EclipseJPA, TopLink.
e) Hibernate, EclipseLink, TopLinkJPA.

215/218
Questão 5
5. Na aplicação com Hibernate ou EclipseLink que são frameworks de per-
sistência, quando há uma classe com o CRUD em qual pacote é aconselhá-
vel colocar a classe com os métodos de ação de acordo com o padrão MVC?

a) jpa.model.
b) jpa.controller.
c) jpa.view.
d) jpa.aplication.
e) jpa.provedor.

216/218
Gabarito
1. Resposta: A. 4. Resposta: C.
Referem-se aos comandos SQL feitos na ta- Os nomes corretos de provedores com es-
bela de seu banco de dados. pecificação JPA são Hibernate, EclipseLink e
TopLink.
2. Resposta: D.
5. Resposta: B.
Apesar de o Netbeans fornecer algumas
ferramentas, não é considerado completo Nessa classe, há um controle com CRUD e é
como o Workbench. apropriado colocar no pacote jpa.controller.

3. Resposta: D.
O TOMCAT é apenas um Web container e não
possui todas especificações do EJB.

217/218

Você também pode gostar