artigo padrões j2ee: um exemplo de uso

8
Padrões J2EE: Um exemplo de uso Erivan de Sena Ramos 1 , Pedro Henrique Pereira 1 1 Universidade Estadual do Ceará (UECE) Fortaleza – CE – Brasil [email protected], [email protected] 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.

Upload: erivan-ramos

Post on 22-Nov-2014

1.113 views

Category:

Documents


1 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Artigo Padrões J2EE: Um exemplo de uso

Padrões J2EE: Um exemplo de uso

Erivan de Sena Ramos1, Pedro Henrique Pereira1

1Universidade Estadual do Ceará (UECE) Fortaleza – CE – Brasil

[email protected], [email protected]

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.

Page 2: Artigo Padrões J2EE: Um exemplo de uso

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;

Page 3: Artigo Padrões J2EE: Um exemplo de uso

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.

Page 4: Artigo Padrões J2EE: Um exemplo de uso

3.1. Diagramas de Classes

Page 5: Artigo Padrões J2EE: Um exemplo de uso

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.

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.

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);

}

Page 6: Artigo Padrões J2EE: Um exemplo de uso

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;

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.

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;

}

}

Page 7: Artigo Padrões J2EE: Um exemplo de uso

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.

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.

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);

}

Page 8: Artigo Padrões J2EE: Um exemplo de uso

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.