Design Patterns J2EE - Session Facade
----------------------------------------
Olá amigos, por razões estratégicas, ao contrário do anunciado, vamos
apresentar o design pattern Session Facade na sequência. Ele
facilitará a apresentação posterior do Business Delegate.
Nome : Session Facade
Outros nomes: não achei. Deve ser consenso :-)
Contexto: Às vezes, a realização de um caso de uso envolve a
invocação de diversos EJBs.
Problema: O alto índice de chamadas remotas traz prejuízos à
performance da aplicação.
Solução: Ocultar a alta interatividade entre EJBs, através de
interfaces locais, atrás de um único método remoto.
Consequências:
+ Menos invocações remotas
+ Simplifica a interface de serviços remotos para o cliente,
disponibilizando um ponto central para a realização de um caso de uso
+ Desacoplamente entre as camadas de apresentação e negócio, uma vez
que todas os relacionamentos e dependências entre as entidades envolvidas
na realização do caso de uso ficam transparentes ao cliente.
Estratégias: Implementar um session bean stateless com serviços de
alto nível de granularidade
Exemplo:
/**
* Cliente que NÃO USA Session Facade
* @author alegomes
*/
class ATM
{
void transferenciaEntreContas(long c1, long c2)
{
//Lookup e find do EJB ContaCorrente de origem
//Lookup e find do EJB ContaCorrente de destino
ejbCCOrigem.sacar(valor);
ejbCCDestino.depositar(valor);
}
}
/**
* Cliente que USA Session Facade
* @author alegomes
*/
class ATM
{
void transferenciaEntreContas(long c1, long c2)
{
//Lookup e find da Session Facade OperacoesBancarias
sf.transferir(c1, c2);
}
}
/**
* Session Facade
* @author alegomes
*/
public class OperacoesBancarias implements SessionBean
{
//ejbMetodos
/**
* Método único que o cliente deve chamar para realizar
* transferência de fundos entre contas correntes.
*/
public void transferir (long c1, long c2)
{
//Lookup e find do EJB ContaCorrente de origem
//Lookup e find do EJB ContaCorrente de destino
ejbCCOrigem.sacar(valor);
ejbCCDestino.depositar(valor);
}
}
À primeira vista, pela simplicidade do exemplo, talvez se tenha
tido alguma decepção quanto aos reais benefícios do uso do pattern.
Entretanto, imaginem que no mundo real a transferência entre contas
não é apenas tirar de um lugar e por no outro, mas envolve também a
autenticação do usuário, validação das contas (bloqueadas, saldo
suficiente), geração de logs etc. Quando este volume de passos começa
a crescer é que efetivamente percebemos o quão importante é implementar
uma fachada de serviço de alto nível de granularidade a fim de
facilitar o desenvolvimento por parte do cliente, reduzir o
acomplamento entre as camadas e diminuir o overhead relativo ao grande
número de chamadas remotas que estariam sendo realizadas.
Observações: Pessoal, quisera eu detalhar aqui todas as nuâncias
relativas à aplicação deste e outros design patterns. Infelizmente,
por questões de espaço (e tempo), isto não é possível. Considerem estas
dicas apenas como catalizadores para o início de um longo processo de
aprendizado. Conforme consta abaixo, na assinatura do email, todas as
dicas podem ser discutidas no MundoOO. Incentivo também o uso da
enterprise-list, do SouJava, para a resolução de dúvidas e obtenção
de maiores detalhes práticos relativos ao tema.
Próximo design pattern J2EE: Business Delegate (agora sim)
Bons patterns !!!
Alexandre Gomes
Sou Jedi, Sou Java!
================================================================================
[dicas-list] circula diariamente com pequenas dicas sobre a plataforma Java e é
mais um serviço da Sociedade de Usuários Java - http://www.soujava.org.br
*** SouJava - Fortalecendo a Comunidade Java Brasileira! ***
- Para contribuir com uma dica, envie um e-mail para [EMAIL PROTECTED]
- Participe de outras listas de discussão sobre a linguagem Java.
Saiba mais em http://www.soujava.org.br/lista.htm
--------------------------------------------------------------------------------
- Para assinar este boletim: mailto:dicas-list-subscribe@;soujava.org.br
- Para cancelar sua assinatura: mailto:dicas-list-unsubscribe@;soujava.org.br
- Dicas anteriores: http://www.mail-archive.com/dicas-list%40soujava.org.br
- Para discutir sobre as dicas, acesse o Mundo OO (http://www.mundooo.com.br)