Principais padrões J2EE para a construção de aplicações não distribuídas – Parte III

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Não perca a terceira parte deste tutorial sobre padrões, estratégias de projeto e Struts.

 

Service Locator

Aplicações J2EE distribuídas interagem com componentes como EJB e JMS os quais provêem variados serviços. Geralmente estes componentes precisam ser localizados através de mecanismos de busca em serviços de nome e diretório. Aplicações não distribuídas também precisam localizar recursos, tal como data sources afim de estabelecerem conexão com dispositivos de armazenamento.

 

Para gravar, localizar e criar recursos de forma padronizada, as aplicações J2EE utilizam as facilidades providas pela API JNDI (Java Naming and Directory Interface). Esta API possibilita mapear nome de componentes aos objetos que estes representam. Quando é preciso recuperar um componente, a aplicação deve primeiramente obter um contexto inicial e então prover um nome JNDI previamente registrado para que a busca possa ser efetuada. Recursos precisam ser obtidos repetidamente desta maneira através de uma aplicação, conseqüentemente fazendo com que o código JNDI apareça múltiplas

vezes. Isto resulta numa desnecessária duplicação de código e, como a criação de um contexto inicial é dependente de fabricante, introduz também dificuldades de manutenção.

 

A solução é utilizar um objeto service locator que abstrai todas as chamadas JNDI e esconde as  complexidades inerentes à criação de um contexto inicial e busca dos componentes. Este objeto pode ser utilizado em toda parte de uma aplicação que precisa acessar um recurso gerenciado por JNDI, reduzindo a complexidade do código, provendo um ponto único de controle e, em determinados casos, melhorando a performance através de mecanismos de cache.

 

Composite View

Uma única página web pode ser composta por múltiplas subvisões, isto é, a página é dividida em porções, cada uma com um conteúdo específico. Por exemplo, uma página pode conter um cabeçalho, um rodapé, uma porção destinada ao menu e outra para apresentar o conteúdo do que foi escolhido num determinado momento. Algumas subvisões, como o cabeçalho e rodapé, são reaproveitadas em várias outras visões. Se páginas com estas características são construídas acrescentando-se o conteúdo de cada porção diretamente na página, a aplicação será mais propícia a erros, devido à duplicação de código, e mudanças de layout serão bem mais difíceis de serem executadas.

 

A solução para isso é utilizar composite views, ou seja, visões compostas de múltiplas subvisões atômicas. Cada componente independente pode ser incluído dinamicamente e o layout da página passa a ser mais facilmente gerenciável independentemente do conteúdo. Esta abordagem promove a reutilização de porções atômicas da visão e facilita em muito a alteração do layout.

 

Uma das formas mais simples de se implementar composite views é através de tags JSP, como a ação ou a diretiva <\%@include file="localURL"\%>. A utilização destas tags para gerenciamento do layout e composição das visões é bastante simples de implementar. Porém, esta estratégia não provê a mesma flexibilidade da abordagem com custom tags, pois o layout de cada página permanece embutido dentro da própria página. Ou seja, apesar das tags possibilitarem a inclusão dinâmica de conteúdo e conseqüentemente o reaproveitamento de porções comuns a várias páginas, a estruturação do layout (a divisão da página em tabelas ou frames por exemplo e o posicionamento de cada porção atômica dentro desta divisão) continua contida em cada página.

 

Existem duas possibilidades para inclusão dinâmica de conteúdo - a inclusão em tempo de compilação ou em tempo de execução. A primeira é obtida usando-se a diretiva <\%@include file="localURL"\%> e a última através da ação . Os pontos positivos e negativos de cada uma destas abordagens são discutidos a seguir:

 

·          Diretiva Include:

o         Todas as páginas incluídas são compiladas juntas criando um único servlet.

o         Compartilhamento de variáveis entre as páginas (já que na verdade geram um único servlet).

o         Melhor performance tendo em vista que não requer o overhead de despachar a solicitação para a página incluída e depois incorporar a resposta no output da página  original.

o         A inclusão ocorre em tempo de compilação. Sendo assim, quando uma das páginas     incluída é alterada, para ter efeito a alteração é necessário realizar forçosamente    uma alteração na página principal e assim garantir que uma nova página com o novo     conteúdo seja criada.

o         A página a ser incluída não pode ser especificada dinamicamente.

o         Possibilidade de incluir apenas páginas estáticas ou outra página JSP.

 

·          Ação Include:

o         Cada página incluída é um servlet separado, que deve ser carregado e executado pelo container.

o         A troca de informações entre as páginas ocorre através do objeto session ou request.

o         Como cada página incluída é um servlet separado, uma alteração em alguma delas não requer uma alteração forçada na página principal para a alteração ter efeito (inclusão em tempo de execução).

o         Resulta em menores tamanhos de classe, já que o código correspondente ao arquivo incluído não é repetido nos servlets para todas as páginas JSP que fazem a inclusão.

o         Possibilidade de especificar em tempo de execução a página a ser incluída.

o         Possibilidade de incluir páginas estáticas, CGI's, servlets ou outra página JSP.

 

A implementação do padrão composite view através de custom tags possibilita uma flexibilidade superior. Contudo, requer maior esforço de programação e gerenciamento, tendo em vista os inúmeros artefatos que precisam ser criados e configurados no ambiente de execução.

 

A framework Tiles [TILES], que pode ser utilizada em conjunto com Struts, é uma implementação de composite view que faz uso de custom tags e provê toda a flexibilidade de reaproveitamento e gerenciamento de layout que o padrão propicia. Com Tiles, além do reuso das “partes” é possível também definir um padrão para a disposição destas nas páginas, ou seja, definir o layout que as organizam. Basicamente, define-se uma template com o layout padrão que um conjunto de páginas terá. Este molde representa um esqueleto HTML e especifica onde serão inseridas as partes menores. O código abaixo define uma template JSP para a tela de abertura de um portal:

 

cop1p3padroes.JPG 

 

A Figura 2.2 mostra o layout padrão gerado pela template. Supondo que o arquivo com a template chama-se layoutAbertura.jsp, é preciso agora criar uma definição para cada página na aplicação que será construída seguindo o molde padrão. Nesta definição estará especificado o que irá conter cada porção variável, ou seja, o que cada página deve apresentar. O código abaixo é um exemplo de definição.

 
cop2p3padroes.JPG

figpart3pdroes.gif 

Figura 2.2: Template Tiles.

 

Pode-se verificar que para quase todas as porções foram especificadas as visões apropriadas. No entanto, para a porção body nada foi definido. Isto por que esta é uma definição padrão para várias telas da aplicação. Ou seja, não existirá uma página criada a partir dela, mas sim de alguma outra que derive da definição padrão. As porções comuns a todas as páginas já foram definidas e apenas a variável foi deixada em branco. Assim, quando for preciso criar uma página específica, pode-se fazer como abaixo,

 

cop3p3padroes.JPG

 

e criar uma nova definição que estenda da primeira e defina o que deve conter o corpo. Por fim, basta criar a página que irá materializar esta definição:

 

cop4p3padroes.JPG

 

Perceba que se for preciso alterar o layout básico das páginas na aplicação é suficiente que se altere apenas o arquivo layoutAbertura.jsp que todas as páginas automaticamente passarão a respeitá-lo.

 

Para ler as outras partes deste tutorial, acesse:

1-http://www.devmedia.com.br/visualizacomponente.aspx?comp=1812&site=6

2-http://www.devmedia.com.br/visualizacomponente.aspx?comp=1833&site=6

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?