O documento discute testes de integração em aplicações J2EE usando o framework Cactus. Ele apresenta o Cactus e mostra como utilizá-lo para testar servlets, EJBs e integração com outros frameworks como HttpUnit e JUnitEE.
UOL Tech Day: Testes de Integração com OpenEJBGabriel Ozeas
O documento descreve testes de integração com OpenEJB, permitindo executar aplicações e testes localmente de forma integrada. OpenEJB é um container EJB leve que permite criar recursos como datasources dentro dos testes para simular dependências.
Apresentacao Ii Encontro Sl Amazonas Integracao De FrameworksNelson Sozinho
Este documento apresenta a integração de três frameworks de código aberto - Prevayler para prevalência de objetos, JacORB para distribuição de objetos e JUnit para testes de objetos - com o objetivo de verificar a viabilidade técnica de se ter uma infraestrutura robusta e livre. Os autores descrevem cada framework, mostram como integrá-los através de um protótipo de sistema bancário distribuído e testado, e concluem que a integração foi viável garantindo robustez e extensibilidade.
O documento fornece uma introdução sobre Java, abordando: 1) Java como linguagem de programação e plataforma; 2) os tipos de programas Java como aplicações locais, applets e servlets; 3) o processo de compilação e execução de programas Java.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento apresenta uma aula prática de introdução à programação em Java ministrada pelo professor Manoel Campos. A agenda inclui a instalação do JDK em diferentes sistemas operacionais, a criação de programas Java utilizando editores de texto, a compilação e execução de códigos. O professor também fornece recomendações de vídeo-aulas online para aprendizagem do tema.
O documento fornece um resumo sobre JDBC (Java Database Connectivity), descrevendo suas principais características como uma interface baseada em Java para acesso a bancos de dados através de SQL e apresentando conceitos como DriverManager, Connection, Statement, ResultSet e transações.
O documento discute estratégias de comunicação distribuída, incluindo EJB. Ele lista vários tipos de comunicação em sistemas distribuídos como sockets, RMI, CORBA, EJB e serviços Web. O documento também discute instalação e configuração do JBoss e conceitos relacionados a JEE, como EJB, entidades e unidades de persistência.
Este documento fornece uma introdução aos conceitos fundamentais da linguagem de programação Java, incluindo:
1) Como obter o Java Development Kit e ferramentas de desenvolvimento como Eclipse ou NetBeans;
2) Principais conceitos como classe, objeto, métodos e atributos;
3) Organização de classes em pacotes e importação de pacotes;
4) Tipos de dados primitivos e wrappers em Java.
UOL Tech Day: Testes de Integração com OpenEJBGabriel Ozeas
O documento descreve testes de integração com OpenEJB, permitindo executar aplicações e testes localmente de forma integrada. OpenEJB é um container EJB leve que permite criar recursos como datasources dentro dos testes para simular dependências.
Apresentacao Ii Encontro Sl Amazonas Integracao De FrameworksNelson Sozinho
Este documento apresenta a integração de três frameworks de código aberto - Prevayler para prevalência de objetos, JacORB para distribuição de objetos e JUnit para testes de objetos - com o objetivo de verificar a viabilidade técnica de se ter uma infraestrutura robusta e livre. Os autores descrevem cada framework, mostram como integrá-los através de um protótipo de sistema bancário distribuído e testado, e concluem que a integração foi viável garantindo robustez e extensibilidade.
O documento fornece uma introdução sobre Java, abordando: 1) Java como linguagem de programação e plataforma; 2) os tipos de programas Java como aplicações locais, applets e servlets; 3) o processo de compilação e execução de programas Java.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento apresenta uma aula prática de introdução à programação em Java ministrada pelo professor Manoel Campos. A agenda inclui a instalação do JDK em diferentes sistemas operacionais, a criação de programas Java utilizando editores de texto, a compilação e execução de códigos. O professor também fornece recomendações de vídeo-aulas online para aprendizagem do tema.
O documento fornece um resumo sobre JDBC (Java Database Connectivity), descrevendo suas principais características como uma interface baseada em Java para acesso a bancos de dados através de SQL e apresentando conceitos como DriverManager, Connection, Statement, ResultSet e transações.
O documento discute estratégias de comunicação distribuída, incluindo EJB. Ele lista vários tipos de comunicação em sistemas distribuídos como sockets, RMI, CORBA, EJB e serviços Web. O documento também discute instalação e configuração do JBoss e conceitos relacionados a JEE, como EJB, entidades e unidades de persistência.
Este documento fornece uma introdução aos conceitos fundamentais da linguagem de programação Java, incluindo:
1) Como obter o Java Development Kit e ferramentas de desenvolvimento como Eclipse ou NetBeans;
2) Principais conceitos como classe, objeto, métodos e atributos;
3) Organização de classes em pacotes e importação de pacotes;
4) Tipos de dados primitivos e wrappers em Java.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute estratégias de comunicação distribuída e lista diferentes tipos de comunicação em sistemas distribuídos, incluindo EJB. O documento também fornece detalhes sobre instalação e configuração do JBoss para implantar aplicativos Java EE.
O documento apresenta uma introdução à programação orientada a objetos na linguagem Java, abordando tópicos como: a história e evolução do Java desde sua criação em 1991; as principais distribuições da linguagem (JSE, JEE, JME); a máquina virtual Java e o compilador; e um exemplo simples de um programa "Hello World" em Java.
O documento resume as principais mudanças na arquitetura modular introduzida no Java 9, incluindo:
1) A divisão do JDK e JRE em módulos menores com dependências explícitas;
2) A capacidade de criar aplicações modulares com dependências claras entre módulos;
3) As novas funcionalidades como a geração de imagens executáveis menores com jlink.
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
Para acessar um método protected de uma superclasse usando reflection, precisamos desabilitar o mecanismo de verificação de visibilidade (acess check) antes de invocar o método. Isso pode ser feito chamando o método setAccessible(true) no objeto Method antes da invocação.
O documento discute coleções em Java, abordando tópicos como vetores, listas, conjuntos, mapas, iteradores e classes relacionadas. É apresentada a interface Collection e suas subclasses principais (List e Set), com exemplos de implementações como ArrayList, LinkedList, HashSet e HashMap.
O documento descreve o desenvolvimento de um sistema de login web simples utilizando arquitetura MVC. Ele inclui instruções para criar a estrutura do projeto, modelagem de dados, classes de modelo, camada de acesso a dados e separação em pacotes.
O documento fornece uma introdução à tecnologia Java, abordando seus conceitos-chave como a linguagem Java, a máquina virtual Java, o ambiente de execução e desenvolvimento, além de explicar brevemente como escrever, compilar e executar aplicações Java.
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
O documento discute conceitos de modularização, componentização e reutilização de código em programação. Apresenta como sistemas complexos podem ser desenvolvidos de forma mais rápida e com menos erros ao serem divididos em módulos menores. Discorre sobre os tipos de módulos em Java e como a modularização, abstração e ocultação promovem a independência funcional e reutilização de código.
Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São Carlos nos dias 24 e 25 de Agosto de 2012
1) O documento apresenta o Java Persistence API (JPA) e como mapear classes de entidade para tabelas no banco de dados usando anotações. 2) É mostrado como fazer operações básicas como inclusão, alteração, exclusão e consulta de registros usando testes unitários com JUnit. 3) Também são demonstrados relacionamentos entre classes como herança, many-to-one e consultas.
O documento descreve um curso de programação de sistemas para desktop em Java. Ele inclui informações sobre avaliações, ementa, objetivos, conteúdo sobre Java e instalação do JDK.
O documento apresenta uma introdução sobre lógica de programação e a linguagem Java, incluindo definições de algoritmos, diagramas de blocos, operadores, estruturas de repetição e introdução à Java Virtual Machine.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
1. O container gerencia e executa os servlets e é responsável pela comunicação com o servidor, pelo ciclo de vida dos servlets e pelo suporte a multithreading.
2. O container mapeia URLs para servlets específicos usando o deployment descriptor XML.
3. O deployment descriptor XML permite mapear nomes internos, de classes e URLs dos servlets e também configurar aspectos como segurança.
1) O documento descreve os principais conceitos da máquina virtual Java (JVM) e como funciona a execução de um programa Java.
2) As etapas de um programa Java são compilação, carregamento de classes, verificação de bytecodes e interpretação ou tradução JIT.
3) A estrutura básica de um programa Java inclui classes, atributos, métodos e o método main para execução.
O documento resume os principais conceitos de EJB, incluindo: 1) EJB são componentes padrão do lado do servidor para aplicações distribuídas e escaláveis; 2) Bean de Entidade usam JPA para mapear classes para tabelas de banco de dados; 3) Session Beans podem ser stateless, stateful ou MDBs e fornecem serviços para aplicações.
As ferramentas netcat e Apache Benchmark (ab) podem ser usadas para simular carga e testar desempenho de aplicações web stateless e stateful. JMeter é uma ferramenta gráfica para teste de carga que permite definir planos de teste com threads simulando usuários e coletar métricas de desempenho.
Este documento discute os principais paradigmas de linguagens de programação, incluindo orientação a objetos, funcional e lógica. Aborda tópicos como tipos de dados, escopo, módulos, exceções, coleta de lixo e características-chave de linguagens como Smalltalk, Lisp, ML, Prolog e linguagens baseadas em fluxo de dados. Fornece uma introdução abrangente aos principais paradigmas de programação e como eles são apoiados por diferentes linguagens.
1) O heap é uma estrutura de dados representada por um arranjo que pode ser vista como uma árvore binária completa. 2) Existem dois tipos de heap - máximo e mínimo - que diferem na propriedade de ordenação dos nós. 3) O procedimento HEAP MÁXIMO é usado para manter a propriedade de ordenação quando um nó é alterado.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute estratégias de comunicação distribuída e lista diferentes tipos de comunicação em sistemas distribuídos, incluindo EJB. O documento também fornece detalhes sobre instalação e configuração do JBoss para implantar aplicativos Java EE.
O documento apresenta uma introdução à programação orientada a objetos na linguagem Java, abordando tópicos como: a história e evolução do Java desde sua criação em 1991; as principais distribuições da linguagem (JSE, JEE, JME); a máquina virtual Java e o compilador; e um exemplo simples de um programa "Hello World" em Java.
O documento resume as principais mudanças na arquitetura modular introduzida no Java 9, incluindo:
1) A divisão do JDK e JRE em módulos menores com dependências explícitas;
2) A capacidade de criar aplicações modulares com dependências claras entre módulos;
3) As novas funcionalidades como a geração de imagens executáveis menores com jlink.
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
Para acessar um método protected de uma superclasse usando reflection, precisamos desabilitar o mecanismo de verificação de visibilidade (acess check) antes de invocar o método. Isso pode ser feito chamando o método setAccessible(true) no objeto Method antes da invocação.
O documento discute coleções em Java, abordando tópicos como vetores, listas, conjuntos, mapas, iteradores e classes relacionadas. É apresentada a interface Collection e suas subclasses principais (List e Set), com exemplos de implementações como ArrayList, LinkedList, HashSet e HashMap.
O documento descreve o desenvolvimento de um sistema de login web simples utilizando arquitetura MVC. Ele inclui instruções para criar a estrutura do projeto, modelagem de dados, classes de modelo, camada de acesso a dados e separação em pacotes.
O documento fornece uma introdução à tecnologia Java, abordando seus conceitos-chave como a linguagem Java, a máquina virtual Java, o ambiente de execução e desenvolvimento, além de explicar brevemente como escrever, compilar e executar aplicações Java.
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
O documento discute conceitos de modularização, componentização e reutilização de código em programação. Apresenta como sistemas complexos podem ser desenvolvidos de forma mais rápida e com menos erros ao serem divididos em módulos menores. Discorre sobre os tipos de módulos em Java e como a modularização, abstração e ocultação promovem a independência funcional e reutilização de código.
Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São Carlos nos dias 24 e 25 de Agosto de 2012
1) O documento apresenta o Java Persistence API (JPA) e como mapear classes de entidade para tabelas no banco de dados usando anotações. 2) É mostrado como fazer operações básicas como inclusão, alteração, exclusão e consulta de registros usando testes unitários com JUnit. 3) Também são demonstrados relacionamentos entre classes como herança, many-to-one e consultas.
O documento descreve um curso de programação de sistemas para desktop em Java. Ele inclui informações sobre avaliações, ementa, objetivos, conteúdo sobre Java e instalação do JDK.
O documento apresenta uma introdução sobre lógica de programação e a linguagem Java, incluindo definições de algoritmos, diagramas de blocos, operadores, estruturas de repetição e introdução à Java Virtual Machine.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
1. O container gerencia e executa os servlets e é responsável pela comunicação com o servidor, pelo ciclo de vida dos servlets e pelo suporte a multithreading.
2. O container mapeia URLs para servlets específicos usando o deployment descriptor XML.
3. O deployment descriptor XML permite mapear nomes internos, de classes e URLs dos servlets e também configurar aspectos como segurança.
1) O documento descreve os principais conceitos da máquina virtual Java (JVM) e como funciona a execução de um programa Java.
2) As etapas de um programa Java são compilação, carregamento de classes, verificação de bytecodes e interpretação ou tradução JIT.
3) A estrutura básica de um programa Java inclui classes, atributos, métodos e o método main para execução.
O documento resume os principais conceitos de EJB, incluindo: 1) EJB são componentes padrão do lado do servidor para aplicações distribuídas e escaláveis; 2) Bean de Entidade usam JPA para mapear classes para tabelas de banco de dados; 3) Session Beans podem ser stateless, stateful ou MDBs e fornecem serviços para aplicações.
As ferramentas netcat e Apache Benchmark (ab) podem ser usadas para simular carga e testar desempenho de aplicações web stateless e stateful. JMeter é uma ferramenta gráfica para teste de carga que permite definir planos de teste com threads simulando usuários e coletar métricas de desempenho.
Este documento discute os principais paradigmas de linguagens de programação, incluindo orientação a objetos, funcional e lógica. Aborda tópicos como tipos de dados, escopo, módulos, exceções, coleta de lixo e características-chave de linguagens como Smalltalk, Lisp, ML, Prolog e linguagens baseadas em fluxo de dados. Fornece uma introdução abrangente aos principais paradigmas de programação e como eles são apoiados por diferentes linguagens.
1) O heap é uma estrutura de dados representada por um arranjo que pode ser vista como uma árvore binária completa. 2) Existem dois tipos de heap - máximo e mínimo - que diferem na propriedade de ordenação dos nós. 3) O procedimento HEAP MÁXIMO é usado para manter a propriedade de ordenação quando um nó é alterado.
Este documento presenta un proyecto para implementar un Rincón Tecnológico en la Escuela Básica Luis Napoleón Núñez Molina durante el período lectivo 2014-2015. El propósito general es adquirir quince computadoras para crear este espacio. Los propósitos específicos incluyen presentar el proyecto a las instancias de la escuela, integrar a las familias para que colaboren y mostrar el proyecto a instituciones que puedan aportar fondos para las computadoras. Se detallan las acciones,
1. A transformada de Laplace é usada para resolver equações diferenciais lineares com coeficientes constantes, transformando a equação diferencial inicial em uma equação algébrica.
2. A transformada de Laplace de uma função f(t) é definida como a integral de f(t) multiplicada por e^-st de 0 a infinito. Isso mapeia funções do domínio temporal para o domínio complexo.
3. Exemplos mostram como calcular a transformada de Laplace de funções comuns como exponenciais, seno, cosseno, polinomiais e combinações
The document describes the Rijndael cipher that was selected as the Advanced Encryption Standard (AES). It provides details on:
1. The mathematical preliminaries including operations in GF(28) and polynomials used in Rijndael.
2. The specification of Rijndael including the state, cipher key, number of rounds, round transformation consisting of byte substitution, shift rows, mix columns, and round key addition.
3. Implementation aspects on 8-bit and 32-bit processors and the inverse cipher.
4. Performance figures and motivation for design choices including resistance to known attacks.
5. Extensions, other functionality, and suitability for various applications. It
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
How can a digital marketing consultant help your business? In this resource we'll count the ways. 24 additional marketing resources are bundled for free.
Este documento fornece uma introdução ao framework Cactus, que permite testar componentes J2EE no próprio container do servidor. Resume as principais funcionalidades do Cactus em 3 frases:
Cactus estende o JUnit para permitir testar a integração de aplicações J2EE como servlets, JSPs e EJBs com o container do servidor, executando os testes simultaneamente no cliente e no servidor. Ele simula requisições HTTP para testar a funcionalidade dos componentes e verificar se os dados são processados corretamente. Cactus permite
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
A empresa 4linux é pioneira no ensino de Linux à distância no Brasil, com mais de 30.000 alunos satisfeitos. Ela possui experiência em missões críticas, é parceira de treinamento da IBM e foi a primeira empresa no Brasil a oferecer certificação LPI.
O documento resume uma apresentação sobre o framework Struts 2 e seu uso no projeto Minha Casa Minha Vida. O documento discute o que é Struts, seu histórico, recursos principais e como foi usado no projeto, com foco na arquitetura MVC e validação.
O documento fornece uma introdução ao framework Struts, explicando sua arquitetura MVC, como configurar uma aplicação web usando Struts com detalhes sobre os arquivos de configuração necessários e os principais componentes.
O documento discute conceitos importantes na plataforma Java Web, incluindo banco de dados, JDBC, JavaBeans, DAO, Java EE, Servlets, JSP, MVC, filtros, Spring MVC, JPA e Hibernate. Ele fornece exemplos de código para ilustrar esses conceitos-chave e discute os benefícios de usar estruturas como MVC, JPA e frameworks como Spring MVC e Hibernate.
O documento descreve o Apache Software Foundation e alguns de seus principais projetos de software livre desenvolvidos na linguagem Java, como Lucene, Struts, Tomcat, Ant, Maven, entre outros.
O documento fornece orientações sobre como preparar o ambiente de desenvolvimento para projetos Java usando frameworks como JSF e Hibernate. Ele lista os softwares necessários, links para download, e tutoriais de instalação. Também discute conceitos como necessidades de aplicações web, como o Java EE ajuda a resolver esses problemas, e diferentes servidores de aplicação.
O documento introduz conceitos básicos sobre servlets e JSP, incluindo: (1) servlets são classes Java que estendem a funcionalidade de servidores web; (2) JSPs combinam HTML com código Java; (3) servlets processam requisições e geram respostas, enquanto JSPs focam na exibição de resultados.
- JBoss Forge é uma ferramenta que auxilia na criação e manutenção de aplicações Java EE através de plugins para tarefas repetitivas e integração com outras tecnologias e ferramentas. Ele fornece CDI, integração com frameworks e compartilhamento de código no GitHub.
Este documento fornece informações sobre uma palestra gratuita sobre Java EE 6. Ele inclui o objetivo da palestra, a agenda, informações sobre o palestrante e uma seção de doações para uma instituição de caridade local.
O documento discute arquitetura em camadas com Java e Reflection. Ele apresenta os conceitos de arquitetura em camadas, dividindo as aplicações em camadas de apresentação, lógica de negócios, dados e persistência. Também explica o que é Reflection no Java e demonstra exemplos práticos de seu uso para recuperar metadados de objetos.
O documento discute a arquitetura MVC e sua implementação no ASP.NET MVC. Apresenta os principais componentes do ASP.NET MVC - Models, Views e Controllers - e discute suas vantagens e desvantagens em relação ao modelo WebForms do ASP.NET. Por fim, exemplifica o desenvolvimento de uma aplicação que utiliza ASP.NET MVC com NHibernate e a biblioteca JavaScript EXT JS.
Este documento fornece um resumo de 3 frases sobre tecnologias para desenvolvimento de software:
1) Apresenta um curso sobre diversas tecnologias Java como Servlets, JSP, JSF, EJB e Spring. 2) Fornece detalhes sobre o instrutor Rafael Benevides e sua experiência com Java. 3) A agenda inclui discussões sobre Servlets, JSP, Hibernate e outros temas ao longo de 9 dias.
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
Este documento resume um projeto para definir um framework Java EE padronizado para desenvolvimento de sistemas na instituição. Ele descreve os objetivos e benefícios do projeto, critérios de seleção para as tecnologias do framework, e as ferramentas e produtos resultantes, incluindo documentação, plano de capacitação e proposta para disseminar a nova arquitetura.
O documento fornece uma introdução à plataforma Java, descrevendo suas principais características como orientada a objetos, simples, dinâmica, robusta, independente da arquitetura, portável, multi-threaded, segura, rápida e distribuída. Também explica os componentes da plataforma Java como a máquina virtual Java e a API Java, e fornece instruções sobre como instalar o ambiente de desenvolvimento Java.
O documento apresenta Diénert de Alencar Vieira e seu histórico profissional, além de um roteiro sobre sistemas web e tecnologias como JSP, Servlets, Facelets, JSF, JBoss Seam, RichFaces e padrões de projeto.
O documento apresenta as tecnologias Servlets, JSP e JSF para desenvolvimento de sistemas web. Resume os conceitos básicos de cada tecnologia e demonstra seu uso através de códigos e páginas web geradas.
O documento apresenta uma introdução sobre servlets, JSP e servidores de aplicação, definindo suas principais características e funcionalidades como componentes para desenvolvimento web em Java.
Aqui são apresentados conceitos básicos sobre o paradigma web. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
1. eXtreme Programming Brasil
Testes de Integração
em J2EE com
Jakarta
CACTUS
Helder da Rocha (helder@acm.org) argonavis.com.br
2. Objetivos
1. Discutir as dificuldades relativas a testes em J2EE
2. Apresentar o framework Cactus e demonstrar como
utilizá-lo para testar aplicações J2EE
3. Mostrar como usar o Cactus com extensões como
HttpUnit e JUnitEE para testar servlets e EJBs
www.argonavis.com.br
Público-alvo:
Programadores J2EE familiarizados com o JUnit
2
3. Por que outro framework para testes J2EE?
JUnit não é suficiente?
Sim, para testes de unidade (lógica de EJBs, por exemplo)
Aplicações J2EE possuem muitas dependências (é preciso
simular a rede, o servidor, o EJB container, etc.)
Testes de unidade não garantem o funcionamento de
toda uma aplicação J2EE
Mock objects não servem?
Sim, mock objects ajudam a testar com dependências e
www.argonavis.com.br
permitem testar toda a aplicação
Mock objects podem ficar muito complicados
Aplicações geralmente rodam em um servidor de
aplicação ou Web - testar a integração da aplicação com
o servidor é mais útil e mais fácil
3
4. O que é Cactus?
Um framework que oferece facilidades para testar
componentes J2EE
Componentes Web (Camada de Controle)
Camada EJB (Model) e cliente (View): indiretamente
Produto Open Source do projeto Jakarta
Metas de curto prazo: testar servlets, JSPs, filtros e EJB
Metas de longo prazo: oferecer facilidades para testar
todos os componentes J2EE; ser o framework de
www.argonavis.com.br
referência para testes in-container.
Cactus estende o JUnit framework
Execução dos testes é realizada de forma idêntica
TestCases são construídos sobre uma subclasse de
junit.framework.TestCase
4
5. Para que serve?
Para testar aplicações que utilizam componentes J2EE
Arquitetura MVC Controller Model
Servlets, filtros e custom Servlets Taglibs
EJBs
Remotos
tags (Controladores) Classes Classes
EJBs
Locais
Filtros
JSPs (camada de apre- Java Java
sentação: View, através
de controladores) JSP Velocity
EJB (Modelo de dados/ XSLT View
lógica de negócios)
www.argonavis.com.br
Cactus testa a integração desses componentes com seus
containers
não usa stubs - usa o próprio container como servidor e usa
JUnit como cliente
comunicação é intermediada por um proxy
Ilustração: Manual do Cactus 5
6. Como funciona?
Cactus utiliza os test cases simultaneamente no
cliente e no servidor: duas cópias
Uma cópia é instanciada pelo servlet container
Outra cópia é instanciada pelo JUnit
Comunicação com o servlet container é feita através
de um proxy (XXXRedirector)
JUnit envia requisições via HTTP para proxy
Proxy devolve resultado via HTTP e JUnit os mostra
www.argonavis.com.br
Há, atualmente (Cactus 1.3) três tipos de proxies:
ServletRedirector: para testar servlets
JSPRedirector: para testar JSP custom tags
FilterRedirector: para testar filtros de servlets
6
7. Arquitetura
Parte da mesma classe (ServletTestCase) é executada
no cliente, parte no servidor
(4) setUp()
org.apache.cactus. testXXX()
ServletTestCase (1) beginXXX() tearDown()
(2) (8) (3)
Redirector
ServletTestCase ServletTestCase
Servlet
(6)
(7) (9)
(10) endXXX()
MeuServletTestCase (5)
request: AbstractHttpServletRequest
response: HttpServletResponse lado lado
www.argonavis.com.br
cliente servidor Classes
config: ServletConfigWrapper
lado-servidor
...
beginXXX(WebRequest)
null, no cliente
setUp()
testXXX() executados apenas no servidor
tearDown()
endXXX(WebResponse) executados apenas no cliente
7
9. ServletTestCase (ou similar)
Para cada método XXX() a ser testado, pode haver:
Um beginXXX(), para inicializar a requisição do cliente
encapsulada em um objeto WebRequest a ser enviado ao servidor
Um testXXX(), para testar o funcionamento do método
no servidor (deve haver ao menos um)
Um endXXX(), para verificar a resposta do servidor
devolvida em um objeto WebResponse retornada pelo servidor
Além desses três métodos, cada TestCase pode conter
www.argonavis.com.br
setUp(), opcional, para inicializar objetos no servidor
tearDown(), opcional, para liberar recursos no servidor
Os métodos do lado do servidor têm acesso aos mesmos
objetos implícitos disponíveis em um servlet ou página JSP:
request, response, etc.
9
10. Cactus: exemplo
Veja cactusdemo.zip (distribuído com esta palestra)
Usa duas classes: um servlet (MapperServlet) e uma classe
(SessionMapper) que guarda cada parâmetro como atributo da
sessão e em um HashMap - veja fontes em src/xptoolkit/cactus
Para rodar, configure o seu ambiente:
build.properties - localização dos JARs usados pelo servidor Web
(CLASSPATH do servidor)
runtests.bat (para Windows) e runtests.sh (para Unix) - localização
dos JARs usados pelo JUnit (CLASSPATH do cliente)
www.argonavis.com.br
lib/client.properties (se desejar rodar cliente e servidor em máquinas
separadas, troque as ocorrências de localhost pelo nome do servidor)
Para montar, execute:
1. ant test-deploy instala cactus-tests.war no tomcat
2. o servidor (Tomcat 4.0 startup) veja demonstração
3. runtests.bat roda os testes no JUnit cactusdemo.zip
10
11. CactusDemo: servlet
O objetivo deste servlet é
1) gravar qualquer parâmetro que receber na sessão (objeto session)
2) devolver uma página contendo os pares nome/valor em uma tabela
3) imprimir resposta em caixa-alta se <init-param> ALL_CAPS
definido no web.xml contiver o valor true
public void doGet(...) throws IOException {
(1) Grava request
SessionMapper.mapRequestToSession(request);
em session
writer.println("<html><body><table border='1'>");
// (... loop for each parameter ...)
if (useAllCaps()) {
key = key.toUpperCase(); (3) Retorna true se <init-param>
val = val.toUpperCase(); "ALL_CAPS" contiver "true"
www.argonavis.com.br
}
str = "<tr><td><b>"+key+"</b></td><td>"+val+"</td></tr>";
writer.println(str);
// (...)
(2)
writer.println("</table></body></html>");
Trecho de
}
MapperServlet.java
Escreveremos os testes para avaliar esses objetivos
Fonte do exemplo: [1] 11
12. CactusDemo: testes
MapperServletTest.java
public class MapperServletTest extends ServletTestCase { (...)
private MapperServlet servlet;
public void beginDoGet(WebRequest cSideReq) {
cSideReq.addParameter("user", "Jabberwock"); Simula DD
} <init-param>
public void setUp() throws ServletException {
this.config.setInitParameter("ALL_CAPS", "true");
servlet = new MapperServlet();
servlet.init(this.config);
}
Simula servlet
public void testDoGet() throws IOException { container
servlet.doGet(this.request, this.response);
String value = (String) session.getAttribute("user");
www.argonavis.com.br
assertEquals("Jabberwock", value);
} Verifica se parâmetro foi
public void tearDown() { /* ... */ } mapeado à sessão
public void endDoGet(WebResponse cSideResponse) {
String str = cSideResponse.getText();
assertTrue(str.indexOf("USER</b></td><td>JABBERWOCK") > -1);
}
}
Verifica se parâmetro aparece na tabela HTML 12
13. Exemplo: funcionamento
Cliente (JUnit) Servidor (Tomcat)
beginDoGet(WebRequest req)
- Grava parâmetro: ReqInfo
nome=user
value=Jabberwock setUp()
2 conexões HTTP: - Define init-params
SUCCESS!! FAIL! • Uma p/ rodar os no objeto config
testes e obter - Roda init(config)
saida do servlet
• Outra para esperar testDoGet()
resultados de testes - Roda doGet()
(info sobre exceções) - Verifica se parâmetro
www.argonavis.com.br
(no response) foi
mapeado à sessão
TestInfo
falha falha remota
local
tearDown()
&
endDoGet(WebResponse res) Output
- Verifica se resposta contém
USER</b></td><td>JABBERWOCK
13
14. HttpUnit
Onde encontrar
http://httpunit.sourceforge.net
Framework para testes funcionais de interface (teste
tipo "caixa-preta")
Verifica a resposta de uma aplicação Web ou página HTML
É teste funcional caixa-preta (não é "unit")
Oferece métodos para "navegar" na resposta
links, tabelas, imagens
www.argonavis.com.br
objetos DOM (Node, Element, Attribute)
Pode ser combinado com Cactus no endXXX()
Argumento com.meterware.httpunit.WebResponse
Acompanha ServletUnit
stub que simula o servlet container veja também
httpunitdemo.zip
14
15. Resumo da API do HttpUnit
WebConversation
Representa uma sessão de cliente Web (usa cookies)
WebConversation wc = new WebConversation();
WebResponse resp = wc.getResponse("http://xyz.com/t.html");
WebRequest
Representa uma requisição
WebResponse
Representa uma resposta. A partir deste objeto pode-se obter
objetos WebLink, WebTable e WebForm
WebLink
www.argonavis.com.br
Possui métodos para extrair dados de links de hipertexto
WebTable
Possui métodos para navegar na estrutura de tabelas
WebForm
Possui métodos para analisar a estrutura de formulários
15
16. HttpUnit com Cactus
Veja MapperServletTest2.java
Troque o WebResponse em cada endXXX() por
com.meterware.httpunit.WebResponse
public void endDoGet(com.meterware.httpunit.WebResponse resp)
throws org.xml.sax.SAXException {
WebTable[] tables = resp.getTables();
assertNotNull(tables);
assertEquals(tables.length, 1); // só há uma tabela
WebTable table = tables[0];
int rows = table.getRowCount();
boolean keyDefined = false;
for (int i = 0; i < rows; i++) {
String key = table.getCellAsText(i, 0); // col 1
String value = table.getCellAsText(i, 1); // col 2
www.argonavis.com.br
if (key.equals("USER")) {
keyDefined = true;
assertEquals("JABBERWOCK", value);
}
}
if (!keyDefined) {
fail("No key named USER was found!");
}
}
16
17. Outros testes com Cactus
Testes em taglibs (JspRedirector) veja
Veja exemplos em cactusdemo/taglib/src taglibdemo.zip
Testes em filtros (FilterRedirector) veja também
strutsdemo.zip
Usa proxy FilterRedirector
Teste básico é verificar se método doFilter() foi chamado
Veja exemplos em cactusdemo/src/xptoolkit/AuthFilter
Testes indiretos em páginas JSP (camada View) veja
Ideal é JSP não ter código Java hellojsp.zip
www.argonavis.com.br
Principais testes são sobre a interface: HttpUnit!
Testes indiretos em EJB (camada Model) veja
helloejb.zip
Indireto, através dos redirectors + JUnitEE
Redirectors permitem testar EJBs com interface local ou
remota chamados por código no servidor
17
18. Exemplo de aplicação MVC
getCommand(cmd)
cmd consulta
ControlServlet CommandFactory mapping.xml
cria
executa Command
despacha DefaultCommand
Model
NewMessageCommand
index.html View
ShowLastMessageCommand
Controller
ShowMessagesCommand
inclui usa
messages.jsp
cria grava / recupera
www.argonavis.com.br
inclui usa MessageBean MessageBeanDAO
lastMessage.jsp preenche
taglib
PrintMessagesTag
navbar.html JAXB (XML)
PrintFieldTag ou BD
18
19. ControlServletTest: client set up
import org.apache.cactus.*;
import junit.framework.*;
...
public class ControlServletTest extends ServletTestCase {
private String testMessage = "This is a Web Message.";
public void beginServiceNewMessage(WebRequest clientRequest) {
clientRequest.addParameter("cmd", "newMessage");
clientRequest.addParameter("message", testMessage);
}
public void beginServiceShowLastMessage(WebRequest clientRequest) {
clientRequest.addParameter("cmd", "showLastMessage");
www.argonavis.com.br
}
public void beginServiceShowMessages(WebRequest clientRequest) {
clientRequest.addParameter("cmd", "showAllMessages");
}
public void beginServiceDefaultCommand(WebRequest clientRequest) {
// nothing or unknown command
}
...
19
20. ControlServletTest: server set up & fixture
...
private HttpServlet servlet;
private String messageDir = "/tmp/test";
public void setUp() throws ServletException {
config.setInitParameter("mappings-file",
"/WEB-INF/mapping.xml");
config.setInitParameter("message-dir",
messageDir);
servlet = new ControlServlet();
servlet.init(this.config);
www.argonavis.com.br
}
...
20
21. ControlServletTest: server-side tests
...
public void _testService() throws ServletException, IOException {
System.out.print("Starting servlet...");
servlet.service(this.request, this.response);
System.out.println("Server side testing is done.");
}
public void testServiceNewMessage() throws ServletException, IOException {
assertEquals("newMessage", request.getParameter("cmd"));
assertEquals(testMessage, request.getParameter("message"));
_testService();
}
public void testServiceShowLastMessage() throws ServletException,... {
assertEquals("showLastMessage", request.getParameter("cmd"));
_testService();
www.argonavis.com.br
}
public void testServiceShowMessages() throws ServletException,IOException {
assertEquals("showAllMessages", request.getParameter("cmd"));
_testService();
}
public void testServiceDefaultCommand() throws ServletException,... {
_testService();
}
...
21
23. PrintMessagesTagTest
public class PrintMessagesTagTest extends JspTestCase {
...
public void testDoAfterBody() throws JspException, java.io.IOException {
tag.doStartTag();
bodyContent = pageContext.pushBody();
tag.setBodyContent(bodyContent); int count = 0;
do {
bodyContent.print(
"<test>"+testBeans[count].getMessage()+"</test>");
assertEquals("Unexpected contents.",
"<test>This is Cactus Test Message number "
+ (count + 1) + "</test>",
tag.getBodyContent().getString());
count++;
} while (tag.doAfterBody() == tag.EVAL_BODY_BUFFERED);
pageContext.popBody();
assertEquals(3, count);
www.argonavis.com.br
assertEquals("Body Content not empty!", "",
tag.getBodyContent().getString().trim());
}
public void endDoAfterBody(WebResponse response) {
String resultString = "";
for (int i = 0; i < 3; i++) {
resultString += "<test>This is Cactus Test Message number "
+ (i + 1) + "</test>";
}
assertEquals(resultString, response.getText());
} ...
} 23
24. Testes em aplicações Web: conclusões
Aplicações Web são difíceis de testar porque dependem da
comunicação com servlet containers
Stubs, proxies e APIs, que estendem ou cooperam com o JUnit,
tornam o trabalho mais fácil
Neste bloco, conhecemos três soluções que facilitam
testes de unidade, de integração e de caixa-preta em
aplicações Web
Stubs como ServletUnit permitem testar as unidades de
código mesmo que um servidor não esteja presente
www.argonavis.com.br
Proxies como os "redirectors" do Cactus permitem testar a
integração da aplicação com o container
Uma API, como a fornecida pelo HttpUnit ajuda a testar o
funcionamento da aplicação do ponto de vista do usuário
24
25. Fontes
[1] RichardHightower e Nicholas Lesiecki. Java Tools for eXtreme Programming.
Wiley, 2002. Explora as ferramentas Ant, JUnit, Cactus, JUnitPerf, JMeter, HttpUnit usando
estudo de caso com processo XP.
[2] Apache Cactus User's Manual. Contém tutorial para instalação passo-a-passo.
[3] Mackinnon, Freeman, Craig. Endo-testing with Mock Objects.
http://mockobjects.sourceforge.net/misc/mockobjects.pdf. O autor apresenta técnicas para testes
usando uma variação da técnica de stubs chamada de "mock objects".
www.argonavis.com.br
25