Este documento fornece informações sobre uma palestra gratuita sobre Java EE 6. Ele inclui o objetivo da palestra, a agenda, informações sobre o palestrante e uma seção de doações para uma instituição de caridade local.
3. Doações
• Entidade
Orionópolis Catarinense
É uma entidade filantrópica, sem fins lucrativos, que abriga gratuitamente em
sistema de vila e regime de internato: idosos, crianças e adultos portadores de
deficiências e multideficiencias física e mental que vivem em estado de
abandono familiar e econômico.
Atualmente abrigam 67 pessoas
Para Maiores Informações
http://orionopolis.floripa.com.br
orione@fastlane.com.br
Telefone – (048) 3343-0087
• MUITO OBRIGADO À TODOS !!!
Globalcode Slide 3
5. Objetivo
Conhecer a plataforma Java Enterprise Edition 6
e entender as principais diferenças desta versão
em relação as versões anteriores
Globalcode Slide 5
6. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 6
7. Jogo Rápido
• Quem trabalha com Java EE?
Servlet?
JSF?
JPA?
EJB?
• Quem já estudou alguma funcionalidade do Java EE 6?
• Quem está interessado em se atualizar?
• Quem gostou do jogo do Brasil ontem? :/
Globalcode Slide 7
8. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 8
9. Plataforma Java
• Desenvolvimento de software robusto para diferentes tipos de dispositivos
PC, celular, palmtop, robôs, etc.
• Software Multiplataforma
“Escreva uma vez e execute em qualquer lugar...”
Código não precisa ser recompilado para executar em outro sistema
operacional
• Máquina Virtual (Java Virtual Machine - JVM)
Responsável por oferecer a flexibilidade de sistema operacional para um
software Java
• Mantida pela comunidade de desenvolvedores por meio do JCP (Java
Community Process)
Globalcode Slide 9
10. Plataforma Java
• A plataforma é dividida em três partes:
Java Standard Edition (Java SE)
Base do Java que contém as principais APIs
Java Enterprise Editon (Java EE)
Versão de Java para desenvolvimento de aplicações Web e enterprise que
rodam em servidores padronizados
Java Micro Edition (Java ME)
Redução da plataforma Standard para dispositivos móveis como PDA e
celulares
Globalcode Slide 10
11. Java Enterprise Edition
• Suporte ao desenvolvimento de aplicações “enterprise”
Aplicações distribuídas, seguras, escaláveis, de alta
disponibilidade e com baixo custo de manutenção
• Plataforma para desenvolvimento de software de
pequeno, médio e grande porte em múltiplas camadas
de componentes
Componentes “rodam” em um servidor Java EE
Globalcode Slide 11
14. Java Enterprise Edition
• Serviços oferecidos pelos containeres Java EE:
Gestão de memória, ciclo de vida de objetos e estado de
objetos
Conexões, Transações, Serviço de nomes
Segurança
Tolerância a falhas
Integração
WebServices
Clustering
Alta disponibilidade
Confiabilidade...
Globalcode Slide 14
15. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 15
17. Containers (Java EE 5)
• Web Container
Trabalha em conjunto com um Servidor HTTP para oferecer
suporte aos componentes da camada Web
Tomcat (Apache)
Jetty
JRun (Adobe)
• EJB Container
É o servidor de componentes transacionais EJB
OpenEJB (Apache) *
Containeres específicos dos fabricantes de servidores de
aplicação
Globalcode Slide 17
18. Profiles
• Define um sub-set de APIs do Java EE para rodar
determinado tipo de aplicação (arquitetura)
• Dois profiles foram definidos neste momento pela
especificação do Java Enterprise
Web Profile
Semelhante a idéia do Web container, mas com mais funcionalidades
incorporadas
Full Profile
Servidor Java EE completo
Globalcode Slide 18
21. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 21
22. Java Servlet
• Aplicações que rodam no servidor e respondem requisições de clientes Web
Globalcode Slide 22
23. Java Servlet 3.0
• Novos Recursos
Configuração por Anotações
Registro Dinâmico de Componentes
Web Fragments
Servlet Container Initializer
Resources Sharing
Programatic Login / Logout
Asynchronous Support
Globalcode Slide 23
24. Java Servlet 3.0
• Configuração por Anotações
@WebServlet
Define o mapeamento do componente Servlet
@WebFilter
Define o mapeamento do componente Filter
@WebListener
Define o mapeamento do componente Listener
@WebInitParam
Define um parâmetro de inicialização
@ServletSecurity
Define as constraints de segurança
@MultipartConfig
Utilizado para upload de arquivos
Globalcode Slide 24
30. Java Servlet 3.0
• Registro Dinâmico de Componentes
Carregamento dinâmico de Servlets, Filters e Listeners
Executado durante a inicialização do ServletContext
Registro
ServletContext#addServlet (#addFilter | #addListener)
Criação e Registro
ServletContext#createServlet (#createFilter | #createListener)
Lookup
ServletContext#getServlet (#getFilter | #getListener)
Globalcode Slide 30
31. Java Servlet 3.0
• Registro Dinâmico de Componentes
Globalcode Slide 31
32. Java Servlet 3.0
• Web Fragments
Define um pedaço do arquivo à ser incorporado ao web.xml
Pode ser definido em diretórios META-INF de arquivos JARs
adicionados no classpath da aplicação web (WEB-INF/lib)
Ideal para configuração de frameworks (Struts, Spring, GWT)
Sintaxe praticamente idêntica ao arquivo web.xml tradicional,
com pequenas modificações na ordem dos elementos
Caso haja conflito de nomes (Servlets, Filters, etc) os
componentes definidos no web.xml tem prioridade
Uma aplicação web pode ter múltiplos web fragments
É definido pela tag <web-fragment>
Globalcode Slide 32
34. Java Servlet 3.0
• Servlet Container Initializer
Mecanismo para inicialização de recursos (objetos) através de
bibliotecas “terceiras” incorporados na aplicação web
Executado antes de qualquer Listener durante a fase de
inicialização da aplicação
Para implementação
Implementar a interface
– ServletContainerInitializer
Definir quais tipos (anotações) de classes serão inspecionadas
– @HandlesTypes
Esta classe intercepta os componentes de acordo com os
handles types definidos e executa o método onStartup(…)
Globalcode Slide 34
36. Java Servlet 3.0
• Resources Sharing
Possibilidade de adicionar JSPs dentro de arquivos JARs
existentes no classpath (WEB-INF/lib) da aplicação web
Devem ser organizados na seguinte estrutura
WEB-INF/lib/[*.jar]/META-INF/resources
JSPs definidos com o mesmo nome no diretório da aplicação
web terão prioridade
Exemplo de utilização
mywebapp.war
– /WEB-INF/lib/shared.jar!/META-INF/resources/shared.jsp
Endereço de acesso
– http://server/mywebapp/shared.jsp
Globalcode Slide 36
37. Java Servlet 3.0
• Programatic Login / Logout
Adicionados novos métodos na Servlet API para tratamento de
login e logout da aplicação
Todo processo de login e logout da aplicação pode ser
manipulado através de programação
Não tem mais necessidade da definição <login-config>
Métodos disponíveis
HttpServletRequest.login(String username, String password)
HttpServletRequest.authenticate(HttpServletResponse)
HttpServletRequest.logout()
Globalcode Slide 37
38. Java Servlet 3.0
• Asynchronous Support
Modelo avançado para execução the Threads
Servlet não precisa mais esperar pela resposta de um outro
recurso demorado para que sua Thread possa continuar
executando
Exemplos para utilização
Conexões JDBC não disponíveis, retorno JMS, processos longos
Servlets e Filters suportam esta funcionalidade, mas devem
ser sinalizados como assíncronos
Para sinalizar suporte a este mecanismo
@WebServlet(asynchSupported=true)
<async-supported>true</async-supported>
registration.setAsyncSupported(true);
Globalcode Slide 38
42. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 42
43. JavaServer Faces (JSF)
• Características
Framework para implementação de interfaces gráficas das
aplicações Web baseado no modelo de componentes
Incorpora características de um framework MVC para Web e
um modelo de interfaces baseados em eventos
Separação entre visualização e regras de negócio
Visualização pode ser feita por diferente renderizadores
Padrão de implementação para camada Web
Especificação Java EE
Amplo suporte das IDEs (Eclipse, NetBeans)
“Toolability = Ferramentabilidade”
Globalcode Slide 43
44. JavaServer Faces (JSF)
J2EE Web Container J2EE EJB
Container
JavaServer Faces
Controller View Model
Servlet Java Custom JavaBeans EJB
Server Tag
Pages
Globalcode Slide 44
45. JavaServer Faces (JSF) 2.0
• Novos Recursos
Configuração por Anotações
Integração com Facelets
AJAX Support
Composite Components
Novas Regras de Navegação
View Parameters
Globalcode Slide 45
51. JavaServer Faces (JSF) 2.0
• Integração com Facelets
Define o padrão para templating e visualização
Utiliza XHTML ao invés de JSP
JSP encontra-se @Deprecated
Não podemos adicionar código Java no XTHML
Incorporação das classes do Facelets na JSF API
Mantém compatibilidade com versões anteriores
Definido pela biblioteca (ui)
http://java.sun.com/jsf/facelets
Principais Facelets tags
<ui:composition>
<ui:define>
<ui:insert>
<ui:param>
Globalcode Slide 51
53. JavaServer Faces (JSF) 2.0
• AJAX Support
Suporte à processamento de requisições AJAX integrado ao
ciclo de vida dos componentes JSF
Inspirado nos frameworks RichFaces, IceFaces, DynaFaces…
Define uma Javascript API padronizada
Homologada na Open AJAX Alliance
Suporta AJAX request, callbacks, error handling
Define a tag <f:ajax> para suporte AJAX aos componentes
Globalcode Slide 53
59. JavaServer Faces (JSF) 2.0
• Novas Regras de Navegação
Navegação Condicional
Possibilidade de mapeamento no faces-config.xml, somente realizando o
redirecionamento com base em um condicional
Globalcode Slide 59
60. JavaServer Faces (JSF) 2.0
• Novas Regras de Navegação
Navegação Implícita
Modelo de navegação direcionando o retorno da ação para uma view específica,
através do nome
Globalcode Slide 60
61. JavaServer Faces (JSF) 2.0
• View Parameters
Propagação de request parameters usando HTTP GET
Possibilidade de criação de Bookmarkable URLs
Principais tags
<f:metadata>
– Deve ser incluída dentro da tag <f:view>
<f:viewParam>
– Associa os request GET parameters com o JSF model
– Suporta Converters, Validators, etc
<h:link>
<h:button>
Globalcode Slide 61
63. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 63
64. Injeção de Dependência (IoC)
• Mecanismo de “injeção” de recursos necessários a um
componente de forma automática
Sem a presença de instruções explícitas para acessar o
recurso
• Exemplo:
O componente de negócios A depende do componente de
negócios B e do pool de conexões C.
B
A
C
Globalcode Slide 64
65. Injeção de Dependência (IoC)
• Sem injeção de dependência:
Código fonte do componente A contém instruções para
“buscar” o componente B e o recurso C
lookups
Serviço de Nomes
A
“ejb/componenteB”
“jdbc/dataSourceC”
B
C
Globalcode Slide 65
66. Injeção de Dependência (IoC)
• Com injeção de dependência:
class ComponenteA {
@EJB(name=“ejb/componenteB”) InterfaceB b;
@Resource(name=“jdbc/dataSourceC”) DataSource c;
}
injeção
Serviço de Nomes
A
“ejb/componenteB”
“jdbc/dataSourceC”
B
C
Globalcode Slide 66
68. Context Dependency Injection (CDI)
• O que é CDI (JSR-299)?
Novo modelo para gerenciamento de injeção de dependência
(IoC) e de escopos de aplicação
Também conhecido como “Web Beans”
Integra as camadas web e transacional da aplicação
Facilita a implementação das aplicações que utilizam
tecnologias como JSF e EJB
Para utilizar basta adicionar o arquivo beans.xml no
diretório de configuração da aplicação (WEB-INF , META-INF)
Globalcode Slide 68
69. Context Dependency Injection (CDI)
Quem pode receber injeção ?
Managed Beans
EJB, Interceptor
Servlet, Filter, *Listener, JSP Tag Handler
Endpoints JAX-WS e Handlers
O que pode ser injetado ?
Referências a EJBs e a Web Services
DataSource JDBC
Destination e ConnectionFactory JMS
UserTransaction
EntityManager (JPA)
Remote EJB references
ManagedBeans (POJO)
Objetos retornados por @Produces
Globalcode Slide 69
76. Context Dependency Injection (CDI)
• Scopes and Contexts
Define um modelo de escopos extensível
Podemos criar um @Singleton bean
Dependent scope - @Dependent
Escopo padrão de todas classes
Significa que o objeto “injetado” encontra-se no mesmo escopo e tem o mesmo
ciclo de vida do objeto cliente
Outros escopos disponíveis
@ApplicationScoped, @RequestScoped
– Para qualquer web requests, web service, RMI, EJB
@SessionScoped
– Para qualquer servlet
@ConversationScoped
– Para JSF requests
Globalcode Slide 76
82. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 82
83. Enterprise JavaBeans (EJB)
• Características
Plataforma para criação de aplicações de negócio portáveis,
robustas e reutilizáveis usando a linguagem Java
Componentes para construir aplicações sem precisar
reinventar uma série de recursos e serviços
Transação, Segurança, Persistencia
Modelo alto nível de objetos distribuídos
Computação distribuída
Pode ser utilizado em aplicações Web e não Web
É o CICS do Java
Globalcode Slide 83
84. Enterprise JavaBeans (EJB)
Infra Estrutura do Container
EJB
Controle Transacional
Escalabilidade
Segurança
EJB
Session Bean
Queues Data
Topics Sources
Environment
Entries
Globalcode Slide 84
85. Enterprise JavaBeans (EJB)
• Tipos de EJB:
Session Bean
Representa um processo de negócio
Message-Driven Bean
Trabalha de forma assíncrona
Entity Bean
Representa um objeto persistente
Definido pela especificação JPA
Globalcode Slide 85
86. Enterprise JavaBeans (EJB) 3.1
• Novos Recursos
EJB Lite
Empacotamento Simplificado
Interface Opcional
Singleton EJB
Timer Service
Métodos Assíncronos
Nomes JNDI Padronizados
Embeddable API
Globalcode Slide 86
87. Enterprise JavaBeans (EJB) 3.1
• EJB Lite
Sub-conjunto de funcionalidades direcionadas para deploy dos
EJBs no container Java EE Web Profile (.war)
EJB Lite EJB Full
• Local Session Beans • Message-Driven Beans (MDB)
• CMT / BMT • Web Service Endpoints
• Segurança Declarativa • 2.x / 3.x Remove View
• Interceptors • Inter-operabilidade com RMI-IIOP
• Timer service
• Chamada assíncrona à metodos
• 2.x Local View
• CMP / BMP Entity Beans
Globalcode Slide 87
88. Enterprise JavaBeans (EJB) 3.1
• Empacotamento Simplificado
Possibilita o deploy de componentes EJBs através de um .war
Somente disponível para os EJB Lite
ejb-jar.xml não é mais necessário
Java EE 6
Java EE 5
Globalcode Slide 88
90. Enterprise JavaBeans (EJB) 3.1
• Singleton EJB
Define um EJB que implementa o padrão Singleton
Uma única instância por aplicação enterprise
Abstrai a implementação deste padrão dentro do ambiente
“enterprise”
Publicação no diretório JNDI
Suporta estratégias e configurações para compartilhamento
no acesso (locking)
Anotações
@Singleton
@Lock
@AccessTimeout
@ConcurrencyManager
Globalcode Slide 90
93. Enterprise JavaBeans (EJB) 3.1
• Timer Service
Define uma estrutura para execução baseada em calendários
Semântica baseada nos processos CRON
Criação feita pelo container no deploy da aplicação
Pode ser especificado por anotação ou através do ejb-jar.xml
Relativo ao current TimeZone
Sintaxe dos atributos
minute = “30”
month = “Jan, Jul, Dec”
dayOfWeek = “Mon-Fri”
dayOfMonth = “Last Mon”
hour = “*”
minute = “*/10”
Globalcode Slide 93
94. Enterprise JavaBeans (EJB) 3.1
• Timer Service
Processa na última sexta-feira de todo mês às 20:30 hrs no
horário local de São Paulo
Globalcode Slide 94
95. Enterprise JavaBeans (EJB) 3.1
• Métodos Assíncronos
Mecanismo simples para realizar chamadas assíncronas para
uma aplicação enterprise (sem utilizar MDBs)
Disponível para utilização em Stateful, Stateless e Singleton
EJBs
Definido pela anotação @Asynchronous
Pode ser utilizada pela classe ou por método
Retorna um objeto Future<T> que representa o resultado em
processamento assíncrono
Future.isDone()
Future.isCancelled()
Future.get()
Future.cancel(boolean)
Globalcode Slide 95
97. Enterprise JavaBeans (EJB) 3.1
• Nomes JNDI Padronizados
Definição padronizada de nomes para “lookup” dos EJBs
remotos e locais
Eleva a portabilidade de aplicações clientes
Lookup global
java : global [/<app-name>] /<module-name> /<ejb-name>
Lookup dentro da aplicação
java : app [/<module-name>] /<ejb-name>
Lookup dentro de um mesmo módulo (JAR, WAR)
java : module /<ejb-name>
Globalcode Slide 97
98. Enterprise JavaBeans (EJB) 3.1
• Nomes JNDI Padronizados
• Se for realizado o deploy em “componentes.jar”
java:global/componentes/MyEJB
java:app/MyEJB
java:module/MyEJB
Globalcode Slide 98
99. Enterprise JavaBeans (EJB) 3.1
• Embeddable API
Biblioteca (API) customizada para rodar componentes EJBs
fora do container (servidor) Java EE
Implementa o mesmo comportamento (ciclo de vida, pooling,
IoC) simulando um container Java EE
Ideal para utilização em testes unitários
Utilização de Mock components
Globalcode Slide 99
101. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 101
102. Java Persistence API (JPA)
• Características
Primeira especificação (padrão) de mapeamento de objetos Java para
base de dados relacional
Integração com outros frameworks
– Hibernate é uma implementação de JPA
– TopLink Essencials é uma implementação 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 injeção de dependência ao invés de lookups JNDI
Globalcode Slide 102
112. Java Persistence API (JPA) 2.0
• Melhorias na JPA-QL
INDEX
Utilizado para listas ordenadas
KEY, VALUE, ENTRY
Utilizado para manipulação de Maps
CASE, COALESCE, NULLIF
Utilizado para CASE expressions
TYPE
Utilizado para restringir polimorfismo
Globalcode Slide 112
114. Java Persistence API (JPA) 2.0
• Criteria API
Biblioteca (API) para criação de queries dinâmicas via
programação (métodos)
Principais Classes
CriteriaBuilder
– Criação de queries, seleções, ordenação
CriteriaQuery
– Adiciona, substitui, navega nos elementos que compões a query
Root
– Define as query roots
Join, ListJoin, MapJoin…
– Joins partindo de um root ou de joins já existentes
Path
– Navegação patindo de um root, join ou outro path
Subquery
Globalcode Slide 114
117. Java Persistence API (JPA) 2.0
• Validação (Bean Validation)
Definição de um novo modelo de validação para as entidades
utilizando um conjunto de anotações definidas pela JSR 303
(Bean Validation)
Inspirado no projeto Hibernate Validator
Validação automática durante os eventos de ciclo de vida
PrePersist
PreUpdate
PreRemove
Globalcode Slide 117
119. Java Persistence API (JPA) 2.0
• Second-level Caching
Compartilha a instância da entidade entre vários persistence
contexts (EntityManager) utilizados pela aplicação
Globalcode Slide 119
120. Java Persistence API (JPA) 2.0
• Second-level Caching
JPA 1.0 não definiu nenhum suporte à second-level cache
JPA 2.0 especificou um suporte básico para as estas
operações de cache, através da Cache API
Globalcode Slide 120
121. Java Persistence API (JPA) 2.0
• Pessimistic Locking
JPA 1.0 somente oferece suporte à Lock Optimistic
Encapsula os locks realizados no banco de dados
Lock Modes
PESSIMISTIC_READ (lock compartilhado)
PESSIMISTIC_WRITE (lock exclusivo)
PESSIMISTIC_FORCE_INCREMENT (lock versionado)
Globalcode Slide 121
122. Agenda
" Plataforma Java EE
" Principais Tecnologias (APIs)
" Profiles
" Java Servlet 3.0
" JSF 2.0
" CDI
" EJB 3.1
" JPA 2.0
" Comparativo de Versões
" Perguntas e Respostas
Globalcode Slide 122
124. Comparativo de Versões
• Java EE 1.4
Novembro de 2003
EJB 2.1, Servlet 2.4 e JSP 2.0
Principais problemas
Deployment descriptor
Interfaces
Entity beans
Complexidade de aprendizado e desenvolvimento
• Java EE 5
Maio de 2006
Aumentar a produtividade e facilitar o desenvolvimento
Principais mudanças
Anotações
Enterprise JavaBeans 3.0
Java Persistence API (JPA)
Injeção de dependência
Inclusão de JSF 1.2
Novas versões das APIs existentes
Globalcode Slide 124
125. Comparativo de Versões
• Java EE 6
Dezembro 2009;
Maior flexibilidade para a plataforma;
Principais mudanças
Java Servlet 3.0;
EJB 3.1;
JPA 2.0;
JSF 2.0;
CDI;
Bean Validation 1.0;
Profiles (deployment);
Novas versões das APIs existentes.
Globalcode Slide 125