Conceitos: Configurações de Implementação do J2EE
Tópicos
Introdução

A plataforma J2EE suporta o desenvolvimento e a implementação de uma
variedade de configurações de implementação padrão. São essas configurações de implementação
padrão que evitam muita adivinhação
no desenvolvimento do aplicativo. Nas seções a seguir, você localizará as
descrições das configurações de implementação mais comuns e os prós e
contras de cada uma.
Caso você ainda não esteja familiarizado com os conceitos do J2EE,
consulte os descritos em Conceitos: Visão Geral do J2EE antes de
avançar.
Configuração de Implementação Independente
A primeira configuração de implementação é mostrada na Figura 1. Nela,
não há um contêiner de Web nem um contêiner EJB. Um
cliente acessa os recursos do EIS diretamente e é responsável pela manipulação de qualquer
lógica de apresentação, lógica de negócios e pela própria lógica de integração.

Figura 1: Configuração de Implementação
Independente
À primeira vista, essa configuração pode parecer uma proposta
atraente para os aplicativos que fornecem manipulação simples dos dados contidos
nos recursos do EIS. Entretanto, ela apresenta várias desvantagens em potencial.
As mudanças nos recursos do EIS podem ter um impacto importante na implementação
do aplicativo, que é sempre diretamente dependente da estrutura interna
de cada recurso do EIS, como a estrutura de tabelas do banco de dados. Qualquer alteração no
próprio aplicativo requer uma consolidação completa em todos os usuários - não
há servidor central no qual o aplicativo seja implementado para que os clientes tenham
acesso imediato às correções mais recentes.
Além disso, essa configuração de implementação não favorece uma divisão
de responsabilidades. Um exemplo é o caso de a lógica de apresentação
e a lógica de negócios estarem firmemente acopladas, dificultando o suporte ao
desenvolvimento e manutenção do aplicativo.
Os problemas reais com essa configuração de implementação, entretanto, começam
a surgir quando você decide escalar o aplicativo. As estações de trabalho do cliente possuem
características de desempenho limitadas, portanto, o ideal seria distribuir o processamento
entre várias máquinas. Entretanto, a configuração independente não foi projetada
para suportar o processamento distribuído. Além disso, quando você tentar suportar mais clientes
que acessam os recursos do EIS coincidentemente, você perceberá que os aplicativos
são limitados pelo próprio recurso do EIS, como o número de conexões coincidentes
com o banco de dados.
Configuração de Implementação Centrada no
EJB
A configuração de implementação centrada no EJB é mostrada na Figura 2.
Nela, um contêiner EJB fica entre o contêiner do cliente e os
recursos do EIS. Não há contêiner de Web. A lógica de apresentação fica
no cliente, com a lógica de negócios residindo nos EJBs. Em vez de acessar os
recursos do EIS diretamente, todos os pedidos dos clientes são gerenciados pelos EJBs
apropriados. Os clientes são, portanto, protegidos das mudanças nos recursos do EIS.

Figura 2: Configuração de Implementação Centrada
no EJB
A configuração de implementação centrada no EJB foi projetada para tratar
de vários problemas presentes na configuração de implementação independente. De uma
perspectiva de escalabilidade, a implementação da plataforma J2EE pode distribuir
o processamento entre várias máquinas. Além disso, um contêiner EJB é responsável
por assegurar utilização eficiente de recursos limitados, como conexões com o banco de dados.
De uma perspectiva de desenvolvimento e manutenção do aplicativo, essa configuração
também favorece uma separação da lógica de apresentação e da lógica de negócios.
Entretanto, uma das desvantagens da configuração de implementação centrada no EJB
é que até as menores mudanças feitas à interface com o usuário requerem uma consolidação completa
do aplicativo em todos os usuários. Embora a lógica de negócios encapsulada
nos EJBs possa ser reimplementada no servidor (e assim, fornecer aos usuários acesso imediato
a todas as mudanças), isso não é verdadeiro para a lógica de apresentação. Isso não é apropriado,
uma vez que a aparência e comportamento de um aplicativo poderia passar por freqüentes mudanças.
Configuração de Implementação Centrada
na Web
A configuração de implementação centrada na Web é mostrada na Figura 3.
Nela, um contêiner de Web fica entre o contêiner do cliente e
os recursos do EIS. Não há contêiner EJB. Tanto a lógica de apresentação quanto a
lógica de negócios são manipuladas por elementos no contêiner de Web (JSPs e servlets).
Nessa configuração, é utilizada uma linguagem de marcações simples no cliente, como
HTML, embora também pudesse ser XML ou WML.

Figura 3: Configuração de Implementação Centrada
na Web
Normalmente, uma configuração de implementação centrada na Web resulta em uma
ênfase ao suporte da aparência e comportamento do aplicativo resultante, com
menos ênfase ao suporte da lógica de negócios. Essa configuração suporta
mudanças freqüentes à aparência de um aplicativo e está amplamente em uso atualmente.
Uma configuração de implementação centrada na Web fornece vários benefícios.
Primeiro, os clientes não são afetados pelas mudanças nos recursos do EIS, uma vez que não
acessam esses recursos diretamente. Segundo, é possível reimplementar todo o
aplicativo sem requerer consolidações nos usuários, uma vez que o aplicativo reside
totalmente em um servidor.
Entretanto, enquanto a utilização de EJBs é considerada, às vezes, excessiva
para a tarefa que se apresenta, a omissão de EJBs resulta em alguns dos problemas levantados
para a configuração de implementação independente. Especificamente, essa configuração
não favorece uma divisão clara de responsabilidades entre a lógica de apresentação
e a lógica de negócios, resultando sempre em elementos firmemente acoplados que impedem
o desenvolvimento e manutenção do aplicativo. Além disso, todos os problemas de escalabilidade presentes
em uma configuração de implementação independente aplicam-se a uma arquitetura centrada na Web.
Configuração de Implementação Multicamada
A configuração de implementação multicamada é mostrada na Figura 4.
Ela inclui um contêiner de Web e um contêiner EJB e
apresenta todos os benefícios discutidos para as outras configurações de implementação,
porém, sem as desvantagens. A lógica de apresentação é manipulada por elementos no
contêiner de Web, com a lógica de negócios manipulada pelos EJBs no contêiner EJB.

Figura 4: Configuração de Implementação
Multicamada
Os clientes não são afetados pelas mudanças nos recursos do EIS porque
esses recursos não são acessados diretamente. Além disso, é possível reimplementar todo o
aplicativo sem requerer consolidações nos usuários, uma vez que o aplicativo reside
totalmente no servidor.
De uma perspectiva de escalabilidade, o processamento pode ser distribuído para
suportar o processamento coincidente. Além disso, de uma perspectiva de escalabilidade, o contêiner
EJB é responsável por assegurar utilização eficiente de recursos limitados, como
conexões com o banco de dados.
De uma perspectiva de desenvolvimento e manutenção do aplicativo, essa
configuração também favorece uma separação clara de responsabilidades. A
lógica de apresentação é desacoplada dos recursos do EIS e a lógica de negócios é
desacoplada da aparência e comportamento. Essa separação clara pode auxiliar na alocação de
trabalho para desenvolvedores diferentemente qualificados e a lógica de apresentação e a lógica
de negócios podem ser desenvolvidas coincidentemente.
A configuração de implementação multicamada também pode facilitar a migração
de um dispositivo cliente (como um navegador da Web) para outro (como um PDA). Não é
necessária uma regravação completa do aplicativo porque a lógica de negócios
encapsulada nos EJBs permanece inalterada e pode ser utilizada no estado em que se encontra.
Resumindo, há várias configurações de implementação,
cada uma com seus prós e contras. Um dos objetivos da plataforma J2EE é
ser suficientemente flexível para oferecer suporte a qualquer configuração de implementação que for julgada apropriada
para uma organização e ao mesmo tempo tratar das questões corporativas.
|