SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
Padrões J2EE: Um exemplo de uso
                 Erivan de Sena Ramos1, Pedro Henrique Pereira1
                      1
                          Universidade Estadual do Ceará (UECE)
                                  Fortaleza – CE – Brasil
              erivansr@gmail.com, pedrohenripereira@gmail.com

    Abstract. This paper presents an example of using J2EE patterns in a software
    project, identifying the improvements in the development and implementation
    of software using the of good J2EE Blueprints, featuring a modeling system
    that uses this platform.

    Resumo. Este trabalho apresenta um exemplo de uso dos Padrões J2EE em
    um projeto de software, identificando as melhorias no desenvolvimento e na
    implementação de um software com a utilização das boas práticas J2EE
    Blueprints, destacando a modelagem de um sistema que utiliza essa
    plataforma.

1. Introdução
       A Sun Microsystems (2011) apresenta o Java 2 Enterprise Edition (J2EE), como
uma plataforma que define um padrão para o desenvolvimento de aplicações
empresariais distribuídas e multicamadas. O J2EE estabeleceu um novo modelo para o
desenvolvimento de aplicações distribuídas. O modelo é baseado em componentes bem
definidos. Este modelo é destinado tanto para padronizar, quanto para simplificar os
diversos tipos de aplicações distribuídas existentes atualmente.
         Marinescu (2002) indica que, sem um conjunto de boas práticas de modelagem,
o desenvolvimento utilizando a arquitetura multicamadas J2EE pode se tornar muito
difícil. Alur et al. (2002) complementa que uma boa maneira de adquirir experiência em
projeto é pela utilização de padrões que se constituem em um moderno e importante
mecanismo para a elaboração de projetos orientados a objetos.
       Este trabalho apresenta a arquitetura do sistema de uma Auto-Escola, utilizando
uma arquitetura multicamadas baseado no J2EE, descrevendo e justificando a
aplicabilidade de quatro padrões, englobando as três camadas de uma aplicação web, de
acordo com as boas práticas J2EE Blueprints (apresentação, negócio e integração). Cada
padrão segue a estratégia aplicada, incluindo diagrama de classes e trecho do código
fonte do exemplo.

2. Plataforma Java 2 Enterprise Edition (J2EE)
       Júnior (2003) leciona que a Plataforma J2EE é um conjunto de especificações
para acesso a diversos serviços de infraestrutura, tais como segurança, distribuição de
processamento, controle de transações, comunicação entre camadas e outros. Estas
especificações são implementadas por diversos fornecedores, que competem entre si
para oferecer serviços de melhor qualidade e preços mais competitivos.
Júnior (2003) indica ainda que dessa forma, uma das grandes vantagens da
Plataforma J2EE é que as aplicações podem acessar os serviços oferecidos de forma
independente de fornecedor. As organizações que adotam esta plataforma possuem
considerável liberdade de escolha, podendo determinar o fornecedor mais adequado para
a sua situação. Além disto, os desenvolvedores podem concentrar esforços na lógica
específica do negócio, pois as funções de infraestrutura são disponibilizadas pela
Plataforma J2EE, potencialmente gerando ganhos de produtividade consideráveis. A
Figura 1 ilustra o conceito.




                       Figura 1. Plataforma J2EE (JÚNIOR, 2003)

        As aplicações acessam serviços como controle de transações ou acesso remoto
através das especificações contidas na Plataforma J2EE, implementadas por algum
fornecedor. A implementação da plataforma, no entanto, pode ser trocada sem
significativas alterações do código das aplicações, já que todo o acesso às
funcionalidades da plataforma é feito através de especificações padronizadas.

2. J2EE Blueprints
       O J2EE é um conjunto de procedimentos recomendados para desenvolver
aplicações J2EE, e divide as aplicações em camadas. Os padrões J2EE representam
soluções consideradas melhores práticas para implementar vários componentes
essenciais em cada uma das camadas identificadas pelo J2EE Blueprints. Os padrões são
dispostos em três camadas: Apresentação, Negócios e Integração.
        Schneide (1999) indica que em termos de orientação a objetos, a utilização de
padrões é importante porque identificam classes, instâncias, seus papéis, colaborações e
distribuição de responsabilidades. São, portanto, descrições de classes e objetos que se
comunicam, implementados a fim de solucionar um problema comum em um contexto
específico.
       Alur et al. (2002) lista as vantagens de se utilizar padrões em um projeto:
        a) foram testados: refletem a experiência e conhecimento dos desenvolvedores
que utilizaram estes padrões com sucesso em seu trabalho;
       b) são reutilizáveis: fornecem uma solução pronta que pode ser adaptada para
diferentes problemas quando necessário;
       c) são expressivos: formam um vocabulário comum para expressar grandes
soluções sucintamente;
d) facilitam o aprendizado: reduzem o tempo de aprendizado de uma
determinada biblioteca de classes. Isto é fundamental para o aprendizado dos
desenvolvedores novatos;
       e) diminuem retrabalho: quanto mais cedo são usados, menor será o retrabalho
em etapas mais avançadas do projeto.

3. Arquitetura do Sistema
        Para exemplificar o uso dos Padrões J2EE, este trabalho apresenta arquitetura de
um sistema de Auto-Escola, destacando a aplicabilidade de quatro padrões: Intercepting
Filter, Business Delegate, Session Facade, e Data Access Objects. Cada um destes
padrões engloba uma das três camadas de uma aplicação web (Apresentação, Negócio e
Integração), de acordo com as boas práticas J2EE Blueprints.
        O sistema em questão tem por finalidade controlar e automatizar os processos de
sua auto-escola desde cadastros e matrículas a acompanhamentos de aulas práticas e
teóricas. Cadastrar os alunos nas aulas práticas e realizar reservas das aulas práticas. O
sistema emite relatórios de todas as movimentações de aulas práticas e teóricas por
alunos, acompanhamentos dos resultados exames junto ao Departamento de Trânsito.
Também é possível obter relatórios de movimentações financeiras, além de poder
acompanhar custos por veículo ou por aluno, entre outros relatórios e estatísticas
emitidos pelo sistema.
        Para este trabalho são apresentadas somente algumas funcionalidades do sistema
que utilizam os padrões citados. Para cada padrão, segue a sua estratégia aplicada
incluindo diagrama de classes e trecho do código fonte. As classes definidas para o
sistema, e apresentadas neste trabalho são separadas em pacotes, sendo eles: web;
cliente, ejb e dao.
       Cada um destes pacotes pertence a uma camada do sistema e contém os padrões
de projeto para estas camadas.
3.1. Diagramas de Classes
3.1.1 Pacote Web
       Este pacote contém a implementação de um Intercepting Filter, que verifica a
cada solicitação se o usuário efetuou a autenticação;
   a) AcompanhamentoProcesso: contém os processos de pedido de habilitação. A
      partir dela serão solicitadas as ações possíveis dentro de um processo de
      habilitação, como agendamentos de aula, pagamentos de taxas e
      acompanhamento do processo;


   b) AutenticacaoFilter: é o Intercepting Filter para verificar, em todos os acessos, se
      o usuário efetuou a autenticação na aplicação. No caso do exemplo, faz-se uso
      da estratégia de implementação StandardEncodeFilter, deixando o controle do
      filtro a cargo da especificação do Servlet, Servlet 2.3 Specification.
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain
        chain) throws IOException, ServletException {

            boolean permitido = verificaAcesso((HttpServletRequest) request);
                if (!permitido) {
                   String logon = "logon.jsp?next=" + getNextURL((HttpServletRequest)
                                   request);
                   ((HttpServletResponse) response).sendRedirect(logon);
                }
                chain.doFilter(request, response);
        }



      O método verificaAcesso verifica se o usuário que está “logado” tem permissão
      para acessar o recurso solicitado. Caso sim, o método retorna true. O método
      getNextURL retorna a URL que estava sendo requisitada, para que, caso a
      autenticação seja positiva, a aplicação seja redirecionada para o recurso
      solicitado.
3.1.2 Pacote Cliente
       Este pacote contem os Business Delegate, que são classes que representam os
objetos de negócio distribuídos. Estas classes ficam do lado do cliente e simplificam o
acesso aos EJB;
   a) PagamentoAluno: fornece acesso ao EJB PagamentoAlunoBean;
   b) AgendamentoAula: é o business delegate do EJB AulaSessionBean. Os clientes
      acessam esta classe que por sua vez delega todas as chamadas de método para o
      EJB;

     import java.rmi.RemoteException;
     import java.util.ArrayList;
     import java.util.List;

     class AgendamentoAula {
        private static AgendamentoAula instance = new AgendamentoAula();

         private AgendamentoAula() {}

         public static AgendamentoAula getInstance() {
            return instance;
         }

         public List<Aula> getAllAulas() throws Exception {
            List<Aula> aulas = new ArrayList<Aula>();
            try {
               AulaSessionBean ejb = EJBLocator.getInstance().getAulaSession();
               aulas = ejb.getAllAulas();
            } catch (Exception e) {
               throw new Exception(e.getMessage(), e);
            }
            return aulas;
         }

         public Aluno getAluno(Integer id) throws Exception {
            Aluno aluno = null;
            try {
               AlunoSessionBean ejb = EJBLocator.getInstance().getAlunoSession();
               aluno = ejb.getAluno(id);
            } catch (Exception e) {
               throw new Exception(e.getMessage(), e);
            }
            return aluno;
         }
     }



A classe AgendamentoAula representa um Business Delegate, sei o qual a visão
acessaria diretamente a camada de negócio (neste caso, um EJB). Ela representa a forma
como o cliente fará a interface com o EJB.
No exemplo, de acordo com a estratégia Delegate Proxy Strategy, a classe
AcompanhamentoAula faz o acesso à camada de negócio através de um Business
Delegate, sem conhecer os detalhes da implementação da lógica. Por exemplo, não se
sabe como foi feita a obtenção do aluno, se através de um DAO, um EJB ou outras
classes de negócio.
3.1.3 Pacote EJB
        Este pacote contém os session beans que formam a camada de Session Facade
do sistema.
     a) AlunoSessionBean: é a classe de implementação do EJB que provê os serviços
        para localizar o aluno para o agendamento de aula prática. Este EJB contém os
        métodos para obter os dados do aluno solicitado.
     b) PagamentoAlunoBean: é a classe de implementação do EJB que provê o serviço
        para consolidar o pagamento de aula feita pelo aluno, levando em consideração
        as possíveis regras;


3.1.4 Pacote DAO
        Este pacote contém os Data Access Objects. Estes objetos abstraem o acesso às
tabelas do banco de dados. No contexto deste exemplo, existiriam as classes AlunoDAO,
ProcessoDAO, AulaDAO e InstrutorDAO.


 public Aluno buscarAlunoPorId(int id) throws HibernateException {
    String hql = "from Aluno where id = " +
       montarParametroHQL(PARAMETRO.NOME);

      Collection<ParametroHQL> parametros = new ArrayList<ParametroHQL>();
      parametros.add(new ParametroHQL(PARAMETRO.NOME, id));

      return (Aluno)carregarUnico(hql, parametros);
 }
         Exemplo de método da classe AlunoDAO (Estratégia de implementação Custom DAO Strategy)



Esta classe disponibiliza diversos métodos para facilitar a persistência e consulta de
objetos no banco de dados. Estes métodos encapsulam os objetos nativos da camada de
persistência, de modo que o desenvolvedor tenha seu desenvolvimento acelerado.


4. Conclusão
       A plataforma de desenvolvimento J2EE apresenta uma série de vantagens para o
desenvolvimento de aplicações que necessitam de escalabilidade, disponibilidade e
portabilidade.
        A utilização dos Padrões J2EE provoca uma grande reutilização no
desenvolvimento. No caso de um sistema de porte médio, conforme verificado na
arquitetura apresentada neste trabalho, estas características ficam ainda mais realçadas,
uma vez que na própria especificação das classes é realizada a sua relação com os
padrões de projeto.
        Enfim, o uso dos Padrões J2EE pode ser um diferencial de produtividade para o
desenvolvimento de soluções empresariais.
5. Referências
Alur, Deepak; Crupi, John; Malks, Dan. Core J2EE Patterns: as melhores práticas
  eestratégias de design. Rio de Janeiro: Campus, 2002.
Bill Dudney, Stephen Asbury, Joseph K. Krozak e Kevin Wittkopf. J2EE AntiPatterns
   (2003). Ed. Wiley Publishing.
Júnior, Valdo Noronha Peres Junior. Estratégias para a utilização da tecnologia J2EE
   com a arquitetura de cinco camadas. 124f. Dissertação (Mestrado em Ciências da
   Computação) – Universidade Federal de Minas Gerais, Belo Horizonte, 2003.
Marinescu, Floyd. EJB Design Patterns: Advanced Patterns, Processes, and Idioms.
  New York: John Wiley & Sons, 2002.
Schneide, Ricardo Luiz. Design Patterns. Rio de Janeiro, maio 1999. Disponível em:
  <http://www.dcc.ufrj.br/~schneide/PSI_981/gp_6/design_patterns.html>. Acesso em:
  6 ago 2011.
Sun Microsystems. Designing Enterprise Applications With The J2EE Platform
  Enterprise Edition. Disponível em: <http://java.sun.com/blueprints/guidelines/
  designing_enterprise_applications_2e/index.html>. Acesso em: 6 ago. 2011.

Mais conteúdo relacionado

Mais procurados

Questionário sobre padrões revisão da tentativa
Questionário sobre padrões  revisão da tentativaQuestionário sobre padrões  revisão da tentativa
Questionário sobre padrões revisão da tentativaAluisioSantos4
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareEdison Moreira
 
Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoVinícius de Paula
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Mvc
MvcMvc
Mvclcbj
 
Uml
UmlUml
Umllcbj
 
Questionário sobre uml revisão da tentativa
Questionário sobre uml  revisão da tentativaQuestionário sobre uml  revisão da tentativa
Questionário sobre uml revisão da tentativaAluisioSantos4
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UMLinfo_cimol
 
Visibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UMLVisibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UMLufpb
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetosGabriel Faustino
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoVinícius de Paula
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesRodrigo Cascarrolho
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoVinícius de Paula
 

Mais procurados (20)

Questionário sobre padrões revisão da tentativa
Questionário sobre padrões  revisão da tentativaQuestionário sobre padrões  revisão da tentativa
Questionário sobre padrões revisão da tentativa
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do Software
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de Projeto
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Diagrama de Classe
Diagrama de ClasseDiagrama de Classe
Diagrama de Classe
 
Mvc
MvcMvc
Mvc
 
UML
UMLUML
UML
 
Uml
UmlUml
Uml
 
Questionário sobre uml revisão da tentativa
Questionário sobre uml  revisão da tentativaQuestionário sobre uml  revisão da tentativa
Questionário sobre uml revisão da tentativa
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UML
 
Visibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UMLVisibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UML
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetos
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de Projeto
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Uml
UmlUml
Uml
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 

Semelhante a Artigo Padrões J2EE: Um exemplo de uso

Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Specificationby example
Specificationby example Specificationby example
Specificationby example Laís Berlatto
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Apresentação do SCAD, Sistema Académico do DIEE
Apresentação do SCAD, Sistema Académico do DIEEApresentação do SCAD, Sistema Académico do DIEE
Apresentação do SCAD, Sistema Académico do DIEEalexculpado
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebDenis L Presciliano
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacaotaniamaciel
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Jhonefj
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 

Semelhante a Artigo Padrões J2EE: Um exemplo de uso (20)

Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Specificationby example
Specificationby example Specificationby example
Specificationby example
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Apresentação do SCAD, Sistema Académico do DIEE
Apresentação do SCAD, Sistema Académico do DIEEApresentação do SCAD, Sistema Académico do DIEE
Apresentação do SCAD, Sistema Académico do DIEE
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações Web
 
Modulos SNEP
Modulos SNEPModulos SNEP
Modulos SNEP
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacao
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 

Artigo Padrões J2EE: Um exemplo de uso

  • 1. Padrões J2EE: Um exemplo de uso Erivan de Sena Ramos1, Pedro Henrique Pereira1 1 Universidade Estadual do Ceará (UECE) Fortaleza – CE – Brasil erivansr@gmail.com, pedrohenripereira@gmail.com Abstract. This paper presents an example of using J2EE patterns in a software project, identifying the improvements in the development and implementation of software using the of good J2EE Blueprints, featuring a modeling system that uses this platform. Resumo. Este trabalho apresenta um exemplo de uso dos Padrões J2EE em um projeto de software, identificando as melhorias no desenvolvimento e na implementação de um software com a utilização das boas práticas J2EE Blueprints, destacando a modelagem de um sistema que utiliza essa plataforma. 1. Introdução A Sun Microsystems (2011) apresenta o Java 2 Enterprise Edition (J2EE), como uma plataforma que define um padrão para o desenvolvimento de aplicações empresariais distribuídas e multicamadas. O J2EE estabeleceu um novo modelo para o desenvolvimento de aplicações distribuídas. O modelo é baseado em componentes bem definidos. Este modelo é destinado tanto para padronizar, quanto para simplificar os diversos tipos de aplicações distribuídas existentes atualmente. Marinescu (2002) indica que, sem um conjunto de boas práticas de modelagem, o desenvolvimento utilizando a arquitetura multicamadas J2EE pode se tornar muito difícil. Alur et al. (2002) complementa que uma boa maneira de adquirir experiência em projeto é pela utilização de padrões que se constituem em um moderno e importante mecanismo para a elaboração de projetos orientados a objetos. Este trabalho apresenta a arquitetura do sistema de uma Auto-Escola, utilizando uma arquitetura multicamadas baseado no J2EE, descrevendo e justificando a aplicabilidade de quatro padrões, englobando as três camadas de uma aplicação web, de acordo com as boas práticas J2EE Blueprints (apresentação, negócio e integração). Cada padrão segue a estratégia aplicada, incluindo diagrama de classes e trecho do código fonte do exemplo. 2. Plataforma Java 2 Enterprise Edition (J2EE) Júnior (2003) leciona que a Plataforma J2EE é um conjunto de especificações para acesso a diversos serviços de infraestrutura, tais como segurança, distribuição de processamento, controle de transações, comunicação entre camadas e outros. Estas especificações são implementadas por diversos fornecedores, que competem entre si para oferecer serviços de melhor qualidade e preços mais competitivos.
  • 2. Júnior (2003) indica ainda que dessa forma, uma das grandes vantagens da Plataforma J2EE é que as aplicações podem acessar os serviços oferecidos de forma independente de fornecedor. As organizações que adotam esta plataforma possuem considerável liberdade de escolha, podendo determinar o fornecedor mais adequado para a sua situação. Além disto, os desenvolvedores podem concentrar esforços na lógica específica do negócio, pois as funções de infraestrutura são disponibilizadas pela Plataforma J2EE, potencialmente gerando ganhos de produtividade consideráveis. A Figura 1 ilustra o conceito. Figura 1. Plataforma J2EE (JÚNIOR, 2003) As aplicações acessam serviços como controle de transações ou acesso remoto através das especificações contidas na Plataforma J2EE, implementadas por algum fornecedor. A implementação da plataforma, no entanto, pode ser trocada sem significativas alterações do código das aplicações, já que todo o acesso às funcionalidades da plataforma é feito através de especificações padronizadas. 2. J2EE Blueprints O J2EE é um conjunto de procedimentos recomendados para desenvolver aplicações J2EE, e divide as aplicações em camadas. Os padrões J2EE representam soluções consideradas melhores práticas para implementar vários componentes essenciais em cada uma das camadas identificadas pelo J2EE Blueprints. Os padrões são dispostos em três camadas: Apresentação, Negócios e Integração. Schneide (1999) indica que em termos de orientação a objetos, a utilização de padrões é importante porque identificam classes, instâncias, seus papéis, colaborações e distribuição de responsabilidades. São, portanto, descrições de classes e objetos que se comunicam, implementados a fim de solucionar um problema comum em um contexto específico. Alur et al. (2002) lista as vantagens de se utilizar padrões em um projeto: a) foram testados: refletem a experiência e conhecimento dos desenvolvedores que utilizaram estes padrões com sucesso em seu trabalho; b) são reutilizáveis: fornecem uma solução pronta que pode ser adaptada para diferentes problemas quando necessário; c) são expressivos: formam um vocabulário comum para expressar grandes soluções sucintamente;
  • 3. d) facilitam o aprendizado: reduzem o tempo de aprendizado de uma determinada biblioteca de classes. Isto é fundamental para o aprendizado dos desenvolvedores novatos; e) diminuem retrabalho: quanto mais cedo são usados, menor será o retrabalho em etapas mais avançadas do projeto. 3. Arquitetura do Sistema Para exemplificar o uso dos Padrões J2EE, este trabalho apresenta arquitetura de um sistema de Auto-Escola, destacando a aplicabilidade de quatro padrões: Intercepting Filter, Business Delegate, Session Facade, e Data Access Objects. Cada um destes padrões engloba uma das três camadas de uma aplicação web (Apresentação, Negócio e Integração), de acordo com as boas práticas J2EE Blueprints. O sistema em questão tem por finalidade controlar e automatizar os processos de sua auto-escola desde cadastros e matrículas a acompanhamentos de aulas práticas e teóricas. Cadastrar os alunos nas aulas práticas e realizar reservas das aulas práticas. O sistema emite relatórios de todas as movimentações de aulas práticas e teóricas por alunos, acompanhamentos dos resultados exames junto ao Departamento de Trânsito. Também é possível obter relatórios de movimentações financeiras, além de poder acompanhar custos por veículo ou por aluno, entre outros relatórios e estatísticas emitidos pelo sistema. Para este trabalho são apresentadas somente algumas funcionalidades do sistema que utilizam os padrões citados. Para cada padrão, segue a sua estratégia aplicada incluindo diagrama de classes e trecho do código fonte. As classes definidas para o sistema, e apresentadas neste trabalho são separadas em pacotes, sendo eles: web; cliente, ejb e dao. Cada um destes pacotes pertence a uma camada do sistema e contém os padrões de projeto para estas camadas.
  • 5. 3.1.1 Pacote Web Este pacote contém a implementação de um Intercepting Filter, que verifica a cada solicitação se o usuário efetuou a autenticação; a) AcompanhamentoProcesso: contém os processos de pedido de habilitação. A partir dela serão solicitadas as ações possíveis dentro de um processo de habilitação, como agendamentos de aula, pagamentos de taxas e acompanhamento do processo; b) AutenticacaoFilter: é o Intercepting Filter para verificar, em todos os acessos, se o usuário efetuou a autenticação na aplicação. No caso do exemplo, faz-se uso da estratégia de implementação StandardEncodeFilter, deixando o controle do filtro a cargo da especificação do Servlet, Servlet 2.3 Specification. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { boolean permitido = verificaAcesso((HttpServletRequest) request); if (!permitido) { String logon = "logon.jsp?next=" + getNextURL((HttpServletRequest) request); ((HttpServletResponse) response).sendRedirect(logon); } chain.doFilter(request, response); } O método verificaAcesso verifica se o usuário que está “logado” tem permissão para acessar o recurso solicitado. Caso sim, o método retorna true. O método getNextURL retorna a URL que estava sendo requisitada, para que, caso a autenticação seja positiva, a aplicação seja redirecionada para o recurso solicitado.
  • 6. 3.1.2 Pacote Cliente Este pacote contem os Business Delegate, que são classes que representam os objetos de negócio distribuídos. Estas classes ficam do lado do cliente e simplificam o acesso aos EJB; a) PagamentoAluno: fornece acesso ao EJB PagamentoAlunoBean; b) AgendamentoAula: é o business delegate do EJB AulaSessionBean. Os clientes acessam esta classe que por sua vez delega todas as chamadas de método para o EJB; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.List; class AgendamentoAula { private static AgendamentoAula instance = new AgendamentoAula(); private AgendamentoAula() {} public static AgendamentoAula getInstance() { return instance; } public List<Aula> getAllAulas() throws Exception { List<Aula> aulas = new ArrayList<Aula>(); try { AulaSessionBean ejb = EJBLocator.getInstance().getAulaSession(); aulas = ejb.getAllAulas(); } catch (Exception e) { throw new Exception(e.getMessage(), e); } return aulas; } public Aluno getAluno(Integer id) throws Exception { Aluno aluno = null; try { AlunoSessionBean ejb = EJBLocator.getInstance().getAlunoSession(); aluno = ejb.getAluno(id); } catch (Exception e) { throw new Exception(e.getMessage(), e); } return aluno; } } A classe AgendamentoAula representa um Business Delegate, sei o qual a visão acessaria diretamente a camada de negócio (neste caso, um EJB). Ela representa a forma como o cliente fará a interface com o EJB. No exemplo, de acordo com a estratégia Delegate Proxy Strategy, a classe AcompanhamentoAula faz o acesso à camada de negócio através de um Business Delegate, sem conhecer os detalhes da implementação da lógica. Por exemplo, não se sabe como foi feita a obtenção do aluno, se através de um DAO, um EJB ou outras classes de negócio.
  • 7. 3.1.3 Pacote EJB Este pacote contém os session beans que formam a camada de Session Facade do sistema. a) AlunoSessionBean: é a classe de implementação do EJB que provê os serviços para localizar o aluno para o agendamento de aula prática. Este EJB contém os métodos para obter os dados do aluno solicitado. b) PagamentoAlunoBean: é a classe de implementação do EJB que provê o serviço para consolidar o pagamento de aula feita pelo aluno, levando em consideração as possíveis regras; 3.1.4 Pacote DAO Este pacote contém os Data Access Objects. Estes objetos abstraem o acesso às tabelas do banco de dados. No contexto deste exemplo, existiriam as classes AlunoDAO, ProcessoDAO, AulaDAO e InstrutorDAO. public Aluno buscarAlunoPorId(int id) throws HibernateException { String hql = "from Aluno where id = " + montarParametroHQL(PARAMETRO.NOME); Collection<ParametroHQL> parametros = new ArrayList<ParametroHQL>(); parametros.add(new ParametroHQL(PARAMETRO.NOME, id)); return (Aluno)carregarUnico(hql, parametros); } Exemplo de método da classe AlunoDAO (Estratégia de implementação Custom DAO Strategy) Esta classe disponibiliza diversos métodos para facilitar a persistência e consulta de objetos no banco de dados. Estes métodos encapsulam os objetos nativos da camada de persistência, de modo que o desenvolvedor tenha seu desenvolvimento acelerado. 4. Conclusão A plataforma de desenvolvimento J2EE apresenta uma série de vantagens para o desenvolvimento de aplicações que necessitam de escalabilidade, disponibilidade e portabilidade. A utilização dos Padrões J2EE provoca uma grande reutilização no desenvolvimento. No caso de um sistema de porte médio, conforme verificado na arquitetura apresentada neste trabalho, estas características ficam ainda mais realçadas, uma vez que na própria especificação das classes é realizada a sua relação com os padrões de projeto. Enfim, o uso dos Padrões J2EE pode ser um diferencial de produtividade para o desenvolvimento de soluções empresariais.
  • 8. 5. Referências Alur, Deepak; Crupi, John; Malks, Dan. Core J2EE Patterns: as melhores práticas eestratégias de design. Rio de Janeiro: Campus, 2002. Bill Dudney, Stephen Asbury, Joseph K. Krozak e Kevin Wittkopf. J2EE AntiPatterns (2003). Ed. Wiley Publishing. Júnior, Valdo Noronha Peres Junior. Estratégias para a utilização da tecnologia J2EE com a arquitetura de cinco camadas. 124f. Dissertação (Mestrado em Ciências da Computação) – Universidade Federal de Minas Gerais, Belo Horizonte, 2003. Marinescu, Floyd. EJB Design Patterns: Advanced Patterns, Processes, and Idioms. New York: John Wiley & Sons, 2002. Schneide, Ricardo Luiz. Design Patterns. Rio de Janeiro, maio 1999. Disponível em: <http://www.dcc.ufrj.br/~schneide/PSI_981/gp_6/design_patterns.html>. Acesso em: 6 ago 2011. Sun Microsystems. Designing Enterprise Applications With The J2EE Platform Enterprise Edition. Disponível em: <http://java.sun.com/blueprints/guidelines/ designing_enterprise_applications_2e/index.html>. Acesso em: 6 ago. 2011.