Mais velozes e mais furiosos: Desenvolvimento Web 2.0
e JEE com JBoss Seam
João Paulo Viragine
Solutions Architect
[email protected]
Motivação
•
O JSF merece uma segunda chance?
•
O EJB foi realmente aperfeiçoado?
• Vale a pena continuar com Java ou é melhor partir para Ruby
on Rails?
Motivação (continuação)
• Com o JBoss Seam, podemos responder SIM a todas essas
questões.
Qual framework devo utilizar?
•
Em um mundo abarrotado de frameworks, como escolher um?
• Temos tantos frameworks disponíveis para a plataforma Java:
alguns já consolidados, outros prometendo. A decisão torna-se
agonizante!
•
A decisão pelo melhor framework:
Qual framework devo utilizar? (continuação)
• Logo que tomamos a decisão, surge um novo framework
prometendo “acabar” com os antecessores.
•
Vemo-nos no “Paradoxo da Escolha”:
 Ficamos pensando que o melhor framework é aquele que
ainda não utilizamos
u
 Como conseqüência, gastamos mais tempo procurando pelo
framework perfeito, do que realmente desenvolvendo
aplicações
•
Estamos sempre procurando por um framework que seja:
 Novo e ao mesmo tempo familiar
 Leve, mas poderoso
Qual framework devo utilizar? (continuação)
•
Precisamos de um framework que integre a vasta gama de
tecnologias/frameworks da plataforma Java, em um modelo
unificado de desenvolvimento:
 O JBoss Seam é esse framework
JSF e EJB 3.0
•
Não serão abordadas as deficiência do JSF e do EJB 3.0
 Existe material específico sobre esse tema
•
Aproveitarei o tempo pra falar do JBoss Seam
O que é o JBoss Seam?
•
Definição da palavra:
 Seam = emenda
•
Seam não é um acrônimo (SEAM):
 Stop Enterprise Application Masochism
 Software for Enterprise Application Masterpieces
•
Informações gerais:
 Criado por Gavin King (criador do Hibernate)
 Versão 1.0 Beta 1 em 18/09/2005
 Versão 1.0.0.GA lançada em 12/06/2006
 Versão atual de produção: 2.0.2.GA em 15/05/2008
 Comunidade extremamente ativa: www.seamframework.org
• Mais de 1.000 usuários registrados no primeiro mês
• Atualmente, quase 3.000 usuários registrados
O que é o JBoss Seam? (continuação)
•
Definições:
 JBoss Seam - Next generation enterprise Java development
(do site do JBoss Seam)
 Um framework leve para Java EE 5.0
 O JBoss Seam é um framework para a plataforma Java EE
que facilita o desenvolvimento de aplicações web e
finalmente cumpre a promessa de uma arquitetura
unificada de componentes
 O JBoss Seam resolve os problemas da plataforma Java EE
unindo conceitos inovadores a padrões existentes
(JSF/JPA/EJB 3.0)
O que é o JBoss Seam? (continuação)
•
O JBoss Seam NÃO é apenas mais um “simples framework de
integração” competindo em um mercado abarrotado de
opções
•
O JBoss Seam NÃO é uma reposta ao Spring framework:
 Resposta/alternativa ao R
Ruby on Rails
•
O JBoss Seam possui todos os “músculos/força” do Java EE,
mas com uma aparência elegante
•
“Serviços Enterprise” para as massas
Características e Benefícios
•
Integração entre JSF e EJB 3.0
 Integração não definida na especificação da plataforma
Java EE 5.0:
• “Mundos separados”
 O JBoss Seam faz todo o “trabalho sujo” de integração
entre JSF e EJB 3.0, deixando o desenvolvedor concentrado
no domínio de negócios
 O JBoss Seam foi feito para o JSF:
• Além do JSF, o JBoss Seam permite outras tecnologias
para a camada de apresentação:
 Wicket, Tapestry, GWT e Flex (GraniteDS e BlazeDS)
Características e Benefícios (continuação)
•
Além de não depender do JSF para a camada de apresentação,
o JBoss Seam funciona com ou sem EJB 3.0
•
Tipos de componentes Seam:
 JavaBeans
 EJB 3.0:
• Stateless Session Beans
• Stateful Session Beans
• Entity Beans
• Message-Driven Beans
Virtualmente, qualquer classe Java pode se tornar um
componente Seam
 @Name:
•
Características e Benefícios (continuação)
•
Modelo unificado de componentes:
 Não há distinção entre componentes da camada de
apresentação e componentes da camada de negócios:
• Ex: EntityBean trafega diretamente da camada de
apresentação para a camada de negócios/persistência e
vice-versa:
Características e Benefícios (continuação)
•
Modelo unificado de componentes (continuação):
 O modelo de componentes do JBoss Seam permite a
utilização direta de POJOs como “backing beans” para as
páginas JSF:
• Nada de cadastrar classes no faces-config.xml:
Elimina camadas/artefatos “desnecessários”:
 VO/DTO, DAO, Service Locator, OpenSessionInView, etc
 VOCÊ monta a arquitetura da sua aplicação, define as
camadas e como elas vão interagir

Características e Benefícios (continuação)
•
Integração com AJAX
 Suporte “out of the box” para frameworks open source
baseados em JSF:
• Adiciona suporte AJAX sem a necessidade de codificação
de JavaScript pelo desenvolvedor
• ICEfaces
• JBoss RichFaces:

Possui uma camada de JavaScript remoto:
• Acesso aos componentes Seam direto do JavaScript:
 Integração com:
 Dojo
 GWT
Características e Benefícios (continuação)
•
Gerenciamento de estado e demarcação de contexto de
maneira declarativa
 Ciclo de vida dos componentes é gerenciado pelo JBoss
Seam
 Sem chamadas explícitas ao HttpSession
• Uso exagerado do HttpSession = Memory leak
• @Scope(value=ScopeType.SESSION):
•
Estende os contextos definidos pela especificação de Servlets:
request (event), page, session e application com dois novos
contextos:
 Conversation
 Business process
Características e Benefícios (continuação)
•
Conversation
 Conceito chave no JBoss Seam
 A conversação representa uma “unidade de trabalho” do
ponto de vista do usuário:
• Geralmente associada a um Caso de Uso
 Um usuário pode ter várias conversações ao mesmo tempo:
• Normalmente em múltiplas janelas do browser
 Facilita a construção de “wizards”
 Facilita o uso de AJAX

•
Facilita ainda mais o uso do JPA:
• Evita a famigerada LIE (LazyInitializationException)
Business process
 Contexto Stateful (Banco de Dados)
 O usuário pode continuar a interação com o sistema
mais tarde
Características e Benefícios (continuação)
•
Integração com Business Process Management (BPM)
 Traz o BPM para o mundo das aplicações web
 Business Process Management (BPM) transparente através
do Java Business Process Management (jBPM)
• Interação de longa duração (vários dias)
 Pode envolver interação de vários usuários
(associação de tarefas)
 Criação e controle do processo baseados em anotações:
Características e Benefícios (continuação)
•
O JBoss Seam suporta o conceito de Inversão de Controle (IoC)
ou Injeção de Dependências (DI), mas vai além
•
A injeção de dependências funciona bem no modelo de
arquitetura stateless, mas, em uma arquitetura stateful,
precisamos que a injeção de dependências seja bidirecional:
•
Bijeção (Injeção + Ejeção):
 Estende o modelo de IoC:
• Dinâmica
• Contextual
• Bidirecional
 A bijeção ocorre:
• Antes e depois das chamadas aos métodos
Características e Benefícios (continuação)
•
Injection:
 Componente é recuperado de um contexto (ou criado,
dependendo da configuração) e injetado em outro
componente:
Outjection:
 Um componente “ejeta/coloca” outro componente em um
contexto:
Características e Benefícios (continuação)
•
Navegação:
 A aplicação não conhece nada sobre a navegação, mas a
navegação conhece o estado da aplicação:
• Métodos “retornam void” e não um “outcome” ou a
própria página de transição:
•
A navegação conhece o estado da aplicação e toma
decisões:
Características e Benefícios (continuação)
•
Navegação (continuação)
 Stateful:
 Fluxo de navegação entre páginas (pageflow) definido
via jBPM Process Definition Language (jPDL)
 Utilizado quando temos um fluxo de navegação
“restrito”:
Características e Benefícios (continuação)
•
Navegação (continuação)
 Stateful (continuação)
 Editor gráfico para o diagrama do fluxo de páginas
através do JBoss Developer Studio/JBoss Tools:
Características e Benefícios (continuação)
•
Navegação (continuação)
 Stateless
 Definida através da navegação do JSF (facesconfig.xml) ou JBoss Seam (pages.xml)
 O fluxo de navegação via pages.xml é muito mais
poderoso que o fluxo de navegação do JSF:
 Acesso ao estado da aplicação, mecanismo de
eventos e etc
 Utilizado quando temos um fluxo de navegação
“livre”:
Características e Benefícios (continuação)
•
Segurança:
 Abstrai a utilização do JAAS
 Integração com o JBoss Rules
 Pode ser aplicada a:
• Páginas (pages.xml):
•
Fragmentos de páginas:
•
Métodos:
•
Entidades
Características e Benefícios (continuação)
•
Gerenciamento de “workspace” e janelas do browser:
 O usuário pode utilizar várias abas
 Ou, o usuário pode utilizar várias conversações em uma
única aba
 Exemplo: HotelBooking
•
Uso intensivo de anotações:
 Configuração por exceção (“no XML hell”)
 As anotações do JEE/EJB 3.0 são utilizadas e ampliadas com
as anotações do JBoss Seam
 Eliminação das declarações dos “JSF Managed Beans”,
“Converters” e “Validators” no faces-config.xml
Características e Benefícios (continuação)
•
Validação
 Onde colocar as regras de validação?
• Na camada de apresentação?
 Sim, precisamos informar os erros de validação para o
usuário
 Mas, também temos de garantir as regras/restrições
na camada de persistência:
 Podemos esquecer de colocar a validação em uma
página
 Clientes que utilizem as classes de domínio podem
fazer um “bypass” da validação (Ex. Aplicação
Desktop, WebServices)
 “Bad design”: Regras de validação fazem parte do
objeto de domínio (Persistent Domain Objects
Pattern vs Anemic Domain Model)
• Melhor opção: colocar a validação nas classes de
domínio e reaproveitá-las na camada de apresentação
com a utilização de AJAX
Características e Benefícios (continuação)
•
Validação (continuação)
 Hibernate Validator:
• Vários validadores pré-definidos: Max, Min, Length,
Range, Size, Email, Future, Past, Pattern, Email,
CreditCard, etc
• Fácil customização (Ex: @CPF, @StrongPassword)
• Funciona com qualquer implementação de JPA:
 Se utilizado com o Hibernate, gera a DDL com todas
as restrições definidas
• Esforço de padronização da especificação Bean
Validation (JSR 303)
• Validação na classe de domínio:
Características e Benefícios (continuação)
•
Validação (continuação) – Integração
 Integração do JSF/Facelets com o Hibernate Validator:
• O JBoss Seam leva a validação definida no objeto de
domínio para a camada de apresentação:
 Seam JSF Controls:
 <s:validate/>, <s:validateAll>
● Lê a anotação (meta-informação) definida e a utiliza
como validador no JSF
 <s:decorate/>
● “Decora” o campo quando há algum erro de
validação
Características e Benefícios (continuação)
•
Fácil utilização de testes unitários e de integração:
 Como são POJOs, os componentes Seam são facilmente
testáveis
 Podemos testar toda a aplicação, independente da
interação do usuário:
• Simula todo o ciclo de vida do JSF
 Frameworks de testes:
• TestNG e JUnit
 Os testes podem rodar dentro da própria IDE, o JBoss Seam
faz o deploy dos componentes EJB via JBoss Embedded
Características e Benefícios (resumo)
•
Um framework completo para o desenvolvimento web
 O JBoss Seam endereça e integra questões como:
• Persistência
• Concorrência
• Gerenciamento de estados
• Segurança
• Email
• Geração de PDF e gráficos
• Workflow
• Web Services
• Cache de fragmentos de páginas
• Captcha
• BPM
• AJAX
• etc
Seam Application Framework
•
Um framework dentro do próprio framework
•
Um conjunto de classes que facilitam a construção de
componentes:
 CRUD (EntityHome)
 Pesquisas em entidades (EntityQuery)
 Controladores JSF (EntityController)
•
Duas maneiras de criação:
 Via código Java:

Via declaração XML (components.xml):

Utilização:
seam-gen
•
Maneira simples de começar utilizar o JBoss Seam:
 Gera todo o projeto e as configurações necessárias:
• Nada de se preocupar com configurações, xml,
bibliotecas, etc
•
Gerador de aplicações no estilo Ruby on Rails:
 Linha de comando (ant):
• seam new-project, seam new-action, seam new-form,
seam generate-entities, seam generate-ui, etc
 Integrado com IDE (JBoss Developer Studio/JBoss Tools)
•
CRUD:
 Baseado no Seam Application Framework
 Geração a partir de entidades existentes (top down)
 Ou, por engenharia reversa da base de dados (botton up):
• Identifica relacionamentos complexos
 Gera a interface gráfica coerente com o modelo de dados
seam-gen (continuação)
•
Aplicação gerada com suporte a:
 Templates Facelets, RichFaces, AJAX, CSS
 EJB 3.0/JPA
 Segurança
 Internacionalização
 Classes de teste com TestNG
•
Gera projeto compatível com:
 ant
 Eclipse
 NetBeans
•
Fácil modificação do código gerado:
 Código próximo ao criado manualmente
JBoss Developer Studio (JBDS)/JBoss Tools
•
Maneira ainda mais simples (que o seam-gen) de começar
utilizar o JBoss Seam:
 “Front-end para o seam-gen”
 Toda criação do projeto Seam é baseada em “wizards”
•
Baseado no Eclipse 3.3 (Europa) e WTP 2.0
•
Ambiente de desenvolvimento totalmente integrado
•
Suporte especial ao JBoss Seam:
 Editor gráfico para os arquivos de configuração
 “Content Assist” para Unified Expression Language (EL) e
Facelets:
• Reconhece os componentes Seam
JBDS/Tools (continuação)
•
Editor visual de páginas
•
Paleta de componentes (JSF, RichFaces/Ajax4jsf, JBoss Seam)
•
Ferramentas para o Hibernate:
 Mostra a SQL gerada pela HQL/JPAQL
•
Ferramentas para o JBoss jBPM (editor visual)
•
Ferramentas para Spring
•
Ferramentas para Struts
•
Adaptador otimizado para JBoss Application Server (JBoss
Server View)
JBDS/Tools (continuação)
•
Exclusivo no JBDS (subscrição):
 Download único:
• Não precisa fazer integração com o Eclipse
 Certifica tanto a ferramenta quanto os componentes do
“runtime”
 JBoss Enterprise Application Platform (JBoss EAP):
• Utilize em desenvolvimento a mesma versão que
utilizará em produção
 Red Hat Enterprise Linux (RHEL 5)
 Acesso ao RHN
“Stack” completo para desenvolvimento
•
Rotular o JBoss Seam como um “framework web” é
“desmerecê-lo”:
 O JBoss Seam é muito mais que um framework web
tradicional
 Pode ser melhor descrito como um “stack” completo para
desenvolvimento
•
O JBoss Seam inclui:
 O próprio framework
 Bibliotecas de terceiros
 Build script (baseado no ant)
 Gerador de projetos (seam-gen)
 Integração com IDEs
 Classes de testes
 O JBoss Embedded
 Integração com outras tecnologias
 Mais de 25 exemplos
Desvendando o mito do "vendor lock-in"
•
Puro FUD (Medo, Incerteza e Dúvida)
• O JBoss Seam é open source (assim como todos os outros
projetos JBoss) e é licenciado sobre LGPL
•
Você NÃO é obrigado a utilizar o JBoss Application Server:
 O JBoss Seam é compativel com os maiores servidores de
aplicações do mercado, como: BEA Weblogic, IBM
Websphere, Oracle OAS, SUN Glassfish
 Roda inclusive no Apache Tomcat
 Se o suporte a EJB 3.0 não estiver disponível, podemos
utilizar o suporte do JBoss Seam para o gerenciamento de
transações (JPA ou Hibernate):
• Alternativamente, podemos executar o Tomcat com o
JBoss Embedded para um suporte a EJB 3.0
Desvendando o mito do "vendor lock-in"
•
Escolhendo o JBoss Seam, NÃO estamos presos a uma
tecnologia JBoss:
 Base/implementação de referência para a especificação de
Web Beans (JSR 299)
 Uma vez que a especificação de Web Beans (JSR 299)
estiver pronta, qualquer fornecedor pode prover sua
própria implementação
•
Devemos considerar a escolha do JBoss Seam baseados em
méritos técnicos
Web Beans (JSR 299)
•
O propósito da JSR 299 é unificar o modelo de componentes do
JSF (managed bean component model) com o modelo de
componentes do EJB 3.0, resultando em um modelo
simplificado para o desenvolvimento de aplicações para web
na plataforma Java EE 6.0:

Profundamente influenciada pelo JBoss Seam e Google
Guice. (além de influências do Oracle ADF e Apache Shale)
• Padronização do modelo de programação do JBoss Seam
na plataforma Java EE 6.0
Lider da especificação:
• Gavin King - Red Hat Middleware LLC
 Expert Group:
• Apache Software Foundation
• Google Inc
• Oracle
• Red Hat Middleware LLC
• Sun Microsystems Inc
• Outras empresas e pessoas

Conclusão
• O JBoss Seam não é tímido ao resolver os problemas da
plataforma Java EE, particularmente aqueles com o JSF
• O JBoss Seam promove o uso de arquiteturas simples,
encorajando
os
desenvolvedores
a
removerem
camadas
desnecessárias e a utilizarem componentes contextuais
• O JBoss Seam elimina a complexidade e torna
comprovadas tecnologias mais simples e acessíveis
as
já
Conclusão (continuação)
•
Em um mundo inundado de frameworks, o JBoss Seam é um
“unframework”
 Não força um modelo de programação:
• Desenvolvedor não precisa esquecer tudo o que sabe
 Em vez disso, o JBoss Seam unifica as APIs padrões da
plataforma Java, tornando-as mais acessíveis, funcionais e
atrativas
Conclusão (continuação)
•
E ainda provê novas funcionalidades na forma de extensões e
integração de bibliotecas de terceiros, como:
• Bijeção
• Conversations
• BPM (jBPM)
• Pageflows
• Suporte integrado a ORM
• RESTful URLs e “page actions”
• JavaScript remoto
• JBoss EL
• iText PDF
• JfreeChart
• Validadores
• Conversores
Conclusão (continuação)
•
•
•
•
•
•
•
•
•
•
Gerenciamento de eventos (event-driven applications,
observer/observable pattern)
Interceptors
Spring
JBoss Rules
Groovy
Internacionalização (i18n) e Temas
File upload
Email
Cache de fragmentos de página
Captcha
Conclusão (continuação)
•
•
•
•
•
•
Hot deploy
Gerenciamento de exceções (pages.xml)
Gerenciamento de workspace
Mecanismos de log e mensagens (@Logger,
@FacesMessages)
Debug (debug.seam)permite inspecionar qualquer
componente Seam diretamente do browser)
Integração com o JBoss Portal (JBoss Portlet Bridge - JSR
301)
Conclusão (continuação)
•
O JBoss Seam salvou o Java EE
•
Java EE antes/depois do JBoss Seam
Livros e Treinamentos
•
Livros sobre o JBoss Seam:
 JBoss Seam: Simplicity and Power Beyond Java EE
 Seam Framework: Experience the Evolution of Java EE
(Outubro de 2008)
 Beginning JBoss Seam: From Novice to Professional
 Practical JBoss Seam Web 2.0 Projects
 JBoss SEAM (Alemão)
 Seam in Action (Agosto de 2008)
•
Treinamento Oficial de JBoss Seam:
 JB170 – Introduction to JBoss Seam:
• 24 horas
Palavras Finais
• “Seam is the most exciting technology that has landed in
Java's turf since its inception and the reasons why you should
make Seam your framework of choice” - Dan Allen
• O sacrifício não é um pré-requisito para criar aplicações de
sucesso
•
Pare de pesquisar! Comece a desenvolver sua aplicação!
Exemplo (@Name, @In, CRUD)
Exemplo (@DataModel, @Factory)
Mais velozes e mais furiosos: Desenvolvimento Web 2.0
e JEE com JBoss Seam
João Paulo Viragine
Solutions Architect
[email protected]
Download

JBoss SEAM