mais velozes e mais furiosos: desenvolvimento web 2.0 e ... · framework perfeito, do que realmente...
Post on 11-Aug-2020
3 Views
Preview:
TRANSCRIPT
Mais velozes e mais furiosos: Desenvolvimento Web 2.0 e JEE com JBoss Seam
João Paulo Viragine
Solutions Architectjoao.viragine@redhat.com
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 utilizamosu 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 Ruby on RailsR
• 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 (faces-config.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 as já comprovadas tecnologias mais simples e acessíveis
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 Architectjoao.viragine@redhat.com
top related