ARQUITETURA OTIMIZADA PARA DESENVOLVIMENTO WEB UTILIZANDO NOVAS TECNOLOGIAS 

Paulo Victor dos Santos

RESUMO

Este artigo visa auxiliar na definição estratégica da arquitetura de uma aplicação utilizando as terminologias e conceitos de referência do JavaEE, objetivando e otimizando os processos em cada camada do modelo do padrão MVC, facilitando a evolução do software e determinando assim o sucesso do sistema.

Palavras-chave: Artigo Científico, Arquitetura Otimizada, Novas Tecnologias, Desenvolvimento Web, JavaEE.

1 - INTRODUÇÃO

            O estudo mostra a importância de implementar uma arquitetura ótima em um projeto de desenvolvimento para uma aplicação distribuída (enterprise¹), utilizando  ferramentas da linguagem Java da plataforma de desenvolvimento para organizações J2EE.

            Aplicações distribuídas necessitam de agilidade e segurança, estes fornecidos pelos componentes do J2EE que serão abordados ao longo do desenvolvimento deste artigo implementados em uma boa arquitetura.

2 - A IMPORTÂNCIA DE UMA BOA ARQUITETURA UTILIZANDO J2EE

         “A arquitetura de um software consiste na definição de seus componentes, as propriedades externamente visíveis destes elementos e os relacionamentos entre eles, enfatizando a separação de interesses.” [BASS2003]

            As vantagens de uma boa arquitetura de software vão além de definições de componentes e elementos, uma vez que um dos principais objetivos de se projetar uma arquitetura é o de atingir a qualidade desejada pelos interessados no sistema, stakeholders, ou seja, o processo arquitetural é determinante para o sucesso do sistema, pois conduz a evolução do software.

            Uma boa arquitetura independente da referência utilizada é importante, pois facilita a combinação de abordagens e reutilização de código (Design Patterns e Orientação a Objetos) e está diretamente ligado a atributos de qualidade, destacando-se os requisitos não funcionais (segurança, desempenho e outros). Possibilitando também a antecipação de necessidades futuras.

            Java 2 Enterprise Edition (J2EE) é uma arquitetura de referência para desenvolvimento de sistemas WEB utilizando a linguagem Java esta referência define terminologias e conceitos. Esta plataforma surgiu com o objetivo de padronizar e simplificar o desenvolvimento de aplicações. Um dos conceitos que J2EE oferece é suporte para desenvolvimento de aplicações multi-camadas (multi-tier).

Figura 2.1 – Arquitetura do Padrão MVC: Novas Tecnologias.

 

  • Cliente (Cliente-tier): interface do usuário.
  • MiddleWare (Middle-tier): oferece serviços para cliente e lógica da aplicação.
  • Camada de Dados (Enterprise Information System – EIS tier): gerenciamento de dados.

            O particionamento de uma aplicação em camadas permite uma maior flexibilidade de escolha da tecnologia apropriada para uma determinada situação. Podendo assim antecipar necessidades futuras, como citado anteriormente. Visto que, múltiplas tecnologias podem ser utilizadas para proverem o mesmo serviço, possibilitando assim a escolha do que melhor se enquadra na solução do problema em questão.

 

3 - DESIGN PATTERNS (PADRÕES DE PROJETOS)

         “Anos atrás, um arquiteto chamado Christopher Alexander perguntou a si mesmo: A qualidade é objetiva? A beleza está verdadeiramente no olho de quem observa, ou as pessoas concordam que algumas coisas são belas e outras, não? Ora, a forma particular de beleza em que Alexander estava interessado era de qualidade arquitetônica. Mas o que nos faz perceber quando um projeto arquitetônico é bom? Por exemplo: se uma pessoa projetasse um caminho de entrada para uma casa, como ela saberia que seu projeto estaria bom? Podemos reconhecer um bom projeto? Existe uma base objetiva para tal julgamento? Uma base para descrever nosso consenso?” [SHA2002]

 

            No início dos anos 90, alguns desenvolvedores influenciados pelo trabalho sobre padrões de Alexander, imaginavam se o que era verdadeiro para padrões arquitetônicos seria também para projeto de software. O grupo logo percebeu que existem problemas em softwares que ocorrem frequentemente e que poderiam ser resolvidos da mesma maneira, e que é possível projetar software em termos de padrões, criando soluções específicas baseadas nesses modelos somente depois que eles tivessem sido identificados.

            Os padrões de projeto, geralmente, podem ser definidos como soluções já testadas para problemas recorrentes, reutilizando soluções, estabelecendo terminologias comuns.

  • Reutilizar soluções – beneficiando-se de aprendizado a partir de experiências de outros, não tendo que reinventar soluções para problemas recorrentes.
  • Estabelecer terminologia comum – os padrões de projeto fornecem um ponto comum de referência durante a fase de análise e elaboração de um projeto de software.

            Os padrões de projeto, também conhecidos como “Design Patterns”, expõem soluções para problemas recorrentes no desenvolvimento de sistemas, estabelecendo um nome, um problema e a solução com suas consequências.

 

 

 

 

 

4 - O PADRÃO DE ARQUITETURA MODEL-VIEW-CONTROLLER (MVC)

            É um padrão de arquitetura de software que visa separar a lógica de negócio da lógica de apresentação, permitindo o desenvolvimento, teste e manutenção isolando ambos.

            A arquitetura MVC fornece uma maneira de mapear as tarefas tradicionais de entrada, processamento e saída para o modelo de interação com o usuário. Tornando a aplicação escalável, de fácil manutenção e teste. Requerendo apenas uma quantidade maior de tempo para modelar e analisar o sistema.

         “MVC é uma estratégia de separação de camadas de software que visa desacoplar a interface de seu tratamento e de seu estado. Basicamente o padrão MVC implementa um use-case interativo em três componentes:

  • Model (Modelo): Mantém o estado atual da View. É responsável por alterar o estado e fornecer à View os valores atuais.
  • View (Visualização): Captura ações do usuário e comunica ao Controller para que sejam executadas. Também atualiza as informações exibidas sempre que o Controller avisa que devem ser atualizadas.
  • Controller (Controlador): Recebe solicitações da View, invoca as regras de negócio necessárias, comanda a alteração do estado do Model e a atualização das informações exibidas na View.”

[SAM2007]

 

5 - TECNOLOGIAS QUE PODEM SER UTILIZADAS PARA OTIMIZAR O PROCESSO DE DESENVOLVIMENTO

5.1 - JAVA SERVER FACES

JSF é um framework MVC incorporado a especificação J2EE, utilizado para o desenvolvimento de aplicações web de forma ágil.

            A tecnologia JSF possui:

  • Um modelo de programação web orientado a eventos.
  • Um conjunto de bibliotecas para representação de componentes visuais e gerenciamento de estado, permitindo a manipulação de eventos e validação dos dados de entrada.
  • Um conjunto de bibliotecas para definição e controle de navegação de páginas.
  • Um conjunto de tags para uso em páginas, utilizadas para representar os componentes visuais.

 

“Na verdade, o JSF não está limitado à criação de páginas web. Sua arquitetura permite o desacoplamento entre os componentes e seu renderizador (código que efetivamente exibe o componente), permitindo que a mesma aplicação seja portada para outras interfaces, como o XUL, da Mozilla, por exemplo. Na verdade, existem renderizadores JSF para várias tecnologias, como HTML, XUL, WML, SVG, etc. Só para ter uma idéia, já estão criando até render kit para javax.swing, ou seja, você poderá criar aplicações Java desktop com JSF”. [SAM2011]

           

            Outros fatores considerados para a utilização do JSF são: Suporte a internacionalização e acessibilidade, utiliza Ajax em alguns de seus componentes, tornando alguns processos mais rápidos e eficientes, é composto por módulos de eventos, validadores e conversores.

 

5.2 - RICH INTERNET APPLICATION (RIA)

 

            RIA são aplicações web que tem características e funcionalidades de sistemas tradicionais do tipo Desktop. Possibilitando oferecer interfaces ao usuário com características que não podem ser obtidas utilizando apenas o HTML disponível no navegador para aplicações web padrão.

            O Google referencia alguns exemplos de frameworks RIA para JSF são: PrimeFaces, RichFaces e IceFaces. Tanto o IceFaces quanto o RichFaces foram superados pelo framework turco PrimeFaces com apenas 3 anos de vida, com uma grande participação brasileira. [GOO2011]

            PrimeFaces trata-se de uma biblioteca de componentes JSF, com um rico conjunto de componentes, baseado em Ajax no padrão do JSF na versão 2.  O Projeto PrimeFaces é baseado em objetivos bem definidos e princípios.

            Seus pontos fortes são: simplicidade e desempenho agregados a uma fácil utilização, além de um ótimo resultado.

 

5.3 - ENTERPRISE JAVA BEANS 3.1 (EJB 3.1)

            O Enterprise Java Beans 3.1 é um componente da plataforma J2EE que segue a especificação JSR-318 (JCP) e executa em um servidor de aplicação ou dentro de contêineres. O EJB fornece diversos serviços pré-programados, como: Escalabilidade, representada por vários EJBs executando ao mesmo tempo; segurança e controle de acesso; transações distribuídas; transparência de localização e componentes remotos.

As principais características do EJB são: simplificar a implementação de uma aplicação corporativa com agilidade e disponibilizar serviços tanto localmente quanto remotamente, neste último, utilizando RMI (Remote Method Invocation), um mecanismo IPC (Inter-process Communication) sofisticado que utiliza protocolo específico para chamadas de método Java remotamente.

O livro EJB 3 em ação, de Debu Panda, Reza Rahman e Derek Lane, parafraseia muito bem a função da tecnologia EJB:

“Embora muitas pessoas pensem que EJBs são um exagero para desenvolvimento de aplicativos Web relativamente simples e de tamanho moderado, isso não é verdade. Quando se constrói uma casa, não constrói tudo desde o início. Em vez disso, se compra materiais ou até mesmo serviços terceirizados, conforme precisa. Também não é muito prático construir um aplicativo empresarial desde o início. A maioria dos aplicativos de servidor tem muito em comum, incluindo a rotatividade da lógica corporativa, gerenciamento do estado do aplicativo, armazenamento e recuperação de informações de um banco de dados relacional, gerenciamento de transações, implementação de segurança, execução de processamento assíncrono, integração de sistemas, e assim por diante.

Como estrutura, o contêiner do EJB fornece esses tipos de funcionalidade comum como serviços de fábrica, de modo que os componentes EJB podem utilizá-los nos aplicativos sem reinventar a roda. Por exemplo, vamos dizer que quando se constrói um módulo de cartão de crédito no aplicativo Web, você escreve muito código complexo e propenso ao erro para gerenciar transações e controle de acesso de segurança. Isso poderia ser evitado utilizando os serviços de transação declarativa e segurança fornecidos pelo contêiner EJB. Esses serviços, bem como muitos outros, estão disponíveis para componentes EJB quando eles são implementados em um contêiner EJB. Isso significa, aplicativos de alta qualidade e ricos em recursos muito mais rápidos do que você poderia pensar.”

[EJB 3 em ação Capitulo 1, seção 1.1.2: 1. EJB como estrutura]

A nova especificação EJB facilita o desenvolvimento com anotações, diminuindo a quantidade de código e eximindo a necessidade de utilização de arquivos XML, anteriormente presentes nas especificações anteriores. Alguns exemplos de anotações são: @EJB: faz com que uma instância EJB seja injetada na aplicação, se anotada antes da definição da variável de instância e @Stateless: basta informar a anotação antes dos métodos e criá-los para que sejam utilizados pelos clientes.

O componente EJB possui 3 (três) tipos fundamentais, são eles:

Session Beans: Executa uma tarefa para o cliente. Pode manter o estado durante uma sessão com o cliente (Statefull) ou não (Stateless).

Message Driven Beans: Processa mensagens de modo assíncrono entre os EJBs e cuja API de mensagens é o Java Message Service (JMS).

Entity Beans: Representação de um objeto que vai persistir numa base de dados ou outra unidade de armazenamento.

A figura 5.3.1 abaixo, ilustra a estrutura de um servidor de aplicação utilizando o EJB 3.1 e o Java Persistence APIs 2 (JPA2), este que faz parte da camada de persistência (Persistence Layer) e será abordado no tópico 5.4.

 

Figura 5.3.1 - Enterprise Java Beans 3.1 – Servidor de Aplicação.

5.4 - JAVA PERSISTENCE APIs 2.0 (JPA2)

O Java Persistence APIs 2.0 é uma tecnologia de mapeamento relacional de objeto (ORM) que segue a especificação JSR 317 (JCP) e habilita aos aplicativos o gerenciamento de dados entre objetos Java e um banco de dados relacional, de maneira transparente para o desenvolvedor, que fica apenas com o trabalho de lidar com as entidades envolvidas. Isso significa que o JPA pode ser aplicado aos projetos criando e configurando um conjunto de classes Java (entidades) que espelham seu modelo de dados. O aplicativo poderá, em seguida, acessar essas entidades, como se estivesse acessando diretamente o banco de dados.

O JPA fornece, de maneira transparente, serviços para cache de dados e otimização de desempenho, tem sua própria linguagem rica e semelhante ao SQL para consultas estáticas e dinâmicas, o Java Persistence Query Language (JPQL), que tornam os aplicativos portáteis em diferentes fornecedores de banco de dados, evitando a tarefa de escrever código JDBC/SQL propenso a erro.

6 - GERANDO UM APLICATIVO CRUD MVC, PRIMEFACES, JSF 2, EJB 3.1, JPA2 COM NETBEANS

            Neste artigo será demonstrado como utilizar estas novas tecnologias na prática, baseando-se nos conceitos abordados anteriormente e considerando conhecimentos específicos básicos com a IDE de desenvolvimento Netbeans versão 7.0.1.

            A IDE NetBeans oferece assistentes que geram todos os códigos do aplicativo. Sendo necessário criar um banco de dados para gerar as classes de entidades.

            Crie um projeto do tipo aplicativo da web utilizando JavaServer Faces.

 

 

 

            Na aba componente, selecione o framework PrimeFaces . Que será utilizado com o JSF para enriquecer a interface com componentes mais sofisticados.

 

            Após a criação do projeto, deveremos criar as classes de entidades do banco de dados.

 

            Após a criação da conexão com o banco serão apresentados as tabelas disponíveis para a criação das entidades.

 

            Informe o nome do pacote das classes e finalize esta etapa.

 

            Agora que já temos as entidades, as classes de negócio que representam objetos do mundo real, criaremos as páginas JSF juntamente com a camada de modelo utilizando EJB e JPA.

 

            Informe o nome para o Pacote de sessionBeans, classes JSF e páginas JSF.

 

            Após a realização dos passos acima, será criado um aplicativo CRUD, utilizando PrimeFaces e JSF 2, EJB3.1 e JPA 2 no padrão MVC, bastando apenas a customização dos componentes e implementação de regras conforme necessário.

 

 


 

REFERÊNCIAS BIBLIOGRÁFICAS

 - Apress Pro JPA 2 Mastering the Java Trade Persistence API, Mike Keith and Merrick Schincariol, 2009;

 - Java Persistence with Hibernate, Christian Bauer and Gavin King, 2005;

 - Enterprise JavaBeans 3.1 Sixth Edition, O’Reilly, 2009.

 - PrimeFaces 2.2 User Guide, Optimus Prime, 2011;

 - Design Patterns – Elements of  Reusable Oject-Oriented Code, Gang of Four, 1995.

 

Explicando Padrões de Projeto

2002

ALAN SHALLOWAY, JAMES TROTT

PADROES DE PROJETO

 1995

ERICH GAMMA, RALPH JOHNSON, JOHN VLISSIDES, RICHARD HELM

 

 

 

 

GUIA DO JAVA ENTERPRISE EDITION 5:

DESENVOLVENDO APLICAÇOES CORPORATIVAS

2007

CLEUTON SAMPAIO

JAVA - ENTERPRISE EDITION 6:

DESENVOLVENDO APLICAÇOES CORPORATIVAS

2011

 

BASS2003 - Bass, Len and Clements, Paul and Kazman, Rick. 2003, April). Software Architecture in Practice, Second Edition. Addison-Wesley Professional).

Figura retirada do site: http://www.dimap.ufrn.br/~thais/Pdist/j2ee.pdf

SHA2002 - (SHALLOWAY, TROTT - 2002. Pg. 92)

SAM2007 - (Sampaio, 2007, Pg. 78).

SAM2011 - (Sampaio, 2011, pg. 100).

GOO2011 - (http://www.google.com/trends?q=PrimeFaces,RichFaces,IceFaces, 2011).

EJB 3 em ação, de Debu Panda, Reza Rahman e Derek Lane [EJB 3 em ação Capitulo 1, seção 1.1.2: 1. EJB como estrutura]