Desenvolvimento Web 2.0 E JEE Com Jboss Seam João Paulo Viragine Solutions Architect [email protected] Motivação
Total Page:16
File Type:pdf, Size:1020Kb
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,