Formação Java Avançada
[ 72 horas aula ]
Durante as 72h dessa formação, você verá na prática como construir uma aplicação completa usando as principais ferramentas do mercado Java EE: JSF e JPA com Hibernate. A formação foi recentemente reformulada para incluir as novidades das especificações JPA 2.0 e JSF 2.0, ambas do Java EE 6.
Entre os tópicos abordados estão mapeamento com JPA, buscas avançadas, buscas textuais com Lucene e Hibernate Search, validação com Bean Validation, criação de telas com JSF, Facelets, Ajax, otimizações, CDI e integração JSF/JPA.
É uma completa formação para quem deseja se aprofundar nas tecnologias do Java EE incluindo as últimas versões das especificações. Veja mais detalhes sobre cada um dos módulos: FJ-25 e FJ-26.
Pré-requisitos: Cursos FJ-11 e FJ-21 ou: Java, Orientação a Objetos, Collections, JSP, JSTL básico, MVC, patterns DAO e Factory
A opinião de quem fez o FormacaoJavaAvancada
Finalizei a formação Java Avançado com a certeza de que estou bem melhor preparado para os desafios do dia-a-dia. Nota 1000.
Carlos Amaral, Taboão da Serra SP, aos sábados em 07/05/2011
Parabéns, Caelum. Os instrutores foram fantásticos, um grande passo em minha carreira.
Rodrigo M. Rocha, Santo André SP, aos sábados em 07/05/2011
Conteúdo detalhado do FormacaoJavaAvancada
Persistência com JPA2 e Hibernate
- Livrar-se de SQL?
- Tirando dúvidas
- Para onde ir depois?
Definição do projeto
- Descrição do problema
- Tecnologias escolhidas
- Um panorama geral sobre o domínio do projeto
- Exercícios: Criando o projeto no eclipse
Mapeamento Objeto Relacional
- Trabalhando com o banco de dados
- Trabalhando com sistemas orientado à objetos
- Evitando o SQL dentro do código Java
- Unindo os dois mundos através do Mapeamento Objeto Relacional
- A Java Persistence API - JPA
- Mapeando os modelos através de anotações
- Configurando a JPA
- Criando o banco de dados e se conectando
- Persistindo objetos dentro de uma transação
- Exercícios: Mapeando os modelos e criando o banco de dados
- Exercícios Opcionais: Tempo de execução, criação do banco de dados e scanning de entidades
Organização de persistência: DAO e outros patterns
- JPAUtil
- Exercícios: Controlando a criação do EntityManagerFactory com a JPAUtil
- Encapsulando a JPA dentro dos DAOs
- Queries: Selecionando todas linhas
- E quando eu tiver muitos DAOs? Não quero repetir código
- Para saber mais: Repository
- Exercícios: Encapsulando código através do DAO
- Estados das entidades e ciclo de vida
- O estado Managed
- O estado Transient
- O estado Detached
- O estado Removed
Complementando o modelo através de relacionamentos
- Relacionando a Movimentação com uma Conta
- Trabalhando com enumerações
- Definindo a cardinalidade do relacionamento
- Exercícios: Criando o modelo de Movimentacao
- Persistindo objetos envolvidos em relacionamentos
- Exercícios: Tentando criar uma nova Movimentação relacionada com uma Conta
- E quando falha? Entendendo a TransientObjectException
- Buscando objetos com relacionamentos
- Atualizando objetos envolvidos em relacionamentos
- Criando o DAO de Movimentação
- Exercícios: Persistindo e pesquisando relacionamentos
- Para saber mais: Operações em cascata
Integrando o Hibernate com uma aplicação Web
- A ideia do projeto web
- Exercício: colocando o projeto web no ar
- Entendendo a estrutura do projeto web e integrando com os DAOs
- Exercícios: Integrando os DAOs ao projeto Web
- A atualização da conta em uma aplicação web
- Exercícios: Alteração da Conta
Criando queries avançadas para os relatórios
- Entendendo a JPQL
- Utilizando JPQL com and e or no filtro
- Exercícios: Buscando todas movimentações de determinada conta
- Exercícios: Buscando movimentações seguindo alguns critérios
- Executando buscas com funções
- Pesquisando com filtros em relacionamentos
- Exercícios: Calculando o total movimentado em uma Conta
- Exercícios: Pesquisando no relacionamento
- Implementando pesquisas complexas com JPQL
- Exercícios: Relatório avançado
- Para saber mais: Having
- Para saber mais: Named Queries
Relacionamento bidirecional e Lazyness
- E quando eu preciso saber quais são as movimentações da conta?
- Exercícios: Testando o novo mapeamento
- Relacionamento bidirecional
- Exercícios: Utilizando o mappedBy no relacionamento bidirecional
- Detalhes do relacionamento bidirecional
- Relacionamentos Many To Many
- Exercício: Criando um relacionamento Many To Many
- Lazyness
- Exercícios: Testando o carregamento das tags
- Para saber mais: Fetch Profile
- Problema comum na web: LazyInitializationException
- Open EntityManager In View e Controle Transacional
- Exercícios: Implementando o filtro do Open EntityManager In View
- Decidindo pelo lazy ou não
Cuidando melhor das conexões e queries
- Escalabilidade e conexões com o banco, qual a relação entre eles?
- Connection Pool do Hibernate
- Usando o C3P0 como pool de conexões
- Exercícios: Configurando e gerenciando o pool com o C3P0
Criando consultas com Criteria
- Evitando concatenação de String nas queries
- As classes principais da Criteria
- Exercício opcional: Conhecendo a Criteria
- Exercício opcional: Pesquisa no relacionamento com MetaModelo dinámico
- Montando uma consulta dinâmica
- Criteria typesafe com Metamodel
- Criteria typesafe com Static Metamodel
- Exercícios: Consultas utilizando Strings na Criteria
- Desafio: Join e Fetch nas Criterias
- Exercício opcional: Configurando a geração do Static Metamodel pelo Eclipse
- Discussão: Qual tipo de Criteria devo utilizar?
- Desafio: Explore a API de Criteria
Validação e integridade dos modelos
- Validando dados
- A forma tradicional de validação
- A forma simples: Bean Validation e Hibernate Validator
- Utilizando o Hibernate Validator
- Exercícios: Adicionando o Hibernate Validator aos modelos
- Outros validadores
- Exercícios: Utilizando outros validadores
- Alterando a mensagem de erro das validações padrão
- Exercícios: Sobrescrevendo as mensagens de validação
- Criando seu próprio validador
- Exercícios: Criando um validador customizado
- Validação em cascata
- Integração com outras tecnologias
- Exercícios: Integrando com outras tecnologias
Googlando sua aplicação através do Hibernate Search
- O problema de busca por texto: nossas tags
- Apache Lucene
- Além da especificação da JPA2: Recursos específicos do Hibernate
- Encapsulando o Lucene com Hibernate Search
- Configuração do Hibernate Search
- Exercícios: Indexação das Movimentações
- Buscando através do Hibernate Search
- Exercícios: Utilizando o Hibernate Search para buscas textuais
- Exercício opcional: Geração de várias movimentações e observando os índices com o Luke
- Para saber mais: atualizando o índice
- Para saber mais: MultiFieldQueryParser
- Indexando mais de um campo
- Para saber mais: Utilizando o Hibernate Search DSL para facilitar buscas avançadas
- Exercícios Opcionais: Utilizando o Hibernate Search DSL para facilitar buscas avançadas
- Para saber mais: Buscando termos usando AND e NOT
Recursos avançados: Cache, estatísticas e Locks
- Cache de primeiro nível
- Exercícios: Testando o cache de primeiro nível
- Cache de segundo nível
- Exercícios: Configurando e testando o cache de segundo nível
- Estratégias para invalidar o cache
- Cache de collections
- Exercícios: Utilizando cache para as collections
- Invalidadação programática - javax.persistence.Cache
- Exercício opcional: Invalidar programaticamente
- Cache de queries
- Exercícios: Adicionando cache em consultas
- Vendo nossa performance: Hibernate Statistics
- Exercícios: Visualizando estatísticas do hibernate na aplicação web
- Extended Persistence Context - Um Entity Manager para várias requisições
- Lock otimista e pessimista
- Exercícios: Configurando e testando o lock otimista
- Para saber mais: Operações em lote
- Exercícios Opcionais: Operações em lote
Mais mapeamentos
- Relacionamentos um para um
- Exercícios: Mapeando relacionamentos um para um
- O pattern Value Object do Domain Driven Design
- Implementando value objects com Embeddable
- Exercícios: Utilizando o Embeddable em atributos
- Para saber mais: Detalhes sobre o Embeddable
- Para saber mais: Mapeando chaves compostas
Apêndice - Detalhes sobre os mapeamentos
- Mapeando os objetos para um banco de dados legado
- Mapeamento de Herança
- Fazendo scripts de criação de tabelas com SchemaExport
- Exercícios opcionais: vendo o schema gerado
Apêndice - Hibernate Envers
- Auditando as alterações: Listeners
- Utilizando o Hibernate Envers
- Exercícios: Utilizando o Hibernate Envers
- Para saber mais: Revision Entity
Apêndice - Engenharia reversa com Hibernate Tools
- Introdução ao Hibernate Tools
- Configuração do Ant
- Exercícios: Gerando as entidadas a partir das tabelas
Apêndice - Hibernate Puro
- Entendendo a Diferença JPA e Hibernate
- Configuração do hibernate sem JPA
- Startup e CRUD com Hibernate
- Consultas com Criteria do Hibernate
- Rescursos especiais nas buscas
- Joins e Produto Cartesiano
- Scrollable Results um comparativo com o JDBC
- Subselect com Detached Criteria
- StatelessSession
Laboratório Web com JSF e CDI
- Construindo aplicações web ricas de forma fácil
- Integração com tecnologias do Java EE
- Tirando dúvidas
- Para onde ir depois?
Definição do projeto
- Descrição do problema
- Tecnologias escolhidas
- Modelo
- Implementando o DAO
- Servlet Container
- Exercícios: Instalando o Tomcat e criando o projeto
- Para saber mais: Em casa
JavaServer Faces
- Motivação: HTTP stateless
- Motivação: Swing, Visual Basic e Delphi
- JavaServer Faces
- Primeiro exemplo
- Exercícios: primeira página
- Criando o formulário de cadastro
- Exercícios: a página de cadastro de produtos
- Managed Beans
- Ligando Managed Beans a componentes visuais
- Exercícios: Gravação de produtos
- Listagem com dataTable
- Diferentes estilos de MVC: O MVC Push e o Pull
- Exercícios: Listagem de produtos
- Exercícios opcionais
- Removendo um produto e parâmetros de EL
- Exercícios: Remoção de produtos
- O estado da tela e o @ViewScoped
- Exercícios: @ViewScoped
- Alteração de produtos e o setPropertyActionListener
- Exercícios: Alterando produtos
- Exercícios opcionais
Ajax com JSF 2
- Ajax
- Ajax e JSF
- Como utilizar AJAX nas aplicações JSF
- Exercícios: Remoção de produtos com Ajax
- Para saber mais: A tag
- Exercícios: Submetendo formulários com AJAX
Aplicando layouts à aplicação com CSS
- Melhorando a interface gráfica
- Integrando CSS com o JSF
- Adicionando imagens na aplicação
- Exercícios: Melhorando a interface gráfica
Entendendo JSF a fundo
- Reduzindo a complexidade de outras APIs
- A árvore de componentes
- Alterando a forma de armazenamento da árvore de componentes
- Compreendendo o ciclo de vida de uma requisição do JSF
- Primeira fase: Restauração da view
- Segunda fase: Aplicar os valores da requisição
- Terceira fase: Converter e processar validações
- Quarta fase: Atualização dos modelos
- Quinta fase: Invocação da lógica
- Sexta fase: Renderizar resposta
- Exercícios: Fases do JSF
- Debugando o ciclo de vida do JSF com um PhaseListener
- Exercícios: Observando as fases do JSF
Login e navegação
- Criando a funcionalidade de login
- Exercício: Criando o formulário de Login
- Navegação condicional
- Navegação entre telas
- Guardando dados em escopo de sessão
- Exercício: Completando o Login
- Exercício Opcional: Aplicando layout na tela de login
- Para saber mais: Redirecionamento durante a navegação
- Exercícios Opcionais: Evitando submissões duplicadas
- Interceptando as fases com PhaseListeners
- Autorização com PhaseListeners
- Exercícios: Autorização com PhaseListener
- Exercícios opcionais: Logout e tela de cadastro de usuários
Templates com Facelets
- Repetição de código e seus problemas
- Resolvendo a duplicidade das Views
- Templating com o Facelets
- Exercícios: Templates com Facelets
- Para saber mais: Campos padrões no template
- Exercícios opcionais: Valores default no template
- Componentes customizados com Facelets
- Exercícios opcionais: Composite-componentes
Formulário master/detail stateful
- Cadastro de notas fiscais e ViewScoped
- Exercícios: Master (NotaFiscal)
- Exercícios: Detail (Item)
- Exercícios opcionais: Ajax
Interfaces Web 2.0 com componentes ricos
- Bibliotecas de componentes
- Melhorando a tela de adição de notas fiscais
- PrimeFaces
- Adicionando datepicker
- Exercícios: componente de calendário
- Máscara com p:inputMask
- Exercícios: máscara no campo CNPJ
- Realizando paginação de dados
- Exercício: Realizando a paginação dos dados
- Paginação customizada com banco de dados
- Exercícios: Estendendo componentes para realizar paginação no banco de dados
- Menus e navegação
- Exercícios: menus
- Adicionando abas
- Exercícios: componente de abas
- Exercícios opcionais
- Para saber mais: Geração de gráficos com PrimeFaces
- Desafio: gráficos
- Para saber mais: Upload de arquivos com o PrimeFaces
- Desafio: Upload de imagens dos produtos
- Para saber mais: Melhorando a seleção de produtos na tela de itens com o Autocomplete
- Exercício opcional
Validação e conversão de dados
- Validação
- Validação com Bean Validation
- Exercícios: Integrando Bean Validation com o JSF
- Validação com componentes JSF
- Exercícios: Componentes de validação
- Validações customizadas com JSF
- Exercício: Criando métodos de validação
- Evitando duplicidades de validações criando classes validadoras
- Exercícios: @FacesValidator
- Conversores de dados com o JSF
- Immediate
- Submitted value
- Exercícios: immediate
- Para saber mais: Conversores customizados
- Exercícios opcional: Conversores personalizados
Injeção de Dependências com CDI
- Problemas do alto acoplamento
- Estratégias para diminuir o acoplamento
- Injeção de dependências
- Implementando DI com Contexts e Dependency Injection API - CDI
- Liberação de dependências com @Disposes
- Configuração do Weld
- Exercícios: Utilizando CDI para injetar dependências
- Melhorando a autenticação com CDI
- Exercícios: Utilizando CDI para injetar dependências
- Para saber mais: Injeção de Dependências e Testes
JBoss Seam 3
- Introdução ao Seam
- Instalação do Seam
- Exercícios: adicionando Seam ao projeto
- Integração CDI com JSF
- Named packages com Seam Solder
- Exercício opcional
- Injeção de dependências no JSF com Seam Faces
- Validação de múltiplos campos com Seam Faces
- Exercícios: Validação de múltiplos campos
- Conversor de produto
- Exercícios opcionais
- Lidando com requisições GET no JSF
- Exercícios: f:metadata
Apêndice - Recursos Avançados de CDI, JSF e Seam
- Injection Points
- Exercícios: InjectionPoint
- Interceptadores do CDI
- Exercícios: Trabalhando com conexões e transações
- Discussão: Transações demarcadas ou transação por request
- Exercícios opcionais: migrar tudo para CDI
- Binding de componentes do JSF
- Exercícios: Binding
- Atributos produtores
- Qualifiers do CDI
- Exercícios: Qualifiers
- Menos anotações nas classes com Stereotypes
- Exercícios: Stereotypes
- Conversation Scope
- Exercícios: conversação
- Eventos e observers do CDI
- Eventos do JSF com Seam
- Exercícios: Autorizador com CDI e Seam
- Para saber mais: Interceptador de Auditoria
Apêndice - LOG4J
- Log4J
- Exercícios: Log4J no LoginBean
- Injetando o Logger do Log4J
- Exercícios: Utilizando o InjectionPoint
Apêndice - Internacionalização: sua aplicação em várias línguas
- Formas de internacionalizar a aplicação
- Utilizando o JSF para internacionalizar
- Exercícios: Começando a internacionalização e localização da aplicação
- Alterando o idioma manualmente
- Exercícios: Definindo o idioma através de links
- Internacionalizando mensagens de erro do Bean Validation
- Exercícios: Internacionalizando mensagens de erro
- Internacionalizando as mensagens dentro dos Managed Beans
- Exercícios: Internacionalizando as mensagens do Managed Beans
- Exercício Opcional: Internacionalizando a aplicação por completo
- Mensagens com Seam International
- Exercícios
Apêndice - Seam Persistence
- Seam Persistence - Introdução
- Seam Persistence - Instalação
- Tirando proveito do Seam Persistence
- Exercícios
- Queries com EL no Seam Persistence
- Forçar exceções a fazerem rollback
* Os apêndices listados são conteúdos adicionais que não fazem parte do curso regular.

