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 :

 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:  , ● Lê a anotação (meta-informação) definida e a utiliza como validador no JSF  ● “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   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]