JAVA EE Java Enterprise Edition: a arquitetura JEE define o padrão para desenvolvimento de aplicações corporativas multicamadas. Servidores de aplicação: - É o núcleo da plataforma JEE. - Fornece a infraestrutura básica para o desenvolvimento e execução de um aplicativo empresarial. - Oferece elementos básicos, tais como: Segurança, Controle de transação, Filas de processamento, Elementos de gestão, Escalabilidade, Tolerância a falhas e Outros elementos de infraestrutura. - São softwares onde são hospedados os componentes responsáveis por implementarem as diversas camadas da aplicação. - Fornecem serviços que permitem a persistência e interação com outros aplicativos. - Permitem o desenvolvimento de aplicações distribuídas multicamadas. - Agem como a interface entre: Os clientes e as bases de dados e os sistemas de informação corporativos (ERPs, sistemas legado, etc.). Aplicações JEE são geralmente consideradas como aplicações de três camadas, porque são distribuídos em três locais: - Na máquina do cliente: Camada Cliente. - No servidor JEE: Camada Web e Camada de Negócio. - Nas máquinas onde residem bancos de dados e sistemas legados: Camada EIS. A especificação JEE define os seguintes componentes: – Componentes que são executados no cliente: Aplicações clientes e Applets. – Componentes web que rodam no servidor: Java Servlet, JavaServer Pages (JSP) e JavaServer Face (JSF). – Componentes de negócios que rodam no servidor: Enterprise JavaBeans (EJB). Camada Cliente: Aplicação cliente (Uso opcional de JavaBeans), Browser, página, applets (Uso opcional de JavaBeans). Applet: É um pequeno aplicativo cliente escrito em Java que executa na máquina virtual Java instalada no navegador web. JavaBeans: São componentes que possuem: Propriedades e Métodos. As camadas cliente e servidor podem incluir esse componentes para gerenciar o fluxo de dados. Componente Web: Servlets são classes Java que dinamicamente processam requisições e constroem respostas. Páginas JSP são documentos baseados em texto que são executados como servlets, mas permitem uma abordagem mais natural para a criação de conteúdo dinâmico. Tecnologia JavaServer Faces: Baseia-se nas tecnologias acima e Fornece um framework de componentes de interface de usuário para aplicações web. JavaBeans opcional. Componentes de negócios: A lógica de negócio atende aos requisitos de um determinado domínio de negócios e é tratada por EJBs em execução na camada de negócios. Camadas EIS: Banco de dados - Sistemas Legados. AJAX AJAX (Asynchronous JavaScript and XML): – AJAX utiliza Javascript, DOM e XML. – Apenas as partes das páginas que são alteradas é que são carregadas. – O tráfego com o servidor é reduzido. – Aplicações AJAX precisam de Javascript para executar. - Duas das tecnologias que compõem o Ajax são: DOM e CSS. - No uso do AJAX para o desenvolvimento é importante adotar boas práticas de acessibilidade ter um mecanismo de comunicação do tipo “Aguarde, carregando lista” de forma que o usuário fique ciente que atualizações dinâmicas na página estão sendo realizadas: Destacar as áreas do que foram atualizadas; Oferecer outros mecanismos que garantam o funcionamento do site caso o JavaScript não esteja habilitado e Oferecer a opção de desabilitar atualizações automáticas e permitir ao usuário atualizar manualmente a página. - AJAX é uma tecnologia que visa, entre outras coisas, aumentar a escalabilidade do servidor Web, trazendo parte do processamento para o lado cliente. - Sua principal característica é a habilidade de se comunicar com o servidor e atualizar partes de uma página Web sem recarregá-la inteiramente. - Objetos do tipo XMLHttpRequest são utilizados para trocar dados com servidores. - Requisições a servidores feitas via AJAX podem ser feitas tanto via método GET como POST. XML XML: – O conteúdo de um elemento XML é especificado entre uma tag de abertura e uma tag de fechamento. – Documentos XML podem ser utilizados para a transferência de dados através da web. – São tecnologias derivadas do XML: SOAP, XHTML e SVG. – Documentos XML possuem obrigatoriamente um elemento raiz, que deve englobar todos os demais elementos do documento. – XML Schema é uma linguagem usada para expressar restrições sobre documentos XML. – XSLT pode ser utilizada para transformar documentos XML em documentos HTML. – XML organiza dados em uma estrutura hierárquica, e cada ocorrência de um mesmo elemento pode ter uma estrutura particular de subelementos. – EncodingStyle é um atributo usado no XML para definir tipos de dados usados no documento. – O XMI é um padrão baseado em XML para exportar modelos definidos em UML entre ferramentas CASE compatíveis com esse padrão. – Sobre a sintaxe da linguagem XML, é correto afirmar que: os valores de atributos devem estar entre aspas. – XML é case sensitive, portanto difere letras maiúsculas e minúsculas. – É autodocumentado (DTDs e XML Schemas): o próprio formato descreve a sua estrutura e nomes de campos, assim como valores válidos. – XPROC - Modelo de processamento: define quais operações devem ser executadas e em que ordem em um documento XML. – XSD - Linguagem para expressar restrições sobre documentos XML. – XSLT - Linguagem para transformar documentos XML em outros documentos XML, documentos de texto ou documentos HTML. – DTD define uma construção de blocos válidos bem como possibilita a descrição de cada marca e o fornecimento de regras para interpretar cada informação usada em um arquivo XML. – As tags XML são case sensitive. - Para que um parser XML ignore uma certa seção de um documento XML, deve-se utilizar a sintaxe: <![CDATA[ Texto a ser ignorado ]]>. A linguagem de marcação extensível (ou XML) é recomendada pelo World Wide Web Consortium como padrão internacional para representação e intercâmbio de informação estruturada na Internet. Em comparação a outras linguagens de marcação existentes, como a HTML, uma vantagem da linguagem XML é permitir a representação de diversos tipos de estruturas de dados, como listas, registros e árvores. - O XML é uma linguagem de marcação de dados, utilizada para a troca, compartilhamento e armazenamento de dados. - A linguagem XML surgiu a partir do antigo SGML, com o intuito de promover a criação de novas linguagens de marcação para a Web. - Através do XML é possível criar uma linguagem a partir de tags customizadas, como é o caso do XHTML. - Os arquivos XML podem ser armazenados tanto no sistema de arquivos como em uma base de dados XML, uma vez que um arquivo XML é apenas um arquivo texto. - O XML Schema é usado para descrever o formato das tags e os valores aceitos em cada uma delas. Um banco de dados XML é utilizado para gerenciar um volume grande de arquivos XML de forma a promover recursos similares aos SGBD tradicionais, mas usando linguagens específicas de consulta. Dentre as linguagens usadas para fazer consultas em bases de dados XML, temos: Xquery e XPath. - Na linguagem padrão XML, os atributos podem ser associados com um elemento anexando-os a uma tag inicial ou uma tag de elemento vazio: <table border = “1”> - Na linguagem padrão XML, um locator XPointer pode conter dois XPointers separados por “..” para especificar os pontos de início e fim de recurso. A palavra-chave do XPointer, que pode ser usada no segundo par de XPointers e que especifica que a fonte da localização para seu primeiro termo é igual ao recurso indicado pelo primeiro XPointer é denominada de DITTO. - Utiliza o DTD para apresentar as regras que definem um documento. - Prescinde de um editor de arquivos específico para criar um documento XML. Um DTD (Document Type Definition) é um conjunto de regras usado para definir uma linguagem de marcação XML particular; - XSLT é uma linguagem de marcação XML usada para criar documentos XSL, que, por sua vez, definem a apresentação dos documentos XML; - XML Schema é uma linguagem usada para expressar restrições sobre documentos XML. - XML é uma linguagem na qual seus elementos formam documentos com estruturas de árvore. - Um arquivo DTD pode ser utilizado para definir a estrutura que determinados documentos XML devem seguir. WEB Service A expressão é utilizada para classificar aplicações que são expostas em uma rede via o uso de padrões XML e protocolos de Internet de tal modo que eles sejam bastante interoperáveis com outros aplicativos distribuídos distintos. Um Web Service é uma classe escrita em uma linguagem suportada pela plataforma .NET que pode ser acessada via protocolo http. O acesso sempre será via http. Mas internamente existe uma string XML que está empacotada em um protocolo SOAP. A base da plataforma de web services são: - XML: Fornece uma linguagem que pode ser usada entre diferentes: Plataformas e Linguagens de programação. Expressa mensagens e funções complexas. - HTTP: É o protocolo mais usado protocolo de Internet. Elementos de plataforma de web services: - SOAP (Simple Object Access Protocol); - UDDI (Universal Description Discovery and Integration); - WSDL (Web Services Description Language); Modelo operacional triangular dos web services: 1) Um provedor publica seu serviço em um registrador UDDI (ou em vários): Utiliza-se o SOAP para publicação 2) O serviço é localizado pelo consumidor no registrador: Utiliza-se o SOAP para localização 3) O consumidor usa a informação localizada do serviço para localizar e baixar uma cópia da descrição WSDL 4) O consumidor usa a informação do WSDL para vincular-se ao serviço Web e invocá-lo. Integração Contínua, TDD e Refactoring Segundo Martin Fowler, Integração Contínua é: “Uma prática de desenvolvimento de software onde os membros de uma equipe integram seu trabalho frequentemente, geralmente cada pessoa integra pelo menos diariamente – podendo haver multiplas integrações por dia. Cada integração é verificada por um build automatizado (incluindo testes) para detectar erros de integração o mais rápido possível. Muitas equipes acham que essa abordagem leva a uma significante redução nos problemas de integração e permite que uma equipe desenvolva software coeso mais rapidamente.”. Uma prática importante prevista pela Integração Contínua é a execução dos testes automatizados a cada integração. Test Driven Development (TDD) ou Desenvolvimento orientado a testes é uma técnica de desenvolvimento de software que baseia em um ciclo curto de repetições: Primeiramente o desenvolvedor escreve um caso de teste automatizado que define uma melhoria desejada ou uma nova funcionalidade. Então, é produzido código que possa ser validado pelo teste para posteriormente o código ser refatorado para um código sob padrões aceitáveis. Kent Beck, considerado o criador ou o 'descobridor' da técnica, declarou em 2003 que TDD encoraja designs de código simples e inspira confiança. Desenvolvimento dirigido por testes é relacionado a conceitos de programação de Extreme Programming, iniciado em 1999, mas recentemente tem-se criado maior interesse pela mesma em função de seus próprios ideais. Através de TDD, programadores podem aplicar o conceito de melhorar e depurar código legado desenvolvido a partir de técnicas antigas. Desenvolvimento dirigido por testes requer dos desenvolvedores criarem testes de unidade automatizados que definam requisitos em código antes de escrever o código da aplicação. Os testes contêm asserções que podem ser verdadeiras ou falsas. Após as mesmas serem consideradas verdadeiras após sua execução, os testes confirmam o comportamento correto, permitindo os desenvolvedores evoluir e refatorar o código. Desenvolvedores normalmente usam Frameworks de testes, como xUnit, para criar e executar automaticamente uma série de casos de teste. Refactoring: A técnica da refatoração consiste no aprimoramento do design e legibilidade de um código que esteja se tornando ultrapassado. A medida que esses pontos do código são encontrados eles devem ser corrigidos. Hibernate, Spring e Strutus O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java. Este framework facilita o mapeamento dos atributos entre uma base tradicional de dados relacionais e o modelo objeto de uma aplicação, mediante o uso de arquivos (XML) ou anotações Java. Hibernate é um software livre de código aberto distribuído com a licença LGPL. Hibernate pode ser utilizado em aplicações Java standalone ou em aplicações Java EE, utilizando servlet ou sessões Enterprise Java Beans. O Spring é um framework open source para a plataforma Java. No Spring o container se encarrega de "instanciar" classes de uma aplicação Java e definir as dependências entre elas através de um arquivo de configuração em formato XML, inferências do framework, o que é chamado de auto-wiring ou ainda anotações nas classes, métodos e propriedades. Dessa forma o Spring permite o baixo acoplamento entre classes de uma aplicação orientada a objetos. O Spring possui uma arquitetura baseada em interfaces e POJOs (Plain Old Java Objects), oferecendo aos POJOs características como mecanismos de segurança e controle de transações. Também facilita testes unitários e surge como uma alternativa à complexidade existente no uso de EJBs. Com Spring, pode-se ter um alto desempenho da aplicacao. Struts é um framework de desenvolvimento da camada controladora, numa estrutura seguindo o padrão Model 2 de aplicações web construído em Java para ser utilizado em um container web em um servidor J2EE.1. Componentes: ActionForm; ActionForward; ActionMapping; ActionServlet; DynaActionForm. O objetivo do Struts é separar o model (modelo - lógica de aplicativo que interage com um banco de dados) do view (visualização páginas HTML apresentadas para o cliente) e do controller (controlador - instância que transmite informações entre a exibição e o modelo). Struts fornece o controlador/controller (um servlet conhecido como ActionServlet) e facilita a escrita de moldes padronizados para a camada de visualização/view (normalmente em JSP, mas XML/XSLT e Velocity também são suportados). O programador de aplicativo da web é responsável por escrever o código do modelo/model, e por criar um arquivo de configuração centralizador (struts-config.XML) que une modelo, visualização e controlador. Testes Funcionais e Unidade Teste de Função ou Funcional: Testes destinados testar as funcionalidades, requerimentos, regras de negócio presentes na documentação. Esse teste é implementado e executado em diferentes objetivos do teste, como unidades, unidades integradas, aplicativos e sistemas. Teste Caixa-preta ou Funcional ou Comportamental: também chamado de teste funcional, orientado a dado ou orientado a entrada e saída, a técnica de caixa-preta avalia o comportamento externo do componente de software, sem se considerar o comportamento interno do mesmo. Tende a ser realizado ao final do processo de teste focalizando a atenção no domínio da informação, ou seja, conformidade com os requisitos. São tipos de erros encontrados nos testes de caixa-preta: interface; comportamento ou desempenho; iniciação ou térmico e estruturas de dados ou de acesso à base de dados externa; Sobre Teste de Unicidade: - Tem por objetivo verificar se um dado algoritmo, subrotinas ou mesmo pequenos trechos de código estão funcionando corretamente. - Teste de unidade: teste caixa-branca sobre a unidade de estruturação avalia cada unidade de modularização isoladamente ele é aplicado nos menores componentes de código criados, visando garantir que estes atendem às especificações, em termos de características e funcionalidade. - Teste de unidade tem o objetivo de testar componentes ou módulos de software, incluindo, por exemplo, teste das estruturas de dados. - Teste de Unidade: Tipo de teste que focaliza cada componente de um software de forma individual, garantindo que o componente funciona adequadamente. - Testes unitários: também conhecido como teste de módulo, é a fase em que se testam as menores unidades de software desenvolvidas (pequenas partes ou unidades do sistema). O universo alvo desse tipo de teste são as subrotinas ou mesmo pequenos trechos de código. Assim, o objetivo é o de encontrar falhas de funcionamento dentro de uma pequena parte do sistema, funcionando independentemente do todo. Sobre JUnit: - O JUnit é considerado um framework para execução automática de casos de teste em programas Java. Um dos pontos de extensão (hotspots) desse framework é a classe TestCase, que deve ser estendida para a especificação de casos de teste. - O Junit é um conjunto de classes em Java que pode ser estendido para se criar um ambiente de testes de regressão automatizado. - Os fatores de qualidade de McCall são utilizados para se aferir a qualidade de um software. Dentre tais fatores, há o fator eficiência, que estabelece a quantidade de recursos de computação necessários para que o software possa atender à sua função especificada.