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 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 RubyR 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 (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:
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 Architect [email protected]