Você está na página 1de 21

1

Globalcode Open4education
Desenvolvimento um aplicativo
completo usando JSF, EJB e padres
Rodrigo Cndido e Vinny Nunes
Instrutores Globalcode / VOffice
Globalcode Open4education
Agenda
Objetivo / Motivao
Domnio, Ferramentas e Opes de Arquitetura
OA1
Java Persistence API (JPA)
JavaServer Faces (JSF)
OA2
Enterprise Java Beans (EJB)
OA3
Injeo de Dependncia (DI)
Perguntas e Respostas
Globalcode Open4education
Objetivo
Apresentar 3 opes modernas de arquitetura para aplicaes JEE
Globalcode Open4education
Palestrantes
Rodrigo Cndido
Entusiasta de tecnologias EE
SCJP, SCEA, SCWCD
AJ, AW, CJ, CW
Vinny Nunes
Ps OO, Cincias da Computao e Tcnico em Processamento
Java para web desde 1999
Entusiasta de tecnologias de apresentao
SCJP, SCJA, SCWCD
AJ, AW, CJ, CW
2
Globalcode Open4education
Motivao
Simplificar o desenvolvimento:
Usando menos padres de projetos
Usando os recursos do Java 5, em especial anotaes e genricos
Usando as especificaes JCP nas suas verses mais recentes
Usando novos padres como IoC e DI
Encorajar o uso das tecnologias EE
JSF
EJB
Globalcode Open4education
Enquete: tecnologias usadas em produo?
Apresentao
Quem utiliza JSF em produo?
Quem pretende usar?
Quem utiliza Facelets em produo?
Richfaces? IceFaces? Outro? Qual?
Struts? Flex? JavaFX? SilverLight? Outro? Qual?
Negcio e Integrao
EJB 2 ? EJB 3 ? Spring ?
JPA? Com Hibernate? Com TopLink? Outro? Qual?
JBoss? Glassfish? Tomcat? Jetty? WebSphere? Outros?
Globalcode Open4education
Domnio: Quick Post
Artigo (id, ttulo, autor, contedo, publicao, criao)
Categoria (id, nome)
Rtulo (id, nome)
Globalcode Open4education
Ferramentas utilizadas
eclipse 3.x CPL, EPL (http://www.eclipse.org/)
+ jboss tools 3.x (http://www.jboss.org/tools)
netbeans 6.x CDDL, GPL (http://www.netbeans.org/)
+ Facelets support (https://nbfaceletssupport.dev.java.net/)
mysql 5.x - GPL (http://www.mysql.com)
+ mysql connector/j (http://dev.mysql.com/downloads/#connector-j)
+ mysql tools (http://dev.mysql.com/downloads/gui-tools/5.0.html)
3
Globalcode Open4education
Opes de Arquitetura JEE
# JSF++ JPA Padres EJB DI/IoC Containers
OA1 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
. DAO
. Factory
. Service Locator
. Business
Object
No No Tomcat
Jetty
...
OA2 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
. Service Locator 3.0 No JBoss
Glassfish
WebSphere
...
OA3 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
- 3.0 Sim JBoss
Glassfish
WebSphere
...
Globalcode Open4education
Agenda
Objetivo / Motivao
Estudo de Caso
Java Persistence API (JPA)
JavaServer Faces (JSF)
Enterprise Java Beans (EJB)
Injeo de Dependncia (DI)
Perguntas e Respostas
Globalcode Open4education
Java Persistence API
Primeira especificao (padro) de mapeamento de objetos
Java para base de dados relacional
Integrao com outros frameworks
Hibernate uma implementao de JPA
TopLink Essencials uma implementao de JPA (RI)
POJO (Plain Old Java Objects) Entidades
Mapeamento via metadados (annotation Java 5)
Pode ser utilizado fora de containeres EJBs (ligthweigth
container)
Uso de injeo de dependncia ao invs de lookups JNDI
Globalcode Open4education
Java Persistence API
4
Globalcode Open4education
Java Persistence API
Entidades JPA
Globalcode Open4education
Java Persistence API
EntityManager (javax.persistence)
Gerencia o ciclo de vida das entidades
(B) find / query
(C) persist
(D) clear / serializao
(E) merge
(F) remove
Globalcode Open4education
Java Persistence API
PersistenceContext
Conjunto de objetos managed associados a um
EntityManager
EntityManager PersistenceContext
obj1 obj4 obj2 obj3
obj5
MANAGED MANAGED MANAGED MANAGED
NEW / DETACHED
Globalcode Open4education
Java Persistence API
Persistence Unit
Uma unidade de persistncia define um contexto de
funcionamento para os EntityManagers
5
Globalcode Open4education
Java Persistence API
Exemplo de utilizao de JPA
Globalcode Open4education
JPA: instalao e configurao
bibliotecas
persistence-api-xx.jar
Bibliotecas do provider
Hibernate
TopLink
OpenJPA
Globalcode Open4education
Java Persistence API: demonstrao
eclipse 3.x
netbeans 6.x opcional
Globalcode Open4education
Agenda
Objetivo / Motivao
Estudo de Caso
Java Persistence API (JPA)
JavaServer Faces (JSF)
Enterprise Java Beans (EJB)
Injeo de Dependncia (DI)
Perguntas e Respostas
6
Globalcode Open4education
JSF: o que ?
Java Server Faces
Framework MVC proposto em 2001
JSR 127 (1.0 e 1.1, 2001), JSR 252 (1.2, 2004), JSR 314 (2.0,2007)
Padronizou o desenvolvimento de interface de usurio web
Definido por grupo de especialistas composto de empresas e pessoas
fsicas
Suportado pelos containers homologados para JEE 5 ou superior
Baseado na tecnologia Servlets
Ed Burns, Roger Kitain - Sun
http://java.sun.com/javaee/javaserverfaces/
Globalcode Open4education
JSF: por que usar?
Componentes ao invs de aes
Renderizaes alm do HTML
Conversores, validadores, eventos
Ciclo de vida e rvore de componentes
Binding e Expression Language
Implementa os padres pra voc: Wrapper, Front
Controller, MVC, DI,
Resources, Ajax, MegaListeners, Anotaes, Composite
components, Bean validation, Bookmarking, new scopes,
new tags, (2.x)
Globalcode Open4education
JSF: por que usar?
Maduro: desde 2001! J tem a 2.0 desde julho!
Incorpora boas idias de outros frameworks e de extenses
JSF: Tapestry, Struts, WebWork, Richfaces, IceFaces
Preparado para ser entendido e estendido
Preparado para ferramentas de desenvolvimento
Globalcode Open4education
JSF: principais componentes
J2EE Web Container
J2EE EJB
Container
Controller Model View
Servlet JavaBeans Java
Server
Pages
Custom
Tag
EJB
javax.faces
JSF e J2EE
7
Globalcode Open4education
JSF: principais componentes
P

g
i
n
a

J
S
F
f
a
c
e
s
-
c
o
n
f
i
g
.
x
m
l
M
a
n
a
g
e
d

B
e
a
n
Globalcode Open4education
JSF: instalao e configurao
bibliotecas
JARs necessrios:
jsf-api.jar
jsf-ri.jar
jstl.jar
standard.jar
commons-beanutils.jar
commons-digester.jar
commons-collections.jar
commons-logging.jar
Globalcode Open4education
JSF: instalao e configurao
arquivos de configurao
pom.xml:

<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>${jsf.version}</version>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>${jsf.version}</version>
</dependency>

Globalcode Open4education
JSF: instalao e configurao
arquivos de configurao
web.xml:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-
class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
8
Globalcode Open4education
arquivos de configurao
JSF: instalao e configurao
faces-config.xml:
<?xml version="1.0"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javae
e http://java.sun.com/xml/ns/javaee/web-
facesconfig_1_2.xsd">
</faces-config>
Globalcode Open4education
JSF: instalao e configurao
eclipse 3.x
netbeans 6.x
Globalcode Open4education
JSF: exemplos
Lista de artigos publicados
eclipse 3.x
Globalcode Open4education
Facelets: o que ?
JSF View Definition Framework
Proposto em 2005
Tecnologia focada na criao de rvores de componente
JSF
VDL alternativa
Subprojeto do JSF
Jacob Hookom - Sun
https://facelets.dev.java.net/
9
Globalcode Open4education
Facelets: por que usar?
Templates
XHTML ao invs de JSP
Atributo jsfc
Rpido para renderizar
Melhor para identificar expresses EL erradas
Tambm padro (JSR 314, 2.x)
Turbinado pela biblioteca composite (2.x)
Globalcode Open4education
Controller Model View
Servlet JavaBeans Java
Server
Pages
Custom
Tag
EJB
javax.faces
Facelets: principais componentes
J2EE Web Container
J2EE EJB
Container
com.sun.facelets
- Composite tags: Composition and Component,
Fragment and Decorate
- Development tags: Debug
- Iteration tags: Repeat
- Template tags: Define, Insert, Param, Remove
Globalcode Open4education
Facelets: principais componentes
c
l
i
e
n
t
e
Globalcode Open4education
Facelets: principais componentes
t
e
m
p
l
a
t
e
10
Globalcode Open4education
Facelets: instalao e configurao
jsf-facelets.jar (1.x)
jsf-api.jar
jsf-ri.jar
jstl.jar
standard.jar
commons-beansutils.jar
commons-digester.jar
commons-collections.jar
commons-logging.jar
Globalcode Open4education
Facelets: instalao e configurao
arquivos de configurao
pom.xml:

<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
<version>${facelets.version}</version>
</dependency>
...
Globalcode Open4education
Facelets: instalao e configurao
arquivos de configurao
web.xml:

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>2</param-value>
</context-param>
...
Globalcode Open4education
Facelets: instalao e configurao
arquivos de configurao
faces-config.xml:
<?xml version="1.0"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-
handler>
</application>
</faces-config>
11
Globalcode Open4education
Facelets: instalao e configurao
eclipse 3.x
netbeans 6.x
Globalcode Open4education
Facelets: exemplos
Lista de artigos publicados com html reaproveitado
e template
eclipse 3.x
Globalcode Open4education
Richfaces: o que ?
Biblioteca de componentes
Criada pela Exadel em 2006
Mantida pela Jboss desde 2007
ltima verso estvel: 3.3.1 em 18/04/2009
Alexander Smirnov Exadel
Max Katz Exadel
http://www.jboss.org/richfaces
Globalcode Open4education
Richfaces: por que usar?
Suporte a Ajax
Aproximadamente 100 componentes prontos
Component Development Kit
Skins prontos e possibilidade de customizao
Resources
Facilidades para testes
Cross browser
Comunidade ativa
Integrao com jQuery, Prototype e Scriptaculous
12
Globalcode Open4education
Richfaces: principais componentes
J2EE Web Container
J2EE EJB
Container
org.richfaces
rich
- Calendar
- Suggestion Box
- Enhanced Data table
- Combo Box
- Menu
- Tree view
- Panel
- Layout
- Modal Panel
- Validators
- Drag and Drop
- Progress Bar
- Tabs
-
a4j
- Status
- Support
- CommandButton
- CommandLink
- Poll
- Push
- Output Panel

Globalcode Open4education
Richfaces: principais componentes
C
l
i
e
n
t
e

<xmlns:a4j="http://richfaces.org/a4j">
<xmlns:rich="http://richfaces.org/rich">
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
Globalcode Open4education
Richfaces: instalao e configurao
bibliotecas
richfaces-api-xx.GA.jar
richfaces-impl-xx.GA.jar
richfaces-ui-xx.GAjar
jsf-api.jar
jsf-ri.jar
jstl.jar
standard.jar
commons-beansutils.jar
commons-digester.jar
commons-collections.jar
commons-logging.jar
Globalcode Open4education
Richfaces: instalao e configurao
arquivos de configurao pom.xml
...
<dependency>
<groupId>org.richfaces.framework</groupId>
<artifactId>richfaces-api</artifactId>
<version>${richfaces.version}</version>
</dependency>
<dependency>
<groupId>org.richfaces.framework</groupId>
<artifactId>richfaces-impl</artifactId>
<version>${richfaces.version}</version>
</dependency>
<dependency>
<groupId>org.richfaces.ui</groupId>
<artifactId>richfaces-ui</artifactId>
<version>${richfaces.version}</version>
</dependency>
13
Globalcode Open4education
Richfaces: instalao e configurao
arquivos de configurao web.xml
...
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
...
Globalcode Open4education
Richfaces: instalao e configurao
arquivos de configurao faces-config.xml
<?xml version="1.0"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-
facesconfig_1_2.xsd">
</faces-config>
Globalcode Open4education
Richfaces: exemplos
Lista de artigos publicados com data e categoria.
Filtro, ordenao, panel.
eclipse 3.x
Globalcode Open4education
Richfaces: instalao e configurao
eclipse 3.x
netbeans 6.x
14
Globalcode Open4education
Demonstrao
OA1
# JSF++ JPA Padres EJB DI/IoC Containers
OA1 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
. DAO
. Factory
. Service Locator
. Business Object
No No Tomcat
Jetty
...
OA2 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
. Service Locator 3.0 No JBoss
Glassfish
WebSphere
...
OA3 . 1.2
. Facelets
. Richfaces
. 1.0
. Hibernate
- 3.0 Sim JBoss
Glassfish
WebSphere
...
eclipse 3.x
Globalcode Open4education
OA1
Vantagens
Basta um servidor EE com suporte a servlets
Mais rpido para codificar e para testar
Mais fcil para aprender
Desvantagens
Acesso de clientes desktop no to prtico
Arquivo de expedio monoltico (.war)
Poucas facilidades de integrao com outras tecnologias
EE
Globalcode Open4education
Agenda
Objetivo / Motivao
Estudo de Caso
Java Persistence API (JPA)
JavaServer Faces (JSF)
Enterprise Java Beans (EJB)
Injeo de Dependncia (DI)
Perguntas e Respostas
Globalcode Open4education
Enterprise Java Beans (EJB)
Plataforma para criao de aplicaes de negcio
portveis, robustas e reutilizveis usando a linguagem de
programao Java;
Componente para construir aplicaes sem precisar
reinventar uma srie de recursos e servios (transaes,
segurana, persistncia);
Modelo de alto nvel para objetos distribudos (computao
distribuda);
Pode ser utilizado em solues Web e no Web;
15
Globalcode Open4education
Enterprise Java Beans (EJB)
EJB
Session Bean
Java Web
Swing
Cliente WS
Web Browser
JVM + Container EE
Rede Local
Componentes Negcio Compartilhados
Globalcode Open4education
Enterprise Java Beans (EJB)
EJB
Session Bean
S
e
g
u
r
a
n

a
C
o
n
t
r
o
l
e

T
r
a
n
s
a
c
i
o
n
a
l
E
s
c
a
l
a
b
i
l
i
d
a
d
e
Queues
Topics
Data
Sources
Environment
Entries
EJB
Infra Estrutura do Container
Globalcode Open4education
Tipos de EJB:
Session Bean
Representa um processo de negcio
Message-Driven Bean
Trabalha de forma assncrona
Entity Bean
Representa um objeto persistente
Definido pela especificao JPA
Enterprise Java Beans (EJB)
Globalcode Open4education
Representa um processo de negcio (regra de negcio);
Pode ser do tipo Stateless ou Stateful;
Stateless
No mantm estado de converso com o cliente;
No tem compromisso de manter uma sesso;
No devemos utilizar atributos de negcio, somente atributos tcnicos
em cache;
um EJB econmico;
Stateful
Mantm estado de converso com o cliente;
Cada cliente ter uma instancia do EJB exclusiva, desde a criao at a
remoo;
Podemos ter atributos de negcio com mtodos getters e setters;
Session Bean
16
Globalcode Open4education
Session Bean
Stateless (sem estado)
Perodo que uma instancia do
EJB fica preso a um cliente
Globalcode Open4education
Session Bean
Stateful (com estado)
Perodo que uma
instancia do EJB fica
preso a um cliente
Globalcode Open4education
Session Bean
Stateless (sem estado)
Globalcode Open4education
Session Bean
Clientes acessam o Session Bean atravs de uma interface
Java simples (POJI);
Mtodos (servios) so publicados atravs desta interface;
A interface deve ser implementada pela classe do Bean;
Tipos de Interfaces
Local (@Local)
Somente acesso local (mesma JVM);
Cliente pode ser um componente Web ou outro EJB;
Localizao no transparente (no suporta clusterizao).
Remota (@Remote)
Suporta acesso remoto (fora da JVM);
Cliente pode ser um componente Web, outro EJB ou aplicao desktop;
Transparncia de localizao (suporta clusterizao).
17
Globalcode Open4education
Session Bean
Local Interface
Remote Interface
Globalcode Open4education
OA2
Demonstrao eclipse 3.x
# JSF++ JPA Padres EJB DI/IoC Containers
OA1 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
. DAO
. Factory
. Service Locator
. Business Object
No No Tomcat
Jetty
...
OA2 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
. Service Locator 3.0 No JBoss
Glassfish
WebSphere
...
OA3 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
- 3.0 Sim JBoss
Glassfish
WebSphere
...
Globalcode Open4education
OA2
Vantagens
Arquitetura mais robusta (melhor escalabilidade)
Infra-estrutura do servidor EE
Regras de negcio centralizadas
Ampla diversidade de clientes (CORBA, RMI, etc)
Desvantagens
Maior custo operacional
Maior complexidade na implementao
Maior dificuldade de suporte e manuteo
Globalcode Open4education
Agenda
Objetivo / Motivao
Estudo de Caso
Java Persistence API (JPA)
JavaServer Faces (JSF)
Enterprise Java Beans (EJB)
Injeo de Dependncia (DI)
Perguntas e Respostas
18
Globalcode Open4education
Injeo de Dependncia
Mecanismo de injeo de recursos necessrios a
um componente de forma automtica
Sem a presena de instrues explcitas para acessar o
recurso
Exemplo:
O componente de negcios A depende do componente
de negcios B e do pool de conexes C.
A
B
C
Globalcode Open4education
Injeo de Dependncia
Sem injeo de dependncia:
Cdigo fonte do componente A contm instrues para
buscar o componente B e o recurso C.
A
B
C
Servio de Nomes
ejb/componenteB
jdbc/dataSourceC
lookups
Globalcode Open4education
Injeo de Dependncia
Com injeo de dependncia
Cdigo do componente A no busca recursos e outros
componentes
Devemos declarar as dependncias de componentes e
recursos nos atributos ou mtodos setters do
componente A
Container (Java EE) interpreta as dependncias
declaradas no componente A e injeta os recursos e
componentes necessrios
Globalcode Open4education
Injeo de Dependncia
A
B
C
Servio de Nomes
ejb/componenteB
jdbc/dataSourceC
injeo
class ComponenteA {
@EJB(name=ejb/componenteB) InterfaceB b;
@Resource(name=jdbc/dataSourceC) DataSource c;
}
19
Globalcode Open4education
Injeo de Dependncia
Quem pode receber injeo ?
EJB, Interceptor
Servlet, Filter, *Listener, JSP Tag Handler
JSF Managed Beans
Endpoints JAX-WS e Handlers
O que pode ser injetado ?
Referncias a EJBs e a Web Services
DataSource JDBC
Destination e ConnectionFactory JMS
UserTransaction
EntityManager (JPA)
Globalcode Open4education
Injeo de Dependncia
Exemplo de Utilizao
Globalcode Open4education
OA3
Demonstrao
eclipse 3.x
# JSF++ JPA Padres EJB DI/IoC Containers
OA1 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
. DAO
. Factory
. Service Locator
. Business Object
No No Tomcat
Jetty
...
OA2 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
. Service Locator 3.0 No JBoss
Glassfish
WebSphere
...
OA3 . 1.2
. Facelets
. Richfaces
. 1.0
.
Hibernate
- 3.0 Sim JBoss
Glassfish
WebSphere
...
Globalcode Open4education
OA3
Vantagens
Configurao facilitada
Diminuio na quantidade de padres de projeto
utilizados na aplicao
Maior produtividade
Facilidade de manuteo
Desvantagens
Suporte incompleto IoC (ser corrigido no Java EE 6)
Incompatibiliade para escalabilidade
Somente para aplicaes Java EE
20
Globalcode Open4education
Outras especificaes usadas junto
JSF
+ Bean Validation
+ Context and Dependency Injection
EJB
+ JMS
+ JTA
+ WS
+ JNDI
+ JAAS
Globalcode Open4education
Veja tambm ...
JSF
+ Scrum Toys no Netbeans 6.8
+ SuperCRUD
+ IceFaces
+ MyFaces
+ Exadel Flamingo
JME
+ Cosmo
+ Floggy
Globalcode Open4education
Faa voc mesmo!
Baixar os 3 projetos demo
Configurar no Eclipse ou no Netbeans
Codificar CRUDS para
Autor
Rtulo
Categoria
Codificar Login programtico
Usar componente de menu
Usar componente para Drag and drop
Usar componentes de calendrio e numrico
Globalcode Open4education
Perguntas e Respostas
?
21
Globalcode Open4education
Agradecidos pela presena!

Você também pode gostar