Padrões J2EE - Sessão Facade

download Padrões J2EE - Sessão Facade

of 15

Transcript of Padrões J2EE - Sessão Facade

  • 8/18/2019 Padrões J2EE - Sessão Facade

    1/15

    Core J2EE Patterns - Facade Session

    Contexto

    Enterprise beans encapsulam a lógica e os dados do negócio e expõe suas interfaces e, assim, acomplexidade dos serviços distribuídos, para a nível do cliente.

    ProblemasEm uma Java 2 Plataform de múltiplos níveis, do ambiente de aplicaço Enterprise Edition !J2EE", surgemos seguintes problemas#

    $ %orte acoplamento, &ue leva a uma depend'ncia direta entre os clientes e os ob(etos de negócio)$ *uitas invocações de m+todos entre cliente e servidor levam a problemas de performance de rede)$ falta de uma estrat+gia uniforme de acesso do cliente, expõe os ob(etos de negócio a usos indevidos.

    -ma aplicaço multicamadas J2EE tem inúmeros ob(etos no lado do servidor, &ue so implementadas comoenterprise beans. l+m disso, alguns outros ob(etos arbitrrios devem prover serviços, dados ou ambos,lógica e dados do negócio. Esses ob(etos so coletivamente tratados como ob(etos de negócio, uma ve/ &ueencapsulam os dados e a lógica do negócio.

    plicações J2EE implementam ob(etos de negócio &ue fornecem serviços de processamento como sessionbeans. 0b(etos de negócio mais gen+ricos !coarse$grained", &ue representam uma ob(ect vie1 depersist'ncia !persistent storage" e so compartilados por vrios usurios so, geralmente, implementadoscomo entit3 beans.

    plicações cliente precisam acessar os ob(etos de negócio para cumprir suas responsabilidades e atender 4snecessidades do usurio. 5lientes podem interagir diretamente com estes ob(etos de negócio, por&ue elesexpõe suas interfaces. 6uando voc' expõe ob(etos de negócio para o cliente, o cliente deve compreender eser responsvel pelas relações entre ob(etos de dados de negócio e devem ser capa/es de lidar com o fluxode processo do negócio.

    7o entanto, a interaço direta entre cliente e ob(etos de negócio leva a um alto nível de acoplamento entre osdois e tal nível de acoplamento fa/ com &ue o cliente se torne diretamente dependente da implementaçodos ob(etos de negócio. Essa depend'ncia direta significa &ue o cliente deve representar e implementar asinterações complexas relativas !regarding" 4s pes&uisas e criações dos ob(etos de negócio e devem gerenciaros relacionamentos entre os ob(etos de negócio participantes, bem como compreender a responsabilidade de

    demarcaço da transaço.5omo as re&uisições dos clientes aumentam, a complexidade da interaço entre vrios ob(etos de negócio,aumenta. 0 cliente cresce e se torna cada ve/ mais complexo para cumprir com essas exig'ncias e, assim,torna$se muito sustetível a mudanças na camada dos ob(etos de negócio. l+m disso, o cliente + exposto,desnecessariamente, 4 complexidade do sistema sub(acente.

    8amb+m ocorre o forte acoplamento &uando ob(etos gerenciam suas relações internamente. %re&uentemente,no fica claro onde a relaço + gerenciada. 9sto leva a uma relaço complexa entre ob(etos de negócio e erigide/ na aplicaço. Essa falta de flexibilidade torna a aplicaço menos gerencivel &uando mudanças setornam necessrias.

    o acessar os enterprise beans, os clientes interagem com ob(etos remotos. 6uando clientes interagemdiretamente com todos os ob(etos de negócio participantes, podem surgir problemas de desempeno de rede.

  • 8/18/2019 Padrões J2EE - Sessão Facade

    2/15

    o camar enterprise beans, cada invocaço do cliente +, potencialmente, uma camada de m+todo remoto!:*9". 5ada acesso a um ob(eto de negócio se torna relativamente mais específica !fine$grained". 5omo onúmero de participantes aumenta neste cenrio, o número de camadas para cada m+todo remoto tamb+maumenta. 5omo o número de m+todos remotos tende a aumentar, a conversaço !cattiness" entre o cliente eos ob(etos no lado do servidor, aumentam. 9sto pode resultar na degradaço do desempeno da rede para aaplicaço, por&ue o alto volume das camadas de m+todo remoto aumentam a &uantidade de interaço

    atrav+s da camada de rede.

    -m problema tamb+m surge &uando um cliente interage diretamente com os ob(etos de negócio. -ma ve/&ue os ob(etos de negócio so expostos diretamente aos cliente, no existe uma estrat+gia unificada paraacessar os ob(etos de negócio. ;em uma estrat+gia de acesso do cliente &ue se(a uniforme, os ob(etos denegócio so expostos aos cliente e podem redu/ir a consist'ncia da utili/aço.

    Vantagens (Forces)

    $ %ornecer uma interface mais simples para os clientes, ocultando todas as interações complexas entrecomponentes de negócio.$ :edu/ir o número de ob(etos de negócio &ue so expostos para o cliente atrav+s da camada de serviços darede.$ Esconder do cliente as interações sub(acentes e interdepend'ncias entre os componentes de negócio. 9stoproporciona uma melor capacidade de gerenciamento, a centrali/aço das interações !responsabilidades",maior flexibilidade e maior capacidade de lidar com as mudanças.$ %ornecer uma camada de serviço uniforme mais gen+rica, para implementaço de ob(etos de negócio,separada da abstraço de serviços de negócio.$ Evitar expor, diretamente para o cliente, os ob(etos de negócio sub(acentes, redu/indo o acoplamento entrecamadas distintas ao mínimo possível.

    SoluçãoUsar uma session bean como uma fachada (facade) para encapsular a complexidae das interaçes entre osob!etos de ne"#cio $ue participam de um fluxo de trabalho% & facade session "erencia os ob!etos de ne"#cioe fornece aos clientes uma camada de acesso uniforme mais "en'rica%

    %acade ;ession abstrai as interações entre ob(etos de negócio sub(acentes e fornece uma camada deserviço &ue expõe apenas as interfaces necessrias. ssim, ela oculta do cliente as complexas interaçõesentre os participantes. %acade ;ession gerencia as interações entre os ob(etos de dados e de serviços denegócio &ue participam do fluxo de trabalo e encapsula a lógica de negócio associada com as solicitaçõesre&ueridas. ssim, o session bean !&ue representa uma %acade ;ession" gerencia as relações entre ob(etos denegócio. 0 session bean tamb+m gerencia o ciclo de vida desses participantes, criando, locali/ando !loo

  • 8/18/2019 Padrões J2EE - Sessão Facade

    3/15

    Ento, como voc' identifica as %acade ;essions atrav+s do estudo de casos de usoD *apear cada caso deuso a uma %acade ;ession ir resultar em muitas facadas. 9sto destrói a intenço de ter menos sessionbeans gen+ricos. Em ve/ disso, como voc' deriva a %acade ;ession durante a modelagem, buscandoconsolida$la no menor número de session beans baseadas em algum particionamento de lógica.

    Por exemplo, para uma aplicaço bancria, voc' pode agrupar as interações relacionadas ao gerenciamentode uma conta em uma única facada. 0s casos de uso 5riar 7ova 5onta, lterar 9nformações de 5onta,Exibir 9nformações de 5onta e, assim por diante, todo o negócio com a entit3 beans gen+rica conta. 5riaruma facada para cada caso de uso no + recomendado. ssim, as funções necessrias para apoiar essescasos de uso relacionados poderiam ser agrupadas em uma única facada, camada count;ession%acade.

    7este caso, uma facada ir tornar$se um controlador altamente gen+rico com m+todos de alto nível, &uepodem facilitar a cada interaço !isto +, create7e1ccount, cangeccount, getccount". Portanto,recomendamos &ue voc' pro(ete uma facada para agregar um grupo de interações relacionadas em umaúnica session. 9sso resulta em menos facadas para a aplicaço e aproveita os benefícios do padro %acade;ession.

    Estrutura  %igura B.FG mostra o diagrama de classe &ue representa o padro %acade ;ession.

    Fi"ura %* dia"rama de classe da Facade Session

  • 8/18/2019 Padrões J2EE - Sessão Facade

    4/15

    Participantes e Colaborações

    %igura B.FA cont+m o diagrama de se&u'ncia &ue mostra as interações de uma facada com dois entit3beans, um session bean, e um H0, todos atuando como participantes no cumprimento da solicitaço docliente.

    Fi"ura %+ Sess,o Fachada dia"rama de se$uncia

    Cliente

    :epresenta o cliente de uma facada, &ue precisa de acesso aos serviços do negócio. Este cliente pode seroutro session bean !%acade ;ession" na mesma camada de negócio ou um negócio delegado !consulte?Iusiness Helegate? na pgina 2B" em outra camada.

    SessionFacade

    0 ;ession%acade + implementado como um session bean. 0 ;ession%acade gerencia as relações entre osvrios Iusiness0b(ects e proporciona um alto nível de abstraço para o cliente. 0 ;ession%acade ofereceacesso gen+rico ao Iusiness0b(ect participantes representados pela invocaço 9nvo

  • 8/18/2019 Padrões J2EE - Sessão Facade

    5/15

  • 8/18/2019 Padrões J2EE - Sessão Facade

    6/15

    facada pode usar um ou mais H0s diretamente, para representar os dados de negócio. 9sso + feito&uando o aplicativo + to simples &ue no re&uer entit3 beans, ou &uando a ar&uitetura do aplicativo +baseado apenas em session beans e no utili/a entit3 beans. -sar H0s dentro do session beans simulaparcialmente a nature/a persistente !persistent nature" dos entit3 beans.

    aplicaço pode precisar dos serviços prestados por um ob(eto Java arbitrrio !ou se(a, um ob(eto &ue no +

    um enterprise bean ou de um H0, embora um H0 possa ser visto como um tipo de ob(eto Javaarbitrrio". Em tais casos, a facada acessa esse ob(eto Java arbitrrio para fornecer a funcionalidadenecessria.

    Consequências

    ntrodu3 uma camada $ue controla a camada de ne"#cio

    ;esso %acadas pode representar uma camada de controle entre clientes e a camada de negócio, conformeidentificado por meio da modelagem de anlise. -ma facada abrange as interações entre o cliente e oscomponentes de negócio. Em uma aplicaço sofisticada, voc' pode identificar inúmeras %acadas sesso

    &ue podem intermedirio entre o cliente e os participantes ob(etos da camada de negócio. Para aplicaçõesmais simples, pode$se sentir &ue uma facada no est acrescentando muito valor, como pode agir para amaioria de prox3 as solicitações do cliente para um único componente de negócio. 7o entanto, comoaplicativos se tornam mais complexos ao longo do tempo, usando uma facada na frente vai dar benefícionuma fase posterior.

    Expe interfaces uniformes

    s interações sub(acentes entre os componentes de negócio podem ser muito complexas. -m padro %acade;ession abstrai esta complexidade e apresenta ao cliente uma interface mais simples, &ue + fcil de entendere usar. o aplicar uma facada, voc' pode criar uma camada de serviço &ue expõe interfaces mais simplespara o sistema como um todo. ssim, uma facada fornece uma camada de acesso uniforme gen+rica atodos os tipos de clientes e pode proteger e esconder os componentes de negócio sub(acentes participantes.

    4edu3 o acoplamento5 aumenta a capacidade de "erenciamento

    -sar %acade ;ession separa os ob(etos de negócio dos clientes, redu/indo o acoplamento e a depend'ncia docliente sobre os ob(etos de negócio. C melor usar uma facada para gerir o fluxo de trabalo entre osob(etos de negócio, ao inv+s de fa/er os ob(etos de negócio cientes um do outro. -m ob(eto de negócio sódeve ser responsvel pela sua própria gesto !lógica de dados". 9nterações entre ob(etos inter$negóciospodem ser captadas em um fluxo de trabalo por uma facada. 9sto proporciona uma melor capacidade de

    gerenciamento, a centrali/aço das interações !responsabilidade e 1or

  • 8/18/2019 Padrões J2EE - Sessão Facade

    7/15

    servidor, por&ue o seu uso elimina a interaço direta entre o cliente e os ob(etos de dados de negócio e deserviços de negócio. Em ve/ disso, todas as interações so encaminadas atrav+s da facada de modogen+rico. facada e seus participantes esto mais próximos uns dos outros, tornando$a mais eficiente paragerir as interações entre os ob(etos participantes. 8odas as transfer'ncias de dados e camadas de m+todo dafacada para os participantes so, presume$se, atrav+s de uma rede de velocidade relativamente alta. 0desempeno da rede pode ainda ser a(ustado para proporcionar o mximo de rendimento, aplicando o

    padro 8ransfer 0b(ect para os ob(etos participantes, onde aplicvel.

    Fornece acesso "en'rico

    -ma facada pretende ser uma abstraço altamente gen+rica do fluxo de trabalo. ssim, no + dese(vel teruma %acada por interaço de entit3 bean, o &ue representaria uma abstraço específica, em ve/ de gen+rica.nalisa a interaço entre o cliente e os serviços de aplicaço, usando casos de uso e cenrios paradeterminar a possibilidade de generali/aço da facada. Hetermina a generalidade ideal da facada para aaplicaço dividindo a aplicaço em subsistemas lógicos e proporcionando uma facada para cadasubsistema. 7o entanto, fornecer uma única facada para a totalidade do sistema pode resultar em umasesso de facada muito grande, cu(os numerosos m+todos se tornariam ineficientes. -ma única facada

    pode ser suficiente para aplicações muito simples &ue no (ustifi&uem subsistemas.

    Centrali3a o "erenciamento de se"urança

    Políticas de segurança para a aplicaço pode ser gerida a nível ;esso %acada, uma ve/ &ue este + o nívelapresentado aos clientes. Por causa do acesso de gen+rica da ;esso %acada, + mais fcil e mais gerencivelpara definir políticas de segurança a este nível, em ve/ de no nível do componente de negócio participantes.0s componentes de negócio oferecem pontos de controle refinado. C mais fcil de gerenciar a segurança de%acadas de sesso &ue fornecem acesso de gen+rica, por&ue relativamente menos m+todos de gen+rica aser geridos de forma segura.

    Centrali3a o controle de transaç,o

    5omo a facada representa o fluxo de trabalo para os casos de uso, + mais lógico aplicar o gerenciamentode transações no nível %acade ;ession. 5ontrole de transaço centrali/ada tem vantagens semelantes asegurança centrali/ada. facada oferece um local central para o gerenciamento e definiço de controle detransaço de uma forma gen+rica. C muito mais trabaloso fa/er gerenciamento de transaçõesindividualmente nos componentes de negócio participantes, especialmente por&ue eles so mais específicosdo &ue a facada. l+m disso, no usar uma facada e dar ao cliente acesso 4s enterprise beans diretamente,coloca o Mnus de demarcaço da transaço no cliente e pode produ/ir resultados indese(ados.

    Expe menos interfaces remotas a clientes

    5lientes &ue interagem diretamente com os dados de negócio e ob(etos de serviço de negócio causam umaumento nas conversações entre o cliente e o servidor. Este aumento pode degradar o desempeno da rede.8odo o acesso aos ob(etos de negócio deve ser atrav+s do maior nível de abstraço representado por umafacada. -ma ve/ &ue a facada apresenta um mecanismo de acesso gen+rico para os componentes denegócio, isto redu/ o número de componentes de negócio &ue so expostos para o cliente. Hesse modo, apossibilidade de degradaço do desempeno da aplicaço + redu/ida devido o número limitado de interaçõesentre os clientes e uma facada, &uando comparado com a interaço direta do cliente com os componentesde negócio individuais.

  • 8/18/2019 Padrões J2EE - Sessão Facade

    8/15

    5ódigo de amostra9mplementando uma facada

    5onsidere uma aplicaço de ;erviços Profissionais !P;", onde o fluxo de trabalo relacionado com asentit3 beans !como Pro(ect, :esource" + encapsulado em Pro(ect:esource*anager;ession, implementadousando o padro ;ession %acade. 0 exemplo B.FG mostra a interaço com as entit3 beans :esource e

    Pro(ect, bem como com outros componentes de negócios, como Lalue >ist Nandlers !consulte ?Lalue >istNandler? na pgina @G" e 8ransfer'ncia de 0b(eto ssembler !ver ?8ransfer'ncia de 0b(eto ssembler? napgina @O".

    Exemplo B.FG 9mplementando ;ession %acade $ ;ession Iean

    pacocator)import corepatterns.util.;ervice>ocatorException)

    == 7ote# all tr3=catc details not so1n for brevit3.

    public class Pro(ect:esource*anager;ession  implements ;essionIean Q

      private ;ession5ontext context)

      == :emote references for te  == entit3 Ieans encapsulated b3 tis facade  private :esource resourceEntit3 R null)  private Pro(ect pro(ectEntit3 R null)  ...

      == default create  public void e(b5reate!"tro1s 5reateException Q

      S  == create metod to create tis facade and to  == establis connections to te re&uired entit3  == beans  == using primar3

  • 8/18/2019 Padrões J2EE - Sessão Facade

    9/15

  • 8/18/2019 Padrões J2EE - Sessão Facade

    10/15

      tro1s Pro(ectException Q  == similar to get:esourceEntit3  ...  S

      == *etod to encapsulate 1or

  • 8/18/2019 Padrões J2EE - Sessão Facade

    11/15

      == -pdate :esource Entit3 Iean  public void set:esourceHata!:esource80 resource"tro1s :esourceException Q

      ...  S

      == 5reate ne1 :esource Entit3 bean  public :esource80 create7e1:esource!:esource80

    resource" tro1s :esourceException Q  ...  S

      == *etods for managing resources bloc

  • 8/18/2019 Padrões J2EE - Sessão Facade

    12/15

      == 8is proxies a call to a 8ransfer 0b(ect ssembler  == to obtain a composite 8ransfer 0b(ect.  == ;ee 8ransfer 0b(ect ssembler pattern  public Pro(ect580 getPro(ectHetailsHata!"  tro1s P;Exception Q  tr3 Q

      Pro(ect80Nome pro(ect80Nome R !Pro(ect80Nome"  ;ervice>ocator.get9nstance!".getNome!  ?Pro(ect80?, Pro(ect80Nome.class")  == 8ransfer 0b(ect ssembler session bean  Pro(ect80 pro(ect80 R

    pro(ect80Nome.create!...")  return pro(ect80.getHata!...")  S catc !..." Q  == Nandle = tro1 exceptions  S  S

      == 8ese metod proxies a call to a Lalue>istNandler  == to get a list of pro(ects. ;ee Lalue >ist Nandler== pattern.

      public 5ollection getPro(ects>ist!Hate start,Hate end" tro1s P;Exception Q

      tr3 Q  Pro(ect>istNandlerNome pro(ectL>NNome R

    !Pro(ectL>NNome"  ;ervice>ocator.get9nstance!".getNome!  ?Pro(ect>istNandler?,  Pro(ectL>NNome.class")  == Lalue >ist Nandler session bean  Pro(ect>istNandler pro(ect>istNandler R

    pro(ectL>NNome.create!")  return pro(ect>istNandler.getPro(ects!  start, end")  S catc !..." Q  == Nandle = tro1 exceptions  S  S

      ...

      public void e(bctivate!" Q  ...  S

      public void e(bPassivate!" Q  context R null)  S

      public void set;ession5ontext!;ession5ontext ctx" Q  tis.context R ctx)  S

  • 8/18/2019 Padrões J2EE - Sessão Facade

    13/15

      public void e(b:emove!" Q  ...  SS

    8e remote interface for te ;ession %acade is listed in Example B.FA.

    Example B.FA 9mplementing ;ession %acade $ :emote 9nterface

    pac

  • 8/18/2019 Padrões J2EE - Sessão Facade

    14/15

      public Pro(ect80 getPro(ectHata!"  tro1s :emoteException, Pro(ectException ) public void setPro(ectHata!Pro(ect80 pro(ect"tro1s :emoteException, Pro(ectException )

      public Pro(ect80 create7e1Pro(ect!Pro(ect80 pro(ect"  tro1s :emoteException, Pro(ectException )

      ...

      public Pro(ect580 getPro(ectHetailsHata!"  tro1s :emoteException, P;Exception )

      public 5ollection getPro(ects>ist!Hate start,Hate end" tro1s :emoteException, P;Exception )

      ...S

    8e Nome interface for te ;ession %acade is so1n in Example B.FW.

    Example B.FW 9mplementing ;ession %acade $ Nome 9nterface

    pac

  • 8/18/2019 Padrões J2EE - Sessão Facade

    15/15

      ;ervice >ocator  8e ;ession %acade is a coarse$grained ob(ect tat allo1s encapsulation of te 1orocator pattern to reduce te code complexit3 and to exploit te benefits offeredb3 te ;ervice >ocator.

      Iusiness Helegate  8e ;ession %acade is used b3 te Iusiness Helegate 1en te client re&uests access to business services.8e Iusiness Helegate proxies or adapts te client re&uest to a ;ession %acade tat provides te re&uestedservice.

      Iro