Escolar Documentos
Profissional Documentos
Cultura Documentos
Monografia MELHORIA DO DESEMPENHO DE APLICAÇÕES JAVA EE
Monografia MELHORIA DO DESEMPENHO DE APLICAÇÕES JAVA EE
FACULDADE DE TECNOLOGIA IBRATEC DE JOO PESSOA CURSO DE ESPECIALIZAO LATO SENSU EM DESENVOLVIMENTO WEB
ANLISE DE TTICAS ARQUITETURAIS NA MELHORIA DO DESEMPENHO DE APLICAES JAVA EE: ESTUDO SOBRE UM SISTEMA DE E-COMMERCE
ANLISE DE TTICAS ARQUITETURAIS NA MELHORIA DO DESEMPENHO DE APLICAES JAVA EE: ESTUDO SOBRE UM SISTEMA DE E-COMMERCE
Monografia apresentada Coordenao do Curso de Espe ia!izao Lato Sensu da "a u!dade de #e no!ogia $B%&#EC de Joo Pessoa' sob a orientao do Prof( Ms ( &!iandro )igino *uedes +ima' omo e,ig-n ia obteno do t.tu!o de espe ia!ista em Desen/o!/imento para 0EB(
&#E23456 $27E%$% &89$ & "$C)& C&#&+5*%:"$C& 2o /erso da "o!;a de %osto De e !e" e#$%&"$'$ (&" ("&)*!!*&+$*! '$ ,"e$ '$ B*%#*&-e.&+&/*$ '$ F$.0#'$'e *DEZ 1P"&.0"$" S$+'e"#2 13456-76789 +$ B*%#*&-e.$ '$ F$.0#'$'e *DEZ: +& ;&","*& '$! 85:<< $! 4<:<<9
<
ANLISE DE TTICAS ARQUITETURAIS NA MELHORIA DO DESEMPENHO DE APLICAES JAVA EE: ESTUDO SOBRE UM SISTEMA DE E-COMMERCE
BANCA E=AMINADORA
Dedi o este traba!;o a min;a esposa @erAni a e min;a me %ita' mu!;eres essen iais em min;a /ida e fonte de toda min;a inspirao e amor(
AGRADECIMENTOS
&gradeo primeiramente a Deus por todo seu amor( &gradeo aos meus pais %ita e &pr.gio C in memoriaD pe!o amor' orientao e dedi ao( &gradeo min;a esposa @erAni a pe!o amor' pa i-n ia e apoio in ondi iona! em todos os momentos( &gradeo meus irmos Eri/a!do' Eue deu di as /a!iosas e aFudou on eitos de estat.sti a e &na' Eue re/isou esse traba!;o om tanto ze!o( &gradeo meu amigo Diego pe!a aFuda na re/iso do abstra t( &gradeo min;a prima %i!/a Eue orientou e indi ou Gtimos materiais re!ati/os metodo!ogia de pesEuisa( &gradeo meus amigos $saias' Hta!o' 2apo!eana' Bereni e' @aneide e meus primos *usta/o' Bruno e +uanna pe!a presteza e aFuda forne endo seus omputadores para os e,perimentos( "ao tambIm um agrade imento espe ia! ao Prof( &!iandro +ima' oordenador do urso e orientador' Eue tanto se esforou no de orrer do urso e se mostrou a!tamente Iti o( &!Im do mais' dire ionou esse estudo om toda seriedade e pa i-n ia de um bom mestre( om os
759=&' Joo Pau!o +opes( ANLISE DE TTICAS ARQUITETURAIS NA MELHORIA DO DESEMPENHO DE APLICAES JAVA EE: ESTUDO DE CASO DE UM SISTEMA DE E-COMMERCE? 2011 K 102p( Monografia Curso de Espe ia!izao Lato Sensu em Desen/o!/imento 0eb( "a u!dade iDE=(
RESUMO 5 obFeti/o deste estudo foi ana!isar o impa to no desempen;o e na es a!abi!idade de sistemas desen/o!/idos arEuiteturais de om a p!ataforma Ja/a EE' Euando ap!i adas diferentes tLti as on orr-n ia no a esso ao ban o de dados e a ;e de ontro!e de
entidades( Para atingir esse obFeti/o' fezKse uma re/iso dos prin ipais on eitos re!ati/os arEuitetura de softMare' medio de desempen;o' prob!emas mais omuns de degradao de desempen;o e suas poss./eis so!uNes' asssim omo as ara ter.sti as e te no!ogias Eue ompNem o Ja/a EE B( %ea!izouKse tambIm uma anL!ise emp.ri a atra/Is de um sistema de eK ommer e' em Eue se mediu tempo de resposta mIdio' o /a!or da !in;a de O0P e a sua /azo( 5s resu!tados mostraram Eue o ontro!e de on orr-n ia pessimista apresentou peEuena /antagem em um enLrio de pou a on orr-n ia enEuanto o otimista foi me!;or Euando sob forte on orr-n ia( & tI ni a de in/a!idao do a ;e de entidades mostrouKse me!;or Eue a atua!izaoQrep!i ao(
>
759=&' Joo Pau!o +opes( ANLISE DE TTICAS ARQUITETURAIS NA MELHORIA DO DESEMPENHO DE APLICAES JAVA EE: ESTUDO DE CASO DE UM SISTEMA DE E-COMMERCE? 2011 K 102p( Monografia Curso de Espe ia!izao Lato Sensu em Desen/o!/imento 0eb( "a u!dade iDE=(
ABSTRACT #;e aim of t;is studS Mas to ana!Sze t;e impa t on performan e and s a!abi!itS of t;e sSstems de/e!oped Mit; t;e Ja/a EE p!atform t;roug; app!Sing different ta ti s ar ;ite tura! of on urren S ontro! a ess to t;e database and a ;e entities( #o a ;ie/e t;is goa!' Me did a re/ieM of t;e main measurement' t;e most on epts re!ated to softMare ar ;ite ture' performan e ommon prob!ems of performan e degradation and possib!e
so!utions' as goes !iTe features and te ;no!ogies t;at maTe up t;e Ja/a EE B( 0e a!so ondu ted an ana!Ssis t;roug; an empiri a!!S eK ommer e sSstem' in M;i ; measured a/erage response time' t;e roM /a!ue of O0P and its f!oM rate( #;e resu!ts s;oMed t;at t;e pessimisti on urren S ontro! s;oMed a s!ig;t ad/antage in a s enario of !oM ompetition ompetition( #;e te ;niEue of a ;e M;i!e t;e optimist Mas best M;en under strong
&P$(((((Application Programming Interface EJB((((Enterprise Javabean EJB8+ Enterprise JavaBeans Query Language )#M+( HyperTe t !ar"up Language )##P((HyperTe t Transfer Protocol J&&7( (Java Aut#entication an$ Aut#ori%ation Service JDBC((Java &atabase Connectivity JM7((((Java !essage Service J2D$(((Java 'aming an$ &irectory Interface JP&((((Java Persistence API JP8+( (Java Persistence Query Language J7"(((((Java Server (aces J7%((((Java Specification )e*uest J#&(((((Java Transaction API J@M((((Java +irtual !ac#ine MDB(((!essage,&riven Beans 5%M(((-b.ect,)elation !apping P5J5( Pain -l$ Java -b.ects 78+((((Structure$ Query Language UM+((((E tensible !ar"up Language
10
LISTA DE FIGURAS
F*@0"$ 8? A"E0*-e-0"$ J$ $ EE???????????????????????????????????????????????????????????????????????????????????44 F*@0"$ 4? EBe/(#& 'e /$(e$/e+-& &%Fe-&-"e#$.*&+$#?????????????????????????????????????????????45 F*@0"$ 3? I+-e"$AG& e+-"e & .&+-eB-& 'e (e"!*!-H+.*$: & e+-*-2 /$+$@e" e & %$+.& ???????????46 F*@0"$ 5? EBe/(#& 'e #&.I &-*/*!-$??????????????????????????????????????????????????????????????????????????4J F*@0"$ 6? EBe/(#& 'e #&.I (e!!*/*!-$?????????????????????????????????????????????????????????????????????4K F*@0"$ L? EBe/(#& 'e /M-&'&! E0e "e$#*N$/ L&.I?????????????????????????????????????????????????4K F*@0"$ 7? EBe/(#& 'e EJB S-$-e#e!!????????????????????????????????????????????????????????????????????????34 F*@0"$ J? C*.#& 'e *'$ 'e 0/ S-$-e#e!!???????????????????????????????????????????????????????????????????34 F*@0"$ K? C*.#& 'e *'$ 'e 0/ S-$-e)0#?????????????????????????????????????????????????????????????????????33 F*@0"$ 8<? EBe/(#& 'e EJB S-$-e)0#?????????????????????????????????????????????????????????????????????????35 F*@0"$ 88? C*.#& 'e *'$ 'e 0/ MDB????????????????????????????????????????????????????????????????????????36 F*@0"$ 84? EBe/(#& 'e MDB??????????????????????????????????????????????????????????????????????????????????????36 F*@0"$ 83? De/$".$AG& '$ -"$+!$AG& (e#& .&+-$*+e"??????????????????????????????????????????????37 F*@0"$ 85? EBe/(#& 'e @e"e+.*$/e+-& 'e -"$+!$AG& (e#& .&+-$*+e"?????????????????????3J F*@0"$ 86? EBe/(#& 'e -"$+!$AG& @e"e+.*$'$ (e#& %e$+????????????????????????????????????????3K F*@0"$ 8L? TO(*.& .e+,"*& 'e !e@0"$+A$???????????????????????????????????????????????????????????????????3K F*@0"$ 87? C*.#& 'e *'$ JSF?????????????????????????????????????????????????????????????????????????????????????54 F*@0"$ 8J? E!-"0-0"$ 'e 'e(#&2/e+- '*!-"*%0O'$??????????????????????????????????????????????????????68 F*@0"$ 8K? E!-"0-0"$ 'e 'e(#&2/e+- .&-$#&.$'$??????????????????????????????????????????????????????68
11
F*@0"$ 4<? EBe/(#& 'e ($@*+$AG&????????????????????????????????????????????????????????????????????????????63 F*@0"$ 48? C$/$'$! 'e .$.;e e/ JPA?????????????????????????????????????????????????????????????????????66 F*@0"$ 44? P"&.e!!& 'e "e(#*.$AG& 'e !e!!G&?????????????????????????????????????????????????????????67 F*@0"$ 43? G"$+0#$"*'$'e '$ "e(#*.$AG&???????????????????????????????????????????????????????????????????L< F*@0"$ 45? P,@*+$ *+*.*$# - #* "$"*$ *DeN?????????????????????????????????????????????????????????????????????L5 F*@0"$ 46? D*$@"$/$ 'e .#$!!e! P #* "$"*$ *DeN????????????????????????????????????????????????????????L6 F*@0"$ 4L? D*$@"$/$ 'e */(#$+-$AG& - .#0!-e" .&/ 5 +Q!???????????????????????????????????????LL F*@0"$ 47? D*$@"$/$ 'e e!-$'&! P )*+$#*N$" .&/("$- #* "$"*$ *DeN??????????????????????????L7 F*@0"$ 4J? D*$@"$/$ 'e e!-$'&! P .&+!0#-$" e $#-e"$" .$.;e 'e e+-*'$'e!- #* "$"*$ *DeN????LK F*@0"$ 4K? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ &-*/*!-$ - CMA=? ?74 F*@0"$ 3<? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ (e!!*/*!-$ - CMA= ???????????74 F*@0"$ 38? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ &-*/*!-$ - CMED? ?74 F*@0"$ 34? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ (e!!*/*!-$ - CMED ???????????74 F*@0"$ 33? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ &-*/*!-$ - CMIN????74 F*@0"$ 35? Re!0#-$'& !*/(#*)*.$'& - .&+-"&#e 'e .&+.&""H+.*$ (e!!*/*!-$ - CMIN ???????????73 F*@0"$ 36? Re!0#-$'& '&! -e!-e! *+ $#*'$.$& '& .$.;e??????????????????????????????????????????76 F*@0"$ 3L? Re!0#-$'& '&! -e!-e! "e(#*.$.$& '& .$.;e????????????????????????????????????????????7L
12
LISTA DE GRFICOS
G",)*.& 8? C&/($"$-* & - .&+-"&#e 'e .&+.&""H+.*$ P CMA= P "eE0*!*ARe! POST>C&+)*"/$"Pe'*'&?B;-/#???????????????????????????????????????????????????????????????????????????????????????????73 G",)*.& 4? C&/($"$-* & - .&+-"&#e 'e .&+.&""H+.*$ P CMIN P "eE0*!*ARe! POST>C&+)*"/$"Pe'*'&?B;-/#???????????????????????????????????????????????????????????????????????????????????????????75 G",)*.& 3? C&/($"$-* & - .&+-"&#e 'e .&+.&""H+.*$ P CMED P "eE0*!*ARe! POST>C&+)*"/$"Pe'*'&?B;-/#???????????????????????????????????????????????????????????????????????????????????????????76 G",)*.& 5? C&/($"$-* & - .$.;e 'e e+-*'$'e! - UAC???????????????????????????????????????????????7L G",)*.& 6? C&/($"$-* & '$ $NG& e+-"e *+ $#*'$AG& e "e(#*.$AG&??????????????????????????77
11
LISTA DE TABELAS
1<
LISTA DE QUADROS
1?
SUMRIO
INTRODUO???????????????????????????????????????????????????????????????????????????????????????????????????????????? 87
1(1 Estrutura do traba!;o(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 1>
4 ESCALABILIDADE E DESEMPENHO?????????????????????????????????????????????????????????????????????53
2(1 Con eitos(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( <1 2(2 MItri as(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( << 2(1 &nL!ise de desempen;o(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( <<
3 ARQUITETURA DE SOFWARE???????????????????????????????????????????????????????????????????????????????5J
1(1 Esti!os arEuiteturais((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( <> 1(2 PadrNes arEuiteturias(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( <O 1(1 &rEuitetura e Eua!idade((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( <O
L RESULTADOS?????????????????????????????????????????????????????????????????????????????????????????????????????????78
B(1 Contro!e de on orr-n ia(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( J1 B(2 Ca ;e de entidades(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( J?
CONCLUSO?????????????????????????????????????????????????????????????????????????????????????????????????????????????7J REFERTNCIAS?????????????????????????????????????????????????????????????????????????????????????????????????????????? J< APTNDICE A - CQ'*@& )&+-e ($"$ & .&+-"&#e 'e .&+.&""H+.*$??????????????????????????????J3 APTNDICE B - CQ'*@& )&+-e ($"$ & .$.;e??????????????????????????????????????????????????????????????K3
1J
INTRODUO
& Meb I um ambiente ada /ez mais sedimentado no mundo( &!gumas pesEuisas' dentre as Euais 2$C(B% C2010D e Porta! %JC2010D' mostram Eue o brasi!eiro tem mais a esso internet e a uti!iza om mais -nfase a ada ano( &!Im do mais' segundo EKBit Empresa C2011' p(2BD' empresa espe ia!izada em pesEuisa do omIr io e!etrAni o' o omIr io e!etrAni o no Brasi! apresentou faturamento de %V 1<'> bi!;Nes em 2010 e a pre/iso para 2011 I de %V 1>'J bi!;Nes( Contudo' esse faturamento de 2010 representa apenas 0'<0P do P$B CProduto $nterno BrunoD' Eue foi %V 1'BJ? tri!;Nes em 2010' segundo dados do $B*E' o Eue demonstra um grande poten ia! de res imento( 5utrossim' a Meb brasi!eira no I usada apenas para /endas' e!a I muito usada para a essar ser/ios go/ernamentais' tais omo pre/id-n ia' portais de ompras dos go/ernos e ser/ios e!eitorais' dentre outros( Considerando Eue a Meb I ada /ez mais usada omo p!ataforma para ap!i aNes dos mais di/ersos tipos e o nWmero de usuLrios res e a ada ano' a ne essidade dessas ap!i aNes es a!arem en ontra resist-n ia em aspe tos a serem tratados nesse traba!;o' omo on orr-n ia' uso e, essi/o do ban o de dados' geren iamento das informaNes dos usuLrios Eue esto usando a ap!i ao' et ( Dessa forma' pretendeKse ana!isar ap!i ao de tLti as arEuiteturais de cac#e de entidades do ban o e o omo a ontro!e de
on orr-n ia no a esso ao ban o podem me!;orar estes reEuisitos tendo omo obFeto de estudo a p!ataforma Ja/a EE( @isto Eue eK ommer e I a!go Eue res e bastante' uti!izouKse um sistema neste esti!o para rea!izar a referida anL!ise( Em resumo' bus aKse responder a seguinte Euesto6 X(8ua! seria o impa to no desempen;o e na es a!abi!idade de um sistema orporati/o Meb Euando uti!izadas as tLti as arEuiteturais de entidades do ban oY & re!e/Zn ia deste traba!;o estL no fato de ser/ir omo embasamento e orientao para arEuitetos e proFetistas de sistemas Meb' de modo Eue e!es possam es o!;er as arEuiteturas Eue sero ap!i adas nos seus proFetos amparados em mediNes sistemLti as e e,peri-n ias formais de a!gumas tLti as usadas para me!;orar o desempen;o e a es a!abi!idade de ap!i aNes Meb de grande porte( E a!Im do mais' faz uma e,tensa pesEuisa sobre os on eitos en/o!/idos em arEuitetura de softMare' medio de desempen;o' dos prob!emas mais omuns de degradao de desempen;o e suas poss./eis so!uNes e das ara ter.sti as e te no!ogias Eue ompNem o Ja/a EE B( ontro!e de on orr-n ia e cac#e de
1>
5 obFeti/o gera! desse traba!;o I ana!isar o impa to da ap!i ao das tLti as arEuiteturais de ontro!e de on orr-n ia e cac#e de entidades no desempen;o e na es a!abi!idade de sistemas orporati/os Meb desen/o!/idos om a p!ataforma Ja/a EE( E os obFeti/os espe .fi os so6 %e/isar os prin ipais on eitos !igados p!ataforma Ja/a EE B' a anL!ise de desempen;o' a arEuitetura de softMare e as tLti as Eue me!;oram o desempen;o de sistemas MebR %ea!izar mediNes de desempen;o' onde sero usadas omo mItri as o
tempo de resposta e a /azo Ct#roug#putD' de um sistema de eK ommer eR &na!isar o resu!tado dessas mediNes para ada tLti a arEuitetura!6 CiD cac#e de entidades do ban o' no Eua! se ana!isarL as tI ni as de oer-n ia K in/a!idao e atua!izaoR e CiiD ontro!e de on orr-n ia no a esso ao ban o de dados' onde se /erifi arL os tipos de ontro!e de on orr-n ia otimista e pessimistaR Para atingir os obFeti/os propostos uti!izaKse' e,p!oratGria e e,perimenta!( $ni ia!mente serL rea!izado !e/antamento bib!iogrLfi o /isando tornar o prob!ema mais e,p!. ito' onde se re!a ionam os prin ipais sistemas Meb( Em seguida serL desen/o!/ido um sistema Meb de omIr io e!etrAni o' se!e ionado de/ido a sua importZn ia e e/id-n ia omentadas anteriormente( Este serL obFeto de estudo em uma e,peri-n ia onde se pretende ana!isar seu desempen;o Euando ap!i adas as tLti as arEuiteturais em te!a( 5 sistema Meb de omer io e!etrAni o serL ;amado de !i/raria iDE= e' a partir de!e' sero rea!izadas mediNes e o!etadas informaNes Eue ser/iro de base para responder a prob!emLti a formu!ada( on eitos sobre Ja/a EE B' anL!ise de desempen;o' arEuitetura de softMare e tLti as Eue podem me!;orar o desempen;o de omo metodo!ogia' uma pesEuisa
1O
5 Cap.tu!o 1 omenta sobre os on eitos re!a ionados arEuitetura de softMare e Eua!idade( 5 Cap.tu!o < dis ute as prin ipais tLti as para me!;orar o desempen;oQes a!abi!idade de sistemas Meb( 5 Cap.tu!o ? des re/e o enLrio estudado e omo serL rea!izado o e,perimento' as mediNes e o!eta de dados( 5 Cap.tu!o B onso!ida os resu!tados obtidos durante as mediNes de desempen;o no enLrio sob estudo( &o fina! sero apresentadas as on !usNes e sugestNes para traba!;os futuros(
20
2011a' p(1?D 7egundo 5ra !e C2011b' p( 1<D' a p!ataforma Java Enterprise E$ition CJa/a EED I onstru.da no topo da p!ataforma Java Stan$art E$ition CJa/a 7ED e pro/- uma interfa e de programao K Application Programming Interface C&P$D e um ambiente em tempo de e,e uo para desen/o!/er e e,e utar ap!i aNes de !argaKes a!a' mu!ti amadas' es a!L/eis' onfiL/eis e seguras( JL *ona!/es C2010' p( <D obser/a Eue Ja/a EE I um onFunto de espe ifi aNes /o!tadas para atender as ne essidades de ap!i aNes orporati/as( Ja/a EE surgiu em 1OOO Euando ainda se ;ama/a J2EE' naEue!a Ipo a foi !aada sua /erso 1(2 Eue possu.a 10 Java Specification )e*uest CJ7%D' Eue so as des riNes das espe ifi aNes propostas ou finais para a p!ataforma Ja/a dis utidas pe!a omunidade de desen/o!/edores e apoiadores da p!ataforma( &tua!mente' sua denominao mudou para Ja/a EE e estL na /erso B' Eue foi !aada em 200O e possui 11 espe ifi aNes( 2a #abe!a 1 abai,o foram e!en adas a!gumas dessas espe ifi aNes' suas /ersNes e o endereo e!etrAni o para sua onsu!ta(
21
URL http://jcp.org/e /jsr/!etai"#i!$316 http://jcp.org/e /jsr/!etai"#i!$))* http://jcp.org/e /jsr/!etai"#i!$10, http://jcp.org/e /jsr/!etai"#i!$31* http://jcp.org/e /jsr/!etai"#i!$31. http://jcp.org/e /jsr/!etai"#i!$310 http://jcp.org/e /jsr/!etai"#i!$312 http://jcp.org/e /jsr/!etai"#i!$,02
Java Transaction API CJ#&D6 esse ser/io ofere e uma &P$ para demar ao dos !imites das transaNesR
Java Persistence API CJP&D6 ser/io responsL/e! para persist-n ia em Ja/a e in !ui um padro para mapeamento obFetoKre!a iona! e tambIm o Java Persistence Query Language CJP8+D' Eue I usado para onsu!tar obFetos no ban o de dadosR
ampos de
Java !essage Service CJM7D6 permite a omuni ao ass.n rona atra/Is do uso de mensagensR
Java 'aming an$ &irectory Interface CJ2D$D6 possibi!ita o a esso a ser/ios de nomes e diretGriosR
22
Java Aut#entication an$ Aut#ori%ation Service CJ&&7D6 disponibi!iza ser/io de autenti ao e autorizao baseado em papIisR
/eb services6 possibi!ita suporte a 0eb services atra/Is de 75&P e %E7#R &epen$ency in.ection6 /iabi!iza a inFeo de re ursos' tais omo JM7' unidades de persist-n ia' EJBs' em omponentes geren iados pe!o container1
& espe ifi ao Ja/a EE B' J7% 11B' 7un Mi rosSstems C200Oa' p( ?KBD' ao dis utir a er a da arEuitetura Ja/a EE B' faz refer-n ia "igura 1 para mostrar os re!a ionamentos entre os e!ementos !Ggi os da arEuitetura( 5s containers so representados por retZngu!os' os omponentes esto presentes na metade superior desse retZngu!o e os ser/ios esto na parte inferior(
Figura 1. Arquitetura Java EE
7egundo 7un Mi rosSstems C200Oa' p( ?KBD' um produto Ja/a EE t.pi o possui um ontainer para ada tipo de omponente da ap!i ao6 CiD ontainer da ap!i ao !iente' in !ui um onFunto de bib!iote as e arEui/os ne essLrios para pro/er inFeo de depend-n ia' segurana e outros ser/ios para ap!i aNes Ja/a 7ER CiiD ontainer app!et' so pro/idos pe!a maioria dos bro0sers para e,e utar omponentes appletR CiiiD ontainer Meb' forne em ser/ios para geren iar e e,e utar omponentes Meb C servlets' Fsp' Fsf' fi!tros' EJB Lite e 0eb servicesDR e Ci/D ontainer Enterprise Javabean CEJBD' I responsL/e! pe!o geren iamento da e,e uo de omponentes Enterprise JavaBeans' isto I' e!e ria
21
respe ti/as tabe!as de um ban o de dados re!a iona! e omo rea!izar onsu!tas sobre esses
$ni ia!mente' abe obser/ar Eue JP& assim omo as outras te no!ogias Ja/a EE B' uti!iza o on eito de onfigurao por e, eo' ou seFa' no aso do mapeamento de um obFeto para uma tabe!a sero ne essLrios ser e,p!i itados apenas os atributos Eue possuem nome di/erso da o!una da tabe!a no ban o' pois a regra padro I mapear o nome da tabe!a omo nome da !asse e os nomes das o!unas no ban o omo nomes dos atributos( Para *ona!/es C2010' p( <BD' esse mapeamento I rea!izado atra/Is do uso de metadados Eue podem ser de duas formas6 anotaNes6 onde uma entidade I mar ada .ava 1persistenceR des ritores UM+6 no Eua! o mapeamento I feito em um arEui/o UM+ e,terno Eue serL distribu.do Funtamente om as entidadesR 8?3?8?4 E+-*'$'e!: C&+-eB-& 'e Pe"!*!-H+.*$: Entity Manager e Entity Manager Factory Entidade I uma !asse Fa/a simp!es Eue representa a!gum on eito do dom.nio do negG io e serL mapeada para uma ou mais tabe!as no ban o de dados( 9ma entidade de/e ser anotada om a anotao @Entity ou ser des rita no arEui/o UM+ omo entidade( 9ti!izando o e,emp!o da "igura 2' podeKse notar Eue a !asse Editora possui a!gumas anotaNes 5Entity4 5Table45'ame$Queries4 5I$ e 5Column Eue mapeamento para a tabe!a e suas o!unas( onfiguram o om anotaNes do pa ote
2?
Entity !anager I uma interfa e Eue I imp!ementada pe!o pro/edor de persist-n ia e geren ia o estado e o i !o de /ida de entidades em um onte,to de persist-n ia( Por sua /ez' onte,to de persist-n ia I um onFunto de instZn ias de entidades geren iadas por um entity manager em um dado momento( & Erro6 5rigem da refer-n ia no en ontrada i!ustra a interao entre o onte,to de persist-n ia' o entity manager' a entidade Editora e o ban o de dados( 2essa figura e,istem dois onte,tos de persist-n ia' sendo Eue ada um de!es possui um entity manager( Esses W!timos geren iam as entidades Editoras Eue esto mapeadas em uma tabe!a no ban o( &!Im do mais' em um onte,to de persist-n ia sG pode e,istir uma entidade geren iada om o mesmo identifi ador(
Figura 3. $!tera%o e!tre o co!texto e persist&!cia' o e!tit( ma!ager e o ba!co
De a ordo om *ona!/es C2010' p( 12JD' o entity manager responde pe!a riao' onsu!ta' a!terao e e, !uso de entidades( 5utrossim' e!e tambIm pode rea!izar b!oEueios Cloc"D sobre as entidades para proteg-K!as ontra a esso on orrente( Esses b!oEueios podem usar tanto o mItodo otimista Euanto o pessimista' Eue sero deta!;ados posteriormente( 9m e,emp!o desse tipo de a esso tabe!a editora( on orrente pode ser obser/ado na "igura 1' no Eua! e,istem duas entidades CEditora 1D Eue referen iam o mesmo registro da
2B
Para ^eit; e 7 ;in ario! C200O' p( 2234 entity manager factory I um omponente Eue ria e disponibi!iza entity manager' ou seFa' di/ersos entity manager podem omparti!;ar o mesmo entity manager factory1 8?3?8?3 J$ $ Pe"!*!-e+.e Q0e"2 L$+@0$@e P JPQL JP8+ I uma !inguagem de onsu!ta sobre entidades persistentes Eue independe do ban o de dados( E!a su edeu a !inguagem EJB8+ e possui sinta,e seme!;ante ao 78+( Contudo' enEuanto 78+ traba!;a sobre o!unas e tabe!as o JP8+ se re!a iona om obFetos e atributos( 2a Gti a de ^eit; e 7 ;in ario! C200O' p( 20>D' as *uerys so ategorizadas em Euatro tipos6 Select' so onsu!tas Eue re uperam o estado persistente de uma ou mais entidades' podendo fi!trar os resu!tadosR Aggregate' so uma /ariao do tipo select Eue agrupam os resu!tados e produzem sumLriosR 6p$a$e' so usados para modifi ao De!ete' para remo/er uma ou mais entidades( @erifi amKse /Lrios e,emp!os desse tipo de onsu!ta na "igura 2( 9m de!es' a onsu!ta [SELECT e ()-! E$itora e /HE)E e1co$E$itora 7 8co$E$itora9 ' por e,emp!o' bus a re uperar as entidades Editoras Eue possuem um odEditora espe .fi o( 8?3?8?5 T"$+!$ARe! #ransao I um onFunto de tarefas Eue de/em ser e,e utadas de forma atAmi a( &!Im do mais' de a ordo om E!masri e 2a/at;e C200?' p( <K?D' transaNes de/em garantir os prin .pios &C$D6 CiD atomi idade' define transao omo sendo uma unidade atAmi a' ou seFa' e!a serL e,e utada por omp!eto ou no o orrerLR CiiD onsist-n ia' determina Eue o ban o de/e passar de um estado onsistente para outroR CiiiD iso!amento' informa Eue a e,e uo de uma transao no de/e sofrer interfer-n ia de nen;uma outra Eue esteFa sendo e,e utada on omitantementeR e Ci/D durabi!idade' orienta Eue as modifi aNes pro/o adas por uma transao efeti/ada no de/em ser perdidas em aso de fa!;a( #ransaNes no atua!izadas ou onte,to de JP& definem o momento em Eue entidades no/as' sero sin ronizadas om o ban o de dados( ondi iona! e
e, !u.das
C^E$#)R7C)$2C&%$5+' 200O' p( 11>D E,istem dois tipos de geren iamento de transaNes suportados pe!o JP&6 transao om re ursos !o ais e transao J#&( EnEuanto o primeiro tipo usa transaNes nati/as do JDBC' o segundo I geren iado pe!o ser/idor Ja/a EE' o Eua! permite a parti ipao de mW!tip!os re ursos e faz o geren iamento do i !o de /ida da transao( C^E$#)R7C)$2C&%$5+' 200O' p( 11>D
2J
@a!e sa!ientar ainda Eue os entity managers geren iados pe!o ontainer sempre usam transaNes J#&' enEuanto aEue!es geren iados pe!a ap!i ao suportam ambos os tipos( 8?3?8?6 C&+.&""H+.*$ e L&.I & espe ifi ao JP& no define !aramente omo o pro/edor de persist-n ia de/erL uidar do a esso on orrente s entidades( ^eit; e 7 ;in ario! C200O' p( 1<<D tambIm itam esse aspe to da espe ifi ao e a res entam Eue uma entidade no de/eria se tornar geren iada por mais de um !uster' por e,emp!o( 8uando esse tipo de on orr-n ia a onte e se faz ne essLrio usar me anismos de b!oEueio Cloc"D para manter os dados onsistentes( JP& 2(0 disponibi!iza dois tipos de loc"6 o otimista e o pessimista( 5 loc" otimista parte do prin .pio Eue uma transao' Eue irL promo/er mudanas em uma entidade' serL a Wni a a faz-K!o em um determinado momento' e sendo assim' no pre isa b!oEuear a entidade atI o momento de sin ronizar as mudanas om o ban o' Eue norma!mente o orre ao fina! de uma transao( 7omente nesse instante /erifi arKseKL o estado dessa entidade no ban o' a pro ura de mudanas desde o momento da sua !eitura( 7e a!guma outra transao a modifi ou durante esse per.odo' ento a transao serL mar ada omo roll bac" e !anarL uma e, eo -ptimisticLoc"E ception( Para des obrir se uma entidade foi modifi ada I uti!izado um sistema de /erso para ada entidade Eue pode sofrer a esso on orrente( 2esse aso serL in !u.do um ampo /erso na entidade Eue de/erL ser anotado omo @Version( E,emp!ifi aKse a uti!izao do loc" otimista na "igura <( 5nde duas instZn ias da !asse *eren iadorDeEstoEue Cger1 e ger2D interagem om o entity manager para re uperar duas instZn ias da entidade EstoEue' Eue representam o mesmo registro da tabe!a estoEue om ;a/e primLria igua! a 1 e o!una Euantidade om /a!or ini ia! 1( Primeiramente' ger1 obtIm a instZn ia estoEue1 a partir do ban o( Em seguida' ger2 re ebe outra instZn ia estoEue1 e ;ama o seu mItodo retirar9nidade' Eue de rementa uma unidade do estoEue' restando 2 unidades( Posteriormente' ger2 persiste as a!teraNes e faz uma ;amada ao mItodo f!us; da interfa e entity manager Eue sin roniza as mudanas no ban o e in rementa o ampo /erso de estoEue( Por fim' ger1 tambIm so!i ita Eue seFa retirada uma unidade do estoEue e tenta ap!i ar essas mudanas no ban o atra/Is do mItodo f!us;( Contudo' ger1 estL om uma /erso desatua!izada de estoEue e dessa forma pro/o a uma e, eo do tipo 5ptimisti +o TE, eption( onte,to de persist-n ia( Contudo' se isso a onte er I responsabi!idade da ap!i ao tratar essa situao( $sso pode a onte er em um ambiente de
ContrLrio a essa fi!osofia do loc" otimista' o pessimista obt-m um loc" de !onga durao sobre uma entidade antes de ini iar o pro essamento sobre e!a( Esse b!oEueio garante Eue nen;uma outra transao onseguirL a!terar ou e, !uir a entidade enEuanto o seu b!oEueio no for !iberado( & uti!izao do loc" pessimista estL i!ustrada na "igura ?( 2a Eua! duas instZn ias da !asse *eren iadorDeEstoEue Cger1 e ger2D interagem om o entity manager para re uperar duas instZn ias da entidade EstoEue' Eue representam o mesmo registro da tabe!a estoEue om ;a/e primLria igua! a 1 e o!una Euantidade om /a!or ini ia! 1( $ni ia!mente' a instZn ia ger1 obtIm a instZn ia estoEue1 a partir do ban o( 2esse instante foi estabe!e ido um !o T sobre o registro no ban o( & seguir' ger2 re ebe outra instZn ia estoEue1 e ;ama o seu mItodo retirar9nidade' Eue de rementa uma unidade do estoEue' restando 2 unidades( 2a seEu-n ia' ger2 tenta persistir as a!teraNes no ban o( PorIm' ger1 FL possui um b!oEueio sobre esse mesmo registro e dessa forma pro/o a uma e, eo do tipo Pessimisti +o TE, eption(
Esses b!oEueios podem ser uti!izados tanto em n./e! de entity manager omo tambIm de *uery( Em n./e! de entity manager' os seguintes mItodos rea!izam o b!oEueio6 & mItodos( find(Class<E> entidade, Object chavePK,Lock ode!y"e #odo$lo%&eio' @ lock(Object entidade, Lock ode!y"e #odo$lo%&eio'@ refresh(Object entidade, Lock ode!y"e #odo$lo%&eio'R
!asse *eren iadorEstoEueEJB na "igura B e,emp!ifi a a uti!izao desses 2e!a e,istem os mItodos retira8uantidadeEmEstoEue5timista' Eue e retira8uantidadeEmEstoEuePessimista2
retira8uantidadeEmEstoEuePessimista1
rea!izam a mesma tarefa de retirar uma unidade do estoEue( Contudo' o primeiro faz essa tarefa usando o loc" otimista' enEuanto os outros dois uti!izam o pessimista(
Figura 6. Exemplo e m,to os que reali-am .oc*
10
JL para b!oEueio em n./e! de *uery' temKse o mItodo setLock ode(Lock ode!y"e #odo$lo%&eio' Eue onfigura o loc" para determinada *uery( *ona!/es C2010' p( 1B1D enumera os tipos de b!oEueios poss./eis parZmetro Lock ode!y"e6 5P#$M$7#$C6 usa o loc" otimistaR 5P#$M$7#$C]"5%CE]$2C%EME2#6 usa o loc" otimista e fora o in remento da /erso na entidadeR PE77$M$7#$C]%E&D6 usa o loc" pessimista sem a ne essidade de !er os dados no/amente ao fina! da transao para obter o loc"R PE77$M$7#$C]0%$#E6 usa o loc" pessimista e fora a seria!izao entre transaNes na atua!izao de entidadesR PE77$M$7#$C]"5%CE]$2C%EME2#6 usa o loc" pessimista e fora o in remento da /erso da entidadeR 252E6 espe ifi a Eue nen;um tipo de loc" serL usado( onforme o
11
8?3?4 EJB 5%&C+E C2011a' p( 1OJD define Enterprise JavaBeans omo omponentes do !ado ser/idor Eue en apsu!am a !Ggi a de negG io da ap!i ao( Comp!ementando essa definio' %ubinger e BurTe C2010' p( >D informam Eue EJBs destinamKse para ap!i aNes orporati/as distribu.das e *ona!/es C2010' p( 1JOD a res enta Eue e!es uidam das transaNes e da segurana( 5s EJBs e,e utam em um container Eue forne e di/ersos ser/ios para esses omponentes' tais omo geren iamento do i !o de /ida' geren iamento de transaNes' segurana' inFeo de depend-n ia' pooling' suporte a on orr-n ia' et ( E,istem' basi amente' dois tipos de EJBs6 os session beans e os message,$riven beans( CMDBD( 8?3?4?8 Se!!*&+ Be$+! 7o omponentes Eue imp!ementam a !Ggi a de negG io e e,pNem suas interfa es !o a! eQou remota ou omo 0eb services( 5s session beans' por sua /ez' podem ser stateless' stateful ou singleton( 7omente o primeiro tipo de session beans serL deta!;ado nesse traba!;o' pois os demais no sero usados no estudo sobre anL!ise de desempen;o( 5 stateless no mant-m estado da sesso om o !iente entre as ;amadas de seus mItodos( Esses EJBs so ideais para rea!izar tarefas Eue podem ser on !u.das em uma Wni a ;amada de um mItodo( 5utrossim' para ada EJB stateless' o ontainer mantIm um determinado nWmero de instZn ias em um pool na memGria e estas so omparti!;adas entre os !ientes' em momentos distintos( +ogo' esse pool imp!i a Eue para ada reEuisio o container irL repassar a ;amada para Eua!Euer EJB dispon./e! e no ;L garantia Eue uma prG,ima reEuisio serL atendida pe!a mesma instZn ia( 9m e,emp!o de EJB state!ess pode ser /isto na "igura J( 2e!a e,iste um tre ;o do EJB *eren iadorEditorasEJB Eue possui dois mItodos6 C1D adi ionarEditora' Eue in !ui uma no/a Editora no ban oR C2D !istar#odas&sEditoras' Eue retorna uma !ista editoras adastradas( om todas as
i !o de /ida definido
instan iar um EJB e inFetar os re ursos so!i itados e' por fim' serL disparado um e/ento PostConstruct' Euando o bean passa para o estado !et#o$,)ea$y Pool( 2esse ponto e!e estL preparado para atender as reEuisiNes( 8uando essa instZn ia no for mais ne essLria' serL !anado um e/ento Pre&estroy(
Figura 2. 3iclo e vi a e um Stateless
Por outro !ado' o stateful propNeKse a manter as informaNes de estado entre uma interao e outra( 2esse aso ada EJB stateful serL dedi ado a um Wni o !iente( Contudo' Euando muitos !ientes esti/erem a essando o sistema imp!i arL em muitas instZn ias na memGria do ser/idor' o Eue irL !e/LK!o a retirar a!gumas dessas instZn ias da memGria e persistir os seus estados( Esse pro esso re ebe a denominao de passi/ao( Caso
11
a!guma dessas instZn ias passi/adas seFa no/amente uti!izada' serL rea!izado pro edimento in/erso( Esse tipo de EJB I idea! para tarefas Eue possuem di/ersas etapas' as Euais dependem do estado das etapas anteriores( 5 i !o de /ida de um stateful onsiste de di/ersas fases' onforme "igura O( 2o in. io' no e,istem instZn ias do EJB atI a ;egada de uma reEuisio' Euando o container irL instan iar' inFetar os re ursos reEuisitados e !anar o e/ento PostConstru t( 2esse ponto' o EJB estL pronto para atender as reEuisiNes( PorIm' se o bean passar erto tempo inati/o' o container irL passi/LK!o para e onomizar os re ursos atI o !iente no/amente reEuisitLK!o ou atI a onte er um time out' onde' nesse aso' o bean serL destru.do( 5utro f!u,o a!ternati/o seria a onte er uma o e/ento Pre&estroy e o bean serL destru.do(
Figura 4. 3iclo e vi a e um 1tateful
om
@(e#ove enEuanto o bean estL no estado !et#o$,)ea$y( Caso isso a ontea' serL !anado
Como e,emp!o desse tipo de session bean temKse na "igura 10 um tre ;o do EJB stateful Carrin;oCompraEJB( Essa !asse possui o mItodo adi ionar$temCarrin;o Eue in !ui informaNes de um produto no arrin;o de ompras de um usuLrio( EnEuanto a sesso desse usuLrio no e,pirar e!e terL essa informao do arrin;o no EJB stateful1
5 u!timo tipo de session bean I o singleton Eue I instan iado apenas uma Wni a /ez por ontainer e permane e ati/o durante toda a e,e uo da ap!i ao( 8?3?4?4 Me!!$@e-D"* e+ Be$+! 1MDB9 7o omponentes Eue possibi!itam o pro essamento de mensagens assin ronamente pe!a ap!i ao Ja/a EE( PodeKse on !uir tambIm Eue esses atuam omo ou/idores de fi!as ou tGpi os de mensagens Ja/a Message 7er/i e CJM7D( 5s MDBs so in/o ados pe!o container Euando uma no/a mensagem ;ega( Contudo' e!es tambIm podem en/iar mensagens JM7( De a ordo om *ona!/es C2010' p( <01D' os MDBs no imp!ementam interfa es !o ais ou remotas' mas por outro !ado e!es imp!ementam a interfa e Fa/a,(Fms(Message+istener( E!e ainda omenta Eue !ientes no podem in/o ar esse tipo de EJB diretamente( E a!Im do mais' esses omponentes no armazenam estado e podem a essar re ursos geren iados pe!o container como' por e,emp!o' outros EJBs ou one,Nes JDBC( 5 i !o de /ida de um MDB estL des rito na "igura 11( 5nde o container ini ia riando a!gumas instZn ias' sobre as Euais I in/o ado o mItodo anotado om 5PostConstruct e depois passam para o estado rea$y1 2esse estado esto aptas a re eber as mensagens
1?
atra/Is do mItodo on!essage( E por W!timo' antes de serem destru.das' I ;amado o mItodo anotado om 5Pre&estroy(
Figura 11. 3iclo e vi a e um 670
5 tre ;o de Gdigo apresentado na "igura 12 i!ustra um e,emp!o simp!es de um MDB( 2e!e' o EJB PedidoMDB estL onfigurado omo ou/idor do tGpi o [FmsQtopi oPedido\ e Euando um mensagem for en/iada om esse destino' o container in/o arL o mItodo
8?3?4?3 T"$+!$ARe! EJB dL suporte a transaNes de duas formas6 imp!i itamente' atra/Is de demar ao de transaNes de !arati/a' onde as transaNes so geren iadas pe!o ontainer ou e,p!i itamente' atra/Is de demar ao de transaNes programLti a' onde as transaNes so geren iadas pe!o bean' usando Java Transaction API J#&( Essas duas possibi!idades sero deta!;adas a seguir( 2o aso de transao geren iada pe!o container' de!egaKse para o container a
demar ao do in. io e fim de uma transao' onforme i!ustra a "igura 11( Entretanto' o omportamento do pro essamento das transaNes pode ser modifi ado uti!izando atributos
1B
de transao atra/Is de anotaNes ou UM+ $eployment $escriptor( 5s atributos e seus signifi ados esto e!en ados no 8uadro 1( A-"*%0-& %E89$%ED S*@+*)*.$'& Esse I o atributo pa$r:o( E!e define Eue um mItodo de/er ser ;amado om uma transao' porIm se esta no e,istir o container irL riar uma no/a( %E89$%E7]2E0 5 container sempre irL riar uma no/a transao( 7e FL e,istir uma' esta serL suspensa e uma no/a transao serL ini iada' Euando esta for on !u.da' a transao suspensa serL retomada( 79PP5%#7 #ransaNes no so obrigatGrias nesse aso( 7e FL e,istir uma transao esta serL usada( Caso ontrLrio' o mItodo serL e,e utado sem nen;uma transao( Esse I idea! para mItodos sG de !eitura( M&2D%_ 2esse aso' I obrigatGria a e,ist-n ia de uma transao antes de ;amado o mItodo( 7e e!a FL e,istir' serL usada' aso no e,ista' serL !anada uma e, eo java)*ejb*E+$!ransaction(e%&iredE)ce"tion( 25#]79PP5%#ED 2E@E% 7e FL e,istir uma transao' esta serL suspensa' enEuanto o mItodo I e,e utado( Caso no e,ista' nada a onte e( 2o permite o uso de transaNes( 7e FL e,istir uma transao serL !anada uma e, eo java)*ejb*E+$E)ce"tion( Caso e,e uo o orrerL norma!mente sem transao(
8ua ro 1. Atributos as tra!saes -o te: 45678%LVES9 )0109 p. )61')6) :
ontrLrio' a
& espe ifi ao EJB re omenda Eue o Entity!anager' seFa a essado dentro do es opo de uma transao( Por isso' Euando um EJB a essar entidades persistentes de/em ser usado somente os atributos de transaNes %E89$%ED' %E89$%E7]2E0 e M&2D%_( $sso para ertifi ar Eue os a essos ao ban o o orrero sempre em uma transao( PorIm' uma e, eo a essa regra I Euando uti!izado o onte,to de persist-n ia estendido om um e.b stateful( C%9B$2*E%R B9%^E' 2010' p( 2O1K2O2D
9m e,emp!o da uti!izao do geren iamento de transao pe!o container pode ser /isto na "igura 1<( 2esse e,emp!o' a demar ao do ini io e fim da transao I feita pe!o container e ompreende ada mItodo( Entretanto o omportamento da transao I a!terado pe!a in !uso das anotaNes 5TransactionAttribute(
2o aso de o orrer a!gum erro durante a e,e uo das tarefas Eue fazem parte de uma transao' sG serL feito rollbac" da transao Euando ;ou/er onfigurao e,p!. ita para Eue isso a ontea( #oda/ia' se a inteno do desen/o!/edor I uti!izar o geren iamento de transaNes geren iado manua!mente( pe!o 2esse bean' tipo de serL ne essLrio de in !uir transao' a a anotao interfa e @!ransaction ana,e#ent(!ransaction ana,e#ent!y"e*$E-.' no EJB Eue serL geren iado geren iamento java)*transaction*/ser!ransaction serL usada para demar ar as transaNes( 5 geren iamento de transao pe!o bean estL e,emp!ifi ado na "igura 1?' na Eua! as demar aNes de ini io e fim de transaNes so feitas pe!o desen/o!/edor atra/Is da interfa e .ava 1transaction16serTransaction(
8?3?4?5 Se@0"$+A$ *ona!/es C2010' p( 2BOD demonstra na "igura 1B um t.pi o enLrio de segurana em ap!i aNes Ja/a EE(
Figura 16. T9pico ce!:rio e segura!a
2esse enLrio' o usuLrio irL a essar uma interfa e grLfi a' Eue pode ser s0ing ou Meb' a Eua! irL so!i itar suas reden iais Cnome do usuLrio e sua sen;aD e ento pro ederL a sua autenti ao a essando o Java Aut#entication e Aut#ori%ation Service CJ&&7D( 9ma /ez rea!izada a autenti ao' o usuLrio re eberL uma identifi ao ;amada principal e' Euando esse usuLrio tentar a essar um EJB seguro' essa sua principal serL repassada de
<0
forma transparente para o EJB' Eue farL uma /erifi ao se este usuLrio tem permisso para a essar o EJB( Comp!ementando esse entendimento' %ubinger e BurTe C2010' p( 2<1D informam Eue as espe ifi aNes Ja/a EE e EJB forne em um onFunto de ser/ios de segurana Eue podem ser integrados ap!i ao tanto de forma de !arati/a Esses ser/ios in !uem6
&utenti ao6 refereKse ao pro esso de /erifi ar se o usuLrio e,iste no sistema e se suas reden iais forne idas esto orretasR
onsiste em
& segurana de !arati/a define os ritIrios de autorizao atra/Is de anotaNes ou UM+ $eployment $escriptor( Esse pro esso en/o!/e atribuir permissNes para mItodos ou todo o EJB' de !arar papIis e modifi ar a identidade temporariamente( &s anotaNes usadas para isso esto !istadas na 8uadro 2 abai,o( A+&-$AG& `%o!es&!!oMed `Permit&!! `DenS&!! `De !are%o!es `%un&s U!$'$ +& Bean 7im 7im 7im 7im 7im U!$'$ 7im 7im 7im 2o 2o e/ De!."*AG& +ista os papIis Eue tem permisso para e,e utar um mItodo ou o bean inteiro Con ede permisso para Eue todos possam e,e utar um mItodo ou o bean inteiro 2o permite Eue ninguIm possa e,e utar um mItodo ou o bean inteiro Define papIis para /erifi aNes de segurana Muda temporariamente o pape! atribu.do ao usuLrio
8ua ro 2. A!otaes e segura!a -o te: 45678%LVES9 )0109 p. )20:
/M-&'&!
Por outro !ado' a segurana programLti a permite definio de regras de segurana mais deta!;adas' omo por e,emp!o' permissNes espe .fi as para um b!o o de Gdigo dentro de um mItodo( Para isso' se faz ne essLrio onseguir a esso ao E+$Conte)t ou 0essionConte)t' onde se pode e,e utar os mItodos isCaller1n(ole4:' Eue irL /erifi ar se o usuLrio Eue estL a essando o mItodo possui determino pape!' e ,etCallerPrinci"al4:' Eue retorna a interfa e Princi"al om informaNes Eue identifi am o usuLrio(
<1
8?3?3 Se" #e-! 7o !asses Ja/a usadas para estender as fun iona!idades do ser/idor Meb e gerar onteWdo dinami amente( Servlets atendem a reEuisiNes e produzem uma resposta( E!as tipi amente uti!izam o proto o!o )##P' mas podem uti!izar outros( &!Im do mais' todo Servlet de/e imp!ementar a interfa e java)*servlet*0ervlet' Eue define os mItodos do i !o de /ida( 8?3?5 J$ $ Se" e" F$.e! Java Server (aces CJ7"D I um frame0or" de omponentes grLfi os para ap!i aNes Meb( 5ra !e C2011' p( 101D omp!ementa informando Eue J7" onsistem em6 uma &P$ para representao de omponentes e geren iamento do seu estado' tratamento de e/entos' /a!idao do !ado ser/idor' on/erso de dados' na/egao entre pLginas' suporte para interna iona!izao e a essibi!idadeR bib!iote a de tags para adi ionar omponentes a paginas Meb e para one tar omponentes a obFetos do ser/idor( *ona!/es C2010' p( 2J>D informa Eue as prin ipais partes do J7" so6 (aces Servlet6 I o servlet ontro!ador prin ipa! da ap!i ao( E!e re ebe todas as reEuisiNes endereadas ao sistema' faz o de/ido pro essamento e en amin;a tato para gerao da resposta om para um ontro!ador espe .fi oR %enderizadores6 geram a /isua!izao de omponentes grLfi osR Con/ersores6 obFeti/am on/erter as entradas dos usuLrios em formu!Lrios na forma de string para a!gum tipo de dados de Ja/a CByte' Timestamp' et DR @a!idadores6 so responsL/eis pe!a ertifi ao de Eue os /a!ores forne idos pe!o usuLrio so /a!ores permitidosR !anage$ Beans6 so obFetos geren iados pe!o J7" Eue armazenam estado da pLgina' ontro!am o f!u,o de na/egao e tambIm podem in !uir regras de negG iosR PLginas e omponentes6 as pLginas ont-m os itens grLfi os Eue sero onstru.dos
gerados e e,ibidos ao
omo omponentes Eue depois so ompostos para formar as pLginas( &o ;egar uma reEuisio endereada ap!i ao J7"' esta segue um f!u,o de
pro essamento padro definido na espe ifi ao e Eue I ;amado de i !o de /ida J7"' onforme se pode /isua!izar na "igura 1J(
"oram definidas seis fases no referido i !o de /ida' as Euais so deta!;adas abai,o6 )estore vie06 ria ou re arrega a Lr/ore de omponentes em memGria no
ser/idor' representado os omponentes grLfi os da pLginaR Apply )e*uest +alues6 atua!iza os passados pe!o !ienteR Process +ali$ations6 pro essa /a!idaNes e on/ersNes sobre os dadosR 6p$ate !o$el +alues6 depois de on/ertidos e /a!idados os dados' agora e!es so atribu.dos aos obFetos do mode!o Eue foram !igados aos omponentes da pLginaR Invo"e Application6 I nessa fase Eue as aNes ou e/entos in/o ados na pLgina sero pro essadosR )en$er )esponse6 gera a resposta para o !iente' Eue pode ser em Eua!Euer !inguagem de mar ao' tais omo )#M+ ou UM+( Essa fase ainda sa!/a o estado da /iso para possibi!itar sua restaurao em reEuisiNes subseEaentes( ( omponentes da Lr/ore om os dados
<1
4 ESCALABILIDADE E DESEMPENHO
Com sistemas ada /ez mais omp!e,os e !ientes mais e,igentes' a!Im da
g!oba!izao' Eue pro/- uma grande Euantidade de usuLrios aos sistemas atuais' fazKse imperati/o p!aneFar e proFetar as ap!i aNes tendo em /ista os reEuisitos de Eua!idade de ser/io' tais omo desempen;o e es a!abi!idade( Esses' apesar de intimamente !igados' possuem definiNes diferen iadas( & seguir' sero deta!;ados seus on eitos e a!gumas mItri as(
2.1 C&+.e*-&!
4?8?8 De!e/(e+;& 2a !iteratura podem ser en ontradas di/ersas definiNes sobre desempen;o( Bass et al C2001' p( OOD faz uma definio mais amp!a deste termo( Pontua Eue desempen;o se refere a tempo' mais espe ifi amente a Euanto tempo um sistema !e/a para responder Euando um e/ento Cinterrupo' mensagem ou reEuisiNes de usuLriosD o orre( Mais su into' Mar ;ioni C2010' p( OD' informa Eue o termo [performan e\ refereKse rapidez om Eue uma ap!i ao pode ser e,e utada( 2esse traba!;o adotaremos a primeira definio de desempen;o por entender Eue e!a I mais deta!;ada( 2esse reEuisiNes )##P( 4?8?4 E!.$#$%*#*'$'e 7egundo Cade e 7;ei! C2010' p( 20K21D' es a!abi!idade I a apa idade de um sistema' sem nen;uma a!terao' ontinuar atendendo os reEuisitos de Eua!idade' enEuanto a arga aumenta( Esses autores ainda omentam Eue um sistema atinge sua es a!abi!idade mL,ima Euando estL tratando as reEuisiNes de determinado nWmero de usuLrios e no onsegue responder em um tempo a eitL/e!( 2esse sistema para aumentar sua apa idade( JL Mar ;ioni C2010' p( 10K11D define Eue es a!abi!idade se refere apa idade de um sistema' Eue estL re ebendo uma arga res ente' de aumentar o t#roug#put tota! Euando re ursos so adi ionados( & es a!abi!idade pode ser !assifi ada omo6 /erti a! Cscaling upD6 Euando se adi ionam no/os re ursos de ;ardMare para a mesma mLEuina Cpor e,emp!o' in !uiKse mais memGria ou dis oDR ;orizonta! Cscaling outD6 Euando se adi ionam no/as mLEuinas ao sistema' amp!iando a apa idade gera! do sistema( aso' serL ne essLrio adi ionar re ursos ao aso' os e/entos Eue o sistema pre isa responder sero
<<
Cada um desses tipos de es a!abi!idade tem seus pontos fortes e fra os( Mar ;ioni C2010' p( 11D e,p!i a Eue es a!abi!idade /erti a! gera!mente e,ige um gasto maior para ompra de ;ardMare mais poderoso Cpor e,emp!o' sistema ou em sua omprando de ser/idor om mais pro essadores e memGriaD( Contudo' imp!i a em pou a ou nen;uma mudana no Gdigo do onfigurao( Por outro !ado' a ;orizonta! ne essita de menor in/estimento' uma /ez Eue podem ser ompradas mLEuinas mais baratas( 2o entanto' este tipo de es a!abi!idade e,ige um mode!o de programao mais omp!e,o( %eso!/euKse adotar a definio de Mar ;ioni porEue e!a deta!;a o tipo de es a!abi!idade Eue se in/estiga nesse traba!;o6 a es a!abi!idade ;orizonta!(
2.2 MM-"*.$!
Mar ;ioni C2010' p( OK10D omenta Eue o desempen;o I medido' prin ipa!mente' em termos de tempo de resposta e t#roug#put( tempo de resposta6 pode ser entendido omo o tempo Eue um sistema !e/a para rea!izar um tarefa para o usuLrio( Em um sistema Meb' por e,emp!o' o tempo de resposta ompreende desde o momento anterior ao o en/io da reEuisio )##P atI a ;egada da resposta )##P omp!eta' ou seFa' a partir do instante Eue um usuLrio so!i ita a!gum re urso atI a re epo pe!o !iente da resposta gerada pe!o sistemaR t#roug#put6 I a Euantidade de pro essamento rea!izado em um dado per.odo de tempo( & unidade depende do tipo de pro essamento Eue estL sendo rea!izado( Por e,emp!o' no aso de ser/idores Meb' a medida pode ser reEuisiNes )##P por segundo ou Euantidade de bStes pro essadas por segundo' FL no aso de sistemas transa ionais podem ser usadas transaNes por segundo( )aines C200B' p(210K211D a res enta uma outra mItri a' a uti!izao de re ursos( Com essa mItri a podeKse medir Euais os re ursos do sistema esto saturados ou pou o uti!izados' tais omo CP9' memGria' $Q5' pools et ( 2esse traba!;o sero usadas apenas as duas primeiras mItri as' /isto Eue o onsumo de re ursos I a!go espe .fi o de ada ap!i ao e depende da sua onstruo e perfi! de uso(
<?
Baseado na moti/ao da tese de ^oune/ C200?' p( 1D' obser/aKse Eue os sistemas atuais de/em' a!Im de forne er todos os ser/ios e as funNes esperadas fun ionando orretamente' atender as e,pe tati/as de seus usuLrios em termos de desempen;o( &inda de a ordo es a!abi!idade6 estimati/a baseada em intuioR mode!agem de desempen;oR teste de arga( om ^oune/ C200?' p( <D' tr-s diferentes a!ternati/as t-m sido ustoQbenef. io em termos de desempen;o e
4?3?8 E!-*/$-* $ %$!e$'$ e/ *+-0*AG& 2esse aso so feitas estimati/as baseadas em intuiNes' e,peri-n ias passadas'
opiniNes de espe ia!istas e regras a$ #oc( b a opo mais rLpida e barata' mas seus resu!tados no so onfiL/eis e apresentam um a!to ris o( Pode ser usado em proFetos peEuenos e Eue no seFam r.ti os' onde os reEuisitos de Eua!idade no so to r.gidos( 4?3?4 M&'e#$@e/ 'e De!e/(e+;& Menas I C200<' p( 1?D a!erta Eue I mais fL i! garantir desempen;o e es a!abi!idade se e!es forem pensados FL na fase de proFeto do sistema( E!e informa ainda Eue mode!os so genera!izaNes do sistema e dis ute aspe tos de di/ersos mode!os baseados em redes de fi!as' Eue mapeiam o sistema em termos de fi!as inter one tadas' dentre os Euais' itamKse6 MarTo/ mo$elsR single *ueue systemsR single class M@&R *ueue mo$els 0it# multiple classesR *ueuing mo$els 0it# loa$ $epen$ent $evicesR non pro$uct,form *ueuing mo$els( omenta Eue mode!os de desempen;o so usados para omo os re ursos do sistema so usados pe!a arga de
predizer o desempen;o e a es a!abi!idade de um sistema sob estudo( &!Im do mais' o traba!;o e aptura os prin ipais fatores Eue determinam o omportamento do sistema( Comp!ementando os mode!os des ritos anteriormente por Menas I' ^oune/ C200?' p( BD afirma Eue os dois prin ipais tipos de mode!os usados atua!mente so as redes de fi!as e
<B
as redes de Petri esto Lsti as( &pesar da possibi!idade de uti!izao desses mode!os nas fases ini iais do desen/o!/imento' e!es t-m omo pontos negati/os' sua omp!e,idade para mapear os atuais sistemas distribu.dos e o prob!ema de e,p!oso de estados' ou seFa' Euanto mais deta!;es e aspe tos o mode!o tenta mapear' mais estados sero ne essLrios para mode!ar esses aspe tos' portanto e,iste um aumento e,ponen ia! desses estados( Por fim' ressa!taKse Eue mode!agem de desempen;o I um assunto bastante abrangente e omp!e,o e estL a!Im do es opo desse traba!;o( Para mais informaNes !er ^oune/ C200?D e Menas I C200<D( 4?3?3 Te!-e! 'e C$"@$SDe!e/(e+;& )a!i!i C200>' p( B0D define teste de arga omo o pro esso de submeter um
omponente ou o sistema omo um todo a uma determinada arga( E a res enta ainda Eue a!gumas de suas metas in !uem identifi ar garga!os e /erifi ar Euais os pontos pass./eis de me!;oria de desempen;o( & instrumentao dos testes de desempen;o I rea!izada atra/Is de modernas ferramentas' tais omo ferramentas de teste de arga e benc#mar"( 4?3?3?8 Fe""$/e+-$! 'e -e!-e 'e .$"@$ ^oune/ C200?D e,p!i a Eue testes de arga so rea!izados om ferramentas
espe .fi as' as Euais geram uma arga sobre o sistema e medem seu desempen;o( Essas ferramentas podem simu!ar mi!;ares de usuLrios /irtuais' os Euais simu!am o omportamento de usuLrios reais' interagindo om o sistema( EnEuanto o teste I rea!izado' omponentes so monitorados e mItri as so o!etadas( Contudo' ^oune/ C200?D !embra Eue esse teste possui a!guns pontos negati/os6 no pode ser e,e utado nas fases ini iais do desen/o!/imento e' a!Im do mais' e!e I bastante aro' pois para sua rea!izao serL ne essLrio p!aneFamento' tempo e um ambiente fie! ao ambiente de produo( De a ordo om )aines C200B' p( 1OJD' e,istem di/ersas ferramentas' tanto omer iais omo open sour e Eue podem ser usadas para rea!izar o teste de arga6 Mer urS +oad%unner C omer ia!D6
cMMM(mer urS( omQusQprodu tsQperforman eK enterQ!oadrunnerdR X 5pen7#& CgrLtis e open sourceD6 cMMM(opensta(orgdR X &pa ;e JMeter CgrLtis e open sourceD6 c;ttp6QQFaTarta(apa ;e(orgQFmeterd R X #;e *rinder CgrLtis e open sourceD6 c;ttp6QQsour eforge(netQproFe tsQgrinderd R X Pus;#o#est #estMaTer CgrLtis e open sourceD6 cMMM(pus;totest( omd R
<J
5utro teste de arga Eue pode ser feito sem ne essariamente o sistema estar pronto I o benc#mar"( 4?3?3?4 Be+.;/$"I ^oune/ C200?' p( ?D define Eue benc#mar" pode ser ap!i ado para testar diferentes a!ternati/as de ambientes e p!ataformas C #ar$0are e soft0areD no Eua! o sistema serL imp!antado( 5 benc#mar" e,e uta uma arga de traba!;o artifi ia! sobre a p!ataforma Eue estL sendo testada e mede seu desempen;o e a es a!abi!idade( ^oune/ C200?' p( ?D ita ainda Eue' no onte,to de sistemas de omponentes
distribu.dos' foram desen/o!/idos di/ersos benc#mar"s( Contudo' a maioria de!es fa!;ou em atender seus obFeti/os' em /irtude de uma ou mais das seguintes razNes6 argas de traba!;o proFetadas para me!;orar o desempen;o de produtos parti u!aresR argas de traba!;o usadas no so rea!istas o sufi iente e ser/ios importantes no so testados ou so testados de forma insufi ienteR argas usadas possuem garga!os de es a!abi!idade(
<>
3 ARQUITETURA DE SOFWARE
7;aM e *ar!an C1OOB' p(1D omentam Eue medida Eue o taman;o e omp!e,idade de sistemas de softMare aumentam' o proFeto e a espe ifi ao da estrutura gera! do sistema se tornam uma Euesto mais importante Eue a es o!;a de a!goritmos e estruturas de dados de omputao( 5s autores ainda omp!ementam Eue' de forma abstrata' arEuitetura de softMare en/o!/e a des rio de e!ementos Eue ompNem os sistemas' as interaNes entre esses e!ementos' padrNes Eue guiam sua omposio e restriNes sobre esses padrNes( 5utra refer-n ia !Lssi a sobre o assunto I Bass' C!ements e ^azman C2001' p( 21D' Eue define arEuitetura de softMare omo a estrutura ou as estruturas de um sistema' o Eua! ompreende e!ementos de softMare' propriedades e,ternamente /is./eis desses e!ementos e o re!a ionamento entre e!es( Por entender Eue essa W!tima definio I mais gera! reso!/euKse adotLK!a nesse traba!;o( & arEuitetura I a!go e,tremamente importante para o desen/o!/imento de sistemas robustos( Bass' C!ements e ^azman C2001' p( 2BD enumeram tr-s razNes para a importZn ia da arEuitetura de softMare6 CiD omuni ao om os sta"e#ol$ers;4 a arEuitetura representa uma abstrao omum do sistema Eue a maioria dos sta"e#ol$ers pode usar omo base para entendimento mWtuo' nego iaNes e omuni aoR CiiD de isNes ini iais de proFeto' a arEuitetura de softMare manifesta de isNes de proFeto sobre o sistema em estLgios ini ias do desen/o!/imento( Essas de isNes tero um impa to profundo no traba!;o de engen;aria de softMare Eue /em a seguir e tambIm no su esso do sistemaR CiiiD abstraNes transfer./eis de um sistema' a arEuitetura onstitui um mode!o re!ati/amente peEueno e de fL i! entendimento sobre estruturado e omo seus e!ementos traba!;am Funtos( omo o sistema estL
ategoria de sistemas Eue abrange6 CiD um onFunto de omponentes Eue rea!izam a funo Eue I reEuisito do sistemaR CiiD um onFunto de one tores Eue possibi!ita omuni ao e
1
7taTe;o!ders so todos aEue!es interessados no desen/o!/imento do sistema' Eue sero afetados direta ou indiretamente por e!e(
<O
oordenao entre os
omo os
omponentes
podem ser integrados para formar o sistemaR e Ci/D mode!os semZnti os Eue possibi!itam ao proFetista entender as propriedades gerais do sistema( E!e ainda omenta Eue o obFeti/o de um esti!o I estabe!e er uma estrutura para todos os omponentes do sistema( 7o e,emp!os de esti!os arEuiteturais6 pipes an$ filters' mode!o em amadas'
repositGrios e interpretadores( Para mais deta!;es !er Bass' C!ements e ^azman C2001D
?0
?1
aiu de >2P para J1P Euando foram usadas interfa es !o ais( JL em um ambiente de !uster' os gan;os no tempo de resposta foram menores' na fai,a de 11P(
Em seus testes' e!e on !uiu Eue a estrutura oKa!o ada es a!a me!;or e atribui esse gan;o ao menor over#ea$ para rotear ada ;amada de EJB e a menor Euantidade de mensagens para sin ronizar os ser/idores(
?2
uma funo sobre todos os itens de uma o!eo e' ao fina!' retorna uma !ista om os resu!tados desse pro essamento' e o )e$uce' Eue para!e!o' e produz o resu!tado fina!( 5 autor ainda o!eta' agrupa' ordena e faz a!gum omenta Eue e,iste uma ferramenta pro essamento sobre os resu!tados de dois ou mais !aps' Eue foram e,e utados em ;amada Ha$oop<' Eue I um sistema de arEui/os distribu.do open source' mantido pe!o grupo &pa ;e< e Eue imp!ementa o mode!o !ap)e$uce(
on orr-n ia so usadas para assegurar a propriedade da no interfer-n ia ou iso!amento de transaNes Eue so e,e utadas ao mesmo tempo( E,istem di/ersas tI ni as para rea!izarem esse ontro!e' porIm nesse traba!;o sero dis utidas tr-s de!as6 CiD ontro!e pessimista6 nesse aso' as t#rea$sQtransaNes pre isam adEuirir os b!oEueios sobre os dados antes da sua es rita( Essa opo possibi!ita pou a on orr-n ia em /irtude dos b!oEueios( & ;ipGtese tida omo /erdadeira nesse I Eue sempre ;a/erL situao de on orr-n ia e' dessa forma' I pre iso e/itar Eue essa situao o orraR CiiD ontro!e otimista6 E!masri e 2a/at;e C200?' p( <10D informam Eue nessa tI ni a as atua!izaNes so ap!i adas s Gpias !o ais dos dados' Eue so mantidas para ada transao( &o fina! da e,e uo' o orre uma /erifi ao para ertifi ar se essas atua!izaNes podem pro/o ar in onsist-n ia se aso essa in onsist-n ia possa o orrer' ento a transao serL ap!i adas'
abortada' aso ontrLrio' e!as podem ser efeti/adas( @a!e sa!ientar Eue essas Gpias no so mantidas apGs a efeti/ao das transaNes( 2a prLti a' norma!mente e,iste um ampo de /erso para ada re urso Eue pode ser omparti!;ado' Eue I in rementado a ada efeti/ao de transao( Ento' a /erifi ao omentada anteriormente apenas onsu!ta esse ampo e ana!isa se a /erso Eue estL ao fina! da transao I a mesma do re urso omparti!;ado( Essa a!ternati/a' apesar de e!iminar o usto dos loc"s' imp!i a a!to usto de memGria para manter as /Lrias Gpias dos dados( 2esse ontro!e' assumeKse
1
<
?1
Eue raramente ;a/erL situao de on orr-n ia e' se esta o orrer' de/eKse apenas refazer a transaoR CiiiD ontro!e m/ ou mu!tiK/erso6 essa tI ni a I seme!;ante tI ni a otimista
porEue mant-m di/ersas /ersNes dos itens de dados' entretanto' essas /ersNes so mantidas mesmo apGs a efeti/ao das transaNes( Essas /ersNes mais antigas podem ser usadas para a!gumas operaNes de !eitura( Para mais informaNes sobre ontro!e de on orr-n ia mu!tiK/erso !er E!masri e 2a/at;e C200?' p( <2>K<10D( 5?L?4 P$@*+$AG& ^eit; e 7 ;in ario! C200O' p( 1O1D definem paginao omo uma tI ni a Eue apresenta uma o!eo de dados ao usuLrio' sob a forma de uma tabe!a de taman;o fi,o' Eue age omo uma Fane!a des!izante sobre o resu!tado de onsu!tas ao ban o de dados( Comp!ementando' Mar ;ioni C2010' p( 1J0D e,p!i a omo imp!ementar essa tI ni a em JP&( Para isso' de/em ser usados os mItodos set2irst(es<s(' e #a)(es<s(' da !asse 3&ery( Mar ;ioni fez um e,perimento onde onsu!ta/a uma tabe!a om 10(000 registros( 9sando paginao e!e obte/e mu!tip!i ado por Euatro( 5 e,emp!o da "igura 20 mostra a imp!ementao dessa tI ni a em JP&( 5 mItodo listarTo$asAsE$itorasPorPagina retorna uma !ista de editoras !imitada a 20 C/inteD unidades por pLgina(
Figura 25. Exemplo e pagi!a%o
Contudo' ^eit; e 7 ;in ario! C200O' p( 1O<D a!ertam Eue esses mItodos no de/em ser usados em onsu!tas Eue possuem .oins re!a ionados om o!eNes Cone,to,many e many,
?<
podem impossibi!itar o posi ionamento no resu!tado( 5?L?3 N$/e' E0e"2 De a ordo om Mar ;ioni C2010' p( 1J1D' as name$ *uery pro/-em uma me!;oria em termos de desempen;o porEue e!as so prIK ompi!adas pe!o pro/edor de persist-n ia omo parte do $eploy ou durante a fase de ini ia!izao da ap!i ao( Em seus testes' Mar ;ioni on !uiu Eue name$ *uery me!;oram o desempen;o em' apro,imadamente' 10P( E,emp!ifi amKse a definio e uso de name$ *uery na "igura 2 e na "igura 20( 2a primeira figura' a entidade Editora possui Euatro definiNes' dentre e!as e,emp!o' a name$ *uery [Editora(find&!!\ Eue retorna todas as editoras listarTo$asAsE$itorasPorPagina [todas]editoras\( 5?L?5 C$.;e Mar ;ioni C2010' p( 1JBD e,p!i a Eue cac#e representa o estado atua! do ban o de dados em memGria ou no dis o do ser/idor de ap!i ao( Comenta ainda Eue ;L diferentes tipos de cac#e e Eue ada um ser/e a propGsitos distintos( Em JP& e,istem dois n./eis de cac#e' onforme se pode obser/ar na "igura 216 CiD cac#e de primeiro n./e!6 I o cac#e rea!izado pe!o onte,to de persist-n ia Eue I referen iado pe!o entity manager e mant-m refer-n ias para todas as entidades Eue esto geren iadas C^E$#) e 7C)$2C&%$5+' 200O' p( 1B2D( E,istirL apenas uma instZn ia de ada entidade geren iada para uma dada identidade Cid Eue representa a ;a/e primLria da tabe!aD( Esse cac#e e/ita a rea!izao de onsu!tas ao ban o para entidades Eue FL esto geren iadas em memGria( &!Im do mas' esse cac#e I riado Funtamente om o entity manager e o onte,to de persist-n ia' onde as entidades permane em atI Eue seFam e,p!i itamente es/aziadas ou atI a destruio do entity managerR CiiD cac#e de segundo n./e!6 I aEue!e rea!izado pe!o entity manager factory( Esse tambIm I ;amado por a!guns autores C^eit; e 7 ;in ario!' 200O' p( 1B2D de cac#e omparti!;ado' pois os dados das entidades desse cac#e so riados a partir do omparti!;ados por todos os entity manager Eue foram I riada uma *uery a partir da itaKse' omo adastradas no name$ *uery
mesmo entity manager factory4 conforme ilustra a (igura =;( Esse cac#e I riado Funto om o entity manager factory' onde as entidades permane em atI Eue seFam e,p!i itamente es/aziadas ou atI a destruio do entity manager
??
factory1 5utro aspe to re!e/ante desse cac#e I a possibi!idade de a esso distribu.do entre /Lrios membros de um cluster( Contudo' essa distribuio pre isa ser usada om uidado Euando e,istem muitos nGs no cluster4 em funo do over#ea$ de pro essamento e de transporte na rede e,igido para sin ronizar os estados do cac#e de ada nG do cluster(
Figura 21. 3ama as e cac;e em J<A
&na!isando a espe ifi ao JP& em 7un Mi rosSstems C200O ' p( 101D' per ebeKse a orientao de Eue JP& de/e pro/er suporte ao cac#e de segundo n./e!' ontudo e!e de/e ser imp!ementado pe!o pro/edor de persist-n ia( 2as duas prG,imas 7ubseNes serL feita uma dis usso entrada nas so!uNes de cac#e pro/idas pe!o Jboss' pois esse I um dos !.deres no seguimento de ser/idores de ap!i ao' a!Im de ser open source e possuir uma /asta omunidade de o!aboradores( 5?L?5?8 C$.;e 'e e+-*'$'e! b o cac#e Eue /isa manter em memGria as entidades' as Euais so obFetos Eue representam tabe!as do ban o de dados em JP&( 7egundo Mar ;ioni C2010' p( 1>2D' esse cac#e se benefi ia do fato de Eue uma !in;a de tabe!a do ban o' Eue representa o estado de uma entidade' pode ser b!oEueada Cloc"e$D Euando da o orr-n ia de atua!izaNes( Dessa forma' as atua!izaNes do cac#e !e/aro em onta esse b!oEueio' o Eue serL Wti! para garantir a oer-n ia do cac#e entre os nGs do cluster( 5?L?5?4 C$.;e 'e E0e"2! Para Mar ;ioni C2010' p( 1>0D' esse cac#e manipu!a as *uery JP8+Q78+ Eue in !uem tanto os parZmetros omo as entidades en/o!/idas no resultset( Para uti!izar esse tipo de cac#e I ne essLrio6
?B
de !arar
no
arEui/o
de
onfigurao
da
unidade
de
persist-n ia
Cpersisten e(,m! or ;ibernate( fg(,m!D Eue serL uti!izado cac#e de *uery6 <"ro"erty na#e45hibernate*cache*&se6%&ery6cache5 val&e45tr&e57> > espe ifi ar Euais *uerys sero armazenadas em cac#e( 9ti!izaKse a anotao6 @3&ery8int(na#e 4 5or,*hibernate*cacheable5, val&e 4 5tr&e5' ( 5 geren iamento dessa cac#e I feito atra/Is de timestamp para de idir se a *uery em cac#e estL ou no obso!etaR Mar ;ioni C2010' p( 1>2D a!erta ainda Eue esse tipo de cac#e de/e ser usado om bastante uidado( E!e se destina primariamente para dados Eue so sG de !eitura ou Eue raramente so atua!izados(
)./ Cluster
0ang C200>b' p( 1D define cluster omo uma te no!ogia bem estabe!e ida Eue forne e a!ta disponibi!idade e ser/ios es a!L/eis' a!Im de to!erZn ia a fa!;as( 9m cluster onsiste em /Lrios omputadores' ;amados de nGs' inter!igados e agindo omo um todo( Esses nGs di/idem o pro essamento das reEuisiNes( 9m dos prin ipais omponentes de uma so!uo de cluster Meb I um ba!an eador de arga' Eue segundo 0ang C200>b' p( ?D' pode ser imp!ementado em ;ardMare ou em softMare e norma!mente in !uem omo fun iona!idades6 a!goritmos de ba!an eamento de arga6 obFeti/am de idir reEuisiNes dos !ientes entre os omponentes do clusterR ;e agem de disponibi!idade6 /isa des obrir Euando um dos nGs fa!;ou ou estL sobre arregadoR session stic"iness6 Euando o ba!an eador re on;e e e asso ia as sessNes dos usuLrios ao nG do cluster Eue o estL atendendo( 5?7?8 Ge"e+.*$/e+-& 'e !e!!G& e/ $/%*e+-e 'e .#0!-e" 5 geren iamento das sessNes CinformaNes de estado Eue se refere a um Wni o usuLrioD de forma es a!L/e! FL I a!go desafiador em um Wni o ser/idor( Portanto' em ambiente de !uster essa tarefa tem sua omp!e,idade amp!iada imensamente( &s estratIgias mais on;e idas para !idar om essa situao em um !uster so6 afinidade de ser/idores e rep!i ao de sesso( omo distribuir as
?J
5?7?4 A)*+*'$'e 'e !e" *'&" 1Session stickiness9 & estratIgia afinidade de ser/idores fun iona dire ionando todas as reEuisiNes de uma sesso de usuLrio para o mesmo ser/idor membro do cluster( Para 0ang C200?' p( ?D' omo o estado da sesso fi a armazenado na memGria de erta instZn ia do ser/idor' o me!;or !ugar para se!e ionar Eua! ser/idor de/erL atender determinada reEuisio I o ba!an eador de arga( Contudo' 0ang ainda a res enta Eue se uma dessas instZn ias fa!;ar' todos os dados da sesso sero perdidos( Para !idar om esse prob!ema' de/e ser usada a rep!i ao de sesso( 5?7?3 Re(#*.$AG& 'e !e!!G& & rep!i ao de sesso onsiste em manter uma ou mais Gpias dos dados da sesso para Eue outros ser/idores possam tratar a reEuisio de um ser/idor Eue fa!;ou( 7egundo 0ang C200?' p( BD' o pro esso de rep!i ao de sesso a onte e em di/ersas etapas' onforme "igura 226 1. etapas 1' 2 e <6 Euando um usuLrio /isita uma pLgina pe!a primeira /ez' o ser/idor ria um obFeto de sesso e o armazena em a!gum meio de persist-n ia para uso posteriorR 2. etapa 16 depois de riada a sesso' o ser/idor en/ia ao broMser um
identifi ador C$DD atra/Is de coo"ie e' posteriormente' esse id serL en/iado Funtamente om as prG,imas reEuisiNesR 3. etapas ?' B' J e >6 Euando uma fa!;a o orre' o ba!an eador irL dete tar e en/iarL as reEuisiNes seguintes para um outro ser/idor Eue irL re uperar a sesso e assim poderL atender adeEuadamente o usuLrio(
Figura 22. <rocesso e replica%o e sess%o
E,istem di/ersas opNes dispon./eis de rep!i ao( & diferena entre e!as I a forma omo a sesso serL rep!i ada e persistida para posterior uti!izao( 0ang C200?' p( BK10D dis ute essas opNes6
?>
rep!i ao om armazenamento em ban o de dados6 onde os dados da sesso so armazenados em ban o de dados e a ser/idor' e!e irL ada reEuisio Eue ;ega ao onsu!tar o ban o de dados para re uperar os dados da
sesso( Essa opo apresenta o pior desempen;o e es a!abi!idadeR rep!i ao em memGria entre todos os ser/idores6 nesse aso' a sesso fi arL em memGria e serL mantida uma Gpia em ada ser/idor do cluster( Essa possui me!;or desempen;o Eue a anterior' ontudo' ainda e,iste um grande over#ea$ para manter uma Gpia em ada ser/idorR rep!i ao em memGria entre pares Cbu$$y replicationD6 pare ido om a opo anterior' mas om a diferena da sesso de um ser/idor ser armazenada em um par' ou seFa' apenas mais um ser/idor( 9m prIKreEuisito dessa a!ternati/a I uti!izar a afinidade de ser/idor( E,peri-n ias rea!izadas por Mar ;ioni C2010' p( 21?D mostraram Eue a rep!i ao em memGria entre pares possui me!;or desempen;o( & me!;oria no t#roug#put foi de 10P Euando omparado om a opo de rep!i ao entre todos os nGs do cluster( De a ordo om Mar ;ioni C2010' p( 212D' o desempen;o da rep!i ao de sesso pode ser me!;orada Euando so !e/adas em onsiderao a!gumas estratIgias6 sobres re/er o mItodo is odified8 essa opo de/e ser usada Euando os dados da sesso so mantidos em um eFb stateful( 2esse aso' de/e ser imp!ementado o mItodo om a assinatura "&blic boolean is odified('( &ntes de rep!i ar o bean o container /erifi arL se e!e imp!ementa esse mItodo( Em aso positi/o' o container ;ama is odified e' somente se e!e retornar true' a rep!i ao serL rea!izadaR uso de rep!i ao em memGria entre paresR onfigurar Euando serL disparada a rep!i ao e a sua granu!aridade( Essa opo sG se ap!i a Euando a sesso I mantida no HttpSession( 5?7?3?8 Q0$+'& '*!($"$" $ "e(#*.$AG& 5s momentos em Eue sero disparadas as mensagens de rep!i ao de/em ser onfigurados no arEui/o .boss,0eb1 ml( &s opNes poss./eis so6 7E#]&2D]*E#6 nesse aso' a rep!i ao poderL ser disparada mesmo se no o orrer mudana no onteWdo da sesso' basta apenas Eue e!a seFa a essada( & rep!i ao o orrerL se forem usados ambos os mItodos set-ttrib&te e ,et-ttrib&teR
?O
7E#]&2D]252]P%$M$#$@E]*E#6 essa I a opo padro e' seme!;ante aEue!a anterior' irL disparar a rep!i ao Euando for usado o mItodo set-ttrib&te ou o mItodo ,et-ttrib&te' mas' nesse aso' a rep!i ao sG serL efeti/ada se for a essado um obFeto de tipo no primiti/o Ctipos primiti/os in !uem Integer4 Long4 String et DR
Mar ;ioni C2010' p( 220D rea!izou a!guns testes para omparar o desempen;o dessas a!ternati/as e ;egou a on !uso Eue Euando usada a opo 7E# e nen;uma das reEuisiNes ;amar set-ttrib&te o desempen;o serL 1?P me!;or Eue a opo padro( 5?7?3?4 G"$+0#$"*'$'e '$ "e(#*.$AG& & granu!aridade se refere a o Eu- de/e ser rep!i ado' e tambIm de/e ser onfigurado no arEui/o .boss,0eb1 ml( 2esse aso' as opNes i!ustradas na "igura 21 so6 7E77$526 indi a Eue a sesso por inteiro de/e ser rep!i ada Euando Eua!Euer um dos seus atributos for a!terado' ou seFa' a sesso I um onFunto de pares c ;a/e' atributod e' nessa opo' todo o onFunto serL rep!i ado Euando Eua!Euer atributo for modifi ado( Essa I opo padroR &##%$B9#E6 nessa a!ternati/a somente a!guns atributos sero rep!i ados( & es o!;a de Euais sero rep!i ados I baseada no fato de Eue a!guns podero sofrer a!teraNes dentro de um onFunto em Eue a maioria dos atributos no sero a!terados( Para uma sesso Eue possui grandes Euantidades de dados' no Eua! parte desses' raramente serL modifi ada' essa opo diminui sobremaneira a Euantidade de dados Eue sero rep!i adosR "$E+D6 nesse aso' somente a!guns ampos dentro dos obFetos Eue esto na sesso sero rep!i ados( &na!isando a "igura 21' per ebeKse Eue essa opo I ainda mais espe .fi a Eue a anterior e possui grande poten ia! para reduzir o trLfi o de dados rep!i ados( Contudo' para usar essa granu!aridade de/eKse antes preparar a !asse Ja/a para permitir Eue o cac#e dete te Euando o orrer a!terao em ampos dos obFetos CM&%C)$52$' 2010' p( 221D(
7egundo Mar ;ioni C2010' p( 221D' os seus e,perimentos mostram Eue a opo "$E+D possui desempen;o 10P me!;or Eue 7E77$52(
5?7?5 J%&!! C$.;e De a ordo om Mar ;ioni C2010' p( 1J>D' Jboss Cac#e? I um frame0or" Eue pro/- um cac#e em cluster' o Eua! I omp!etamente transa iona! e rep!i ado( b baseado na bib!iote a multicast J*roupsB' Eue trata de toda a infraestrutura de cluster( 5 autor omuni ao entre os nGs do omenta ainda Eue esse frame0or" suporta rep!i ao ou in/a!idao'
Euando o orrer uma atua!izao nos obFetos do cac#e' omuni ao s.n rona ou ass.n rona entre os nGs Eue fazem parte do cac#e distribu.do' e os mItodos otimista e pessimista de ontro!e de on orr-n ia no a esso aos dados omparti!;ados no cac#e distribu.do( 5 JBoss Ca ;e foi uti!izado atI a /erso ? do JBoss( & partir da /erso B e!e foi substitu.do pe!o $nfinispan' Eue serL dis utido na prG,ima 7eo( Para uti!izLK!o' primeiro de/eKse ati/LK!o omo cac#e de segundo n./e! e' em seguida' fazKse ne essLrio definir Euais entidades sero in !u.das no cac#e atra/Is da anotao6 @Cache(&sa,e 4 CacheConc&rrency0trate,y*!(-.0-C!1O.-L, re,ion 4 5re,iao5' ( Mar ;ioni C2010' p( 1>0D informa Eue o atributo CacheConc&rrency0trate,y define omo as entidades sero armazenas e re uperadas do cac#e( Para esse atributo e,istem duas estratIgias6 Transactional6 garante tratamento transa iona! aos dados do cac#e( Essa a!ternati/a pode ser usada para dados Eue so !idos onstantemente e I r.ti a a pre/eno para Eue e!es no se tornem obso!etos em transaNes on orrentes' nos raros asos de atua!izaoR
MMM(Fboss(orgQFboss a ;e MMM(Fgroups(org
B1
)ea$,only6 essa estratIgia de/e ser usada para dados Eue nun a mudam( 7eu desempen;o I me!;or Eue o anterior(
Mar ;ioni C2010' p( 20BD a res enta Eue o Jboss Ca ;e pode ser usado para rep!i ar informao de entidades' sessNes HTTP e stateful session beans atra/Is do !uster( Para otimizar o Jboss Cac#e para ada situao' de a ordo om Mar ;ioni C2010' p( 20BD' fazKse ne essLrio entender omo as atua!izaNes so transmitidas para os membros do cluster' omo e!es iro ref!etir essas a!teraNes e tambIm omo serL tratada a on orr-n ia entre os nGs do cluster( &s atua!izaNes dos dados do cac#e podem ser transmitidas de duas formas6 sin ronamente' onde ada instZn ia do cac#e en/ia suas mudanas para os demais nGs e' antes de retornar' tem Eue aguardar as onfirmaNes de todosR assin ronamente' no Eua! as mudanas so en/iadas e' imediatamente' retorna sem aguardar as a!teraNes foram ap!i adas( 5utro aspe to I a forma omo as mudanas no cac#e so ref!etidas nos demais nGs6 rep!i ao' no Eua! os dados de ada cac#e so rep!i ados para os demais membros( 2esse aso' os ustos CtrLfego de rede' onsumo de memGria e ontro!eD das mensagens de rep!i ao so bastante a!tosR in/a!idao' onde ada membro en/ia uma mensagem apenas informando as ;a/es dos dados Eue esto obso!etos e' nesse aso' o re eptor dessa mensagem de/erL apagar esse dado do seu cac#e e' posteriormente' Euando esse dado for reEuisitado' de/erL re uperLK!o a partir do ban o( E por fim' omo esse cac#e I omparti!;ado por di/ersos nGs do cluster pode o orrer on orr-n ia na a!terao de determinados dados e pro/o ar in onsist-n ias( Para tratar esse prob!ema' o Jboss Ca ;e uti!iza tr-s opNes de tI ni as de ontro!e de on orr-n ia6 CiD otimistaR CiiD pessimistaR e CiiiD m/ 5?7?6 I+)*+*!($+ $nfinispanJ I uma p!ataforma de cac#e distribu.do' open source4 es a!L/e! e Eue apresenta a!ta disponibi!idade( E!e pode e,e utar tanto em modo !o a! Euanto distribu.do( ( onfirmaNes dos outros nGs informando Eue as
MMM(Fboss(orgQinfinispan
B2
"erraro C2010D
omo ser/io de
cac#e distribu.do em cluster a partir da /erso B do JBoss( Dentre as mudanas Eue a onte eram' e!e enumera6 CiD JBoss Ca ;e no serL mais distribu.do Funtamente om o JBossR CiiD o modo [distribuio\ do $nfinispan substitui as funNes do [ bu$$y replication\ do JBoss Ca ;eR CiiiD o pro/edor de cac#e JBoss Ca ;e do )ibernate foi substitu.do pe!o seu eEui/a!ente no $nfinispanR
peEueno' as reEuisiNes iro esperar muito na fi!a para serem pro essadas( Por outro !ado' se o taman;o I muito grande a CP9 irL gastar muito tempo ;a/eando os onte,tos entre as /Lrias t#rea$s( 5 autor deta!;a os passos Eue de/em ser e,e utados para se obter o taman;o Gtimo do poo!( Para mais informaNes /er )aines C200B' p( 1B<K1BBD(
B1
Esse sistema possui uma arEuitetura !Ggi a om tr-s amadas6 CiD Meb' Eue trata da /isua!izao dos dados e da interfa e om a amada de negG iosR CiiD negG ios' a Eua! I responsL/e! pe!as regras de negG iosR e CiiiD integrao' Eue interage dados( Por outro !ado' onforme "igura 2?' a organizao f.si a do sistema em pa otes om o ban o de
apresenta apenas dois pa otes6 Meb e negG iosQintegrao( %eso!/euKse Funtar os pa otes de negG ios e integrao para fa i!itar o desen/o!/imento do sistema( 5 primeiro pa ote foi onstru.do uti!izando omponentes do frame0or" Meb J7" 2(0' ou seFa' omponentes /isuais CpLginas Meb' templates' arEui/os ss e imagensD e manage$ beans om es opo de reEuisio( JL a segunda amada uti!iza tanto a te no!ogia EJB 1(1' onde esto os omponentes stateless session beans Euanto JP& 2(0' onde e,istem as entidades( 5s manage$ beans atuam omo ontro!adores Eue re ebem os dados inseridos nas pLginas' e,e utam os mItodos dos EJBs e de idem Eua! serL a pLgina de resposta( 8uando os mItodos dos EJBs so e,e utados' e!es iro rea!izar a!gum pro essamento e' possi/e!mente' a essar o ban o de dados(
+.2 EB(e"*/e+-&
"oi rea!izado e,perimento no !aboratGrio &KJ da fa u!dade iDE=' onde foi uti!izado um cluster om < nGs( 2esse e,perimento foram uti!izados J omputadores' sendo B noteboo"s 7emp #os;iba 7#$ e 1 noteboo" 7onS @aio one tados atra/Is de um sMit ; Et#ernet 10Q100 Mbps de > portas' mode!o P2K700> do fabri ante Pa ifi 2etMorT( Esses noteboo"s 7emp #os;iba 7#$ possuem o sistema opera iona! 0indoMs J e apresentam a seguinte onfigurao de #ar$0are6 CP9 $2#E+ Pentium EB200 2'11 *)=R P!a a de rede Et;ernet 10Q100R MemGria < *b DD%2R )D 7&#& 2?0 *bR
5 noteboo" @aio possui sistema opera iona! 0indoMs J e apresenta a onfigurao abai,o6 CP9 $2#E+ Core i1 M110 2'11 *)=R P!a a de rede Et;ernet 10Q100Q1000R MemGria < *b DD%2R )D 7&#& $$ 120 *b J200 %pmR
BB
5s softMares usados durante o e,perimento foram6 7er/idor de ap!i ao JBoss B(1R 7er/idor Meb &pa ;e 2(2 om plugin mod]FT para ba!an eamento de argaR 7istema geren iador de ban o de dados MS7E! ?(1(?1R & ferramenta para teste de arga e desempen;o JMetter 2(<(
Esses e!ementos de soft0are e #ar$0are esto organizados segundo a topo!ogia do diagrama de imp!antao mostrado na "igura 2B 2esse diagrama' podeKse /erifi ar a e,ist-n ia de um cluster JBoss om < nGs C01 a 0<D Eue a essam o ser/idor de ban o de dados MS78+ ;ospedado no nG 0?( &s reEuisiNes dos !ientes so distribu.das entres os nGs do cluster pe!o ba!an eador de arga Eue uti!iza o a!goritmo roun$,robin CnG 0BD( Por fim' para simu!ar os usuLrios Eue a essam o sistema sob estudo foi uti!izado o JMetter Eue gerou a arga e onso!idou o re!atGrio ontendo tempo de resposta mIdio e a /azo CnG 0JD(
Figura 26. 7iagrama e impla!ta%o # cluster com ) !?s
Bus andoKse ana!isar as tLti as FL omentadas' foram proFetados asos de uso para simu!ar o omportamento do usuLrio fina! em um enLrio prG,imo do rea! diante da tLti a a ser estudada( Em todos os testes foram uti!izados' para fins de simu!ao' 100 usuLrios a essando o sistema simu!taneamente(
BJ
ontro!e de
aso de uso
onforme "igura 2J( 2esse' o usuLrio na/ega pe!o sistema' arrin;o de ompras(
primeiramente /isitando sua pLgina ini ia! Eue ontIm di/ersos !i/ros( Em seguida' deta!;a as informaNes de um !i/ro espe .fi o e in !ui este no seu Posteriormente' e!e on !ui a ompra' informando os dados de login' endereo de entrega e dados de pagamento e ainda onfirmando as informaNes digitadas( 2esse momento' o sistema /erifi a o estoEue para se ertifi ar Eue e,iste a Euantidade so!i itada do produto e ria um no/o pedido no ban o de dados( 5 enfoEue dessa in/estigao estL no momento da on !uso do pedido' onde di/ersos usuLrios on orrentes podem a essar e tentar a!terar as mesmas informaNes do estoEue do produto' podendo o asionar in onsist-n ias no estado do sistema(
Figura 2/. 7iagrama e esta os > fi!ali-ar compra# livraria i7e-
ontro!e de
X( enLrio de mL,ima
simu!taneamente' pe!a ompra do mesmo !i/roR (( enLrio de mIdia on orr-n ia CMED' no Eua! ada grupo de 10 usuLrios tentaro omprar' simu!taneamente' os mesmos !i/rosR X( enLrio de m.nima on orr-n ia CM$2' no Eua! os usuLrios tentaro omprar'
B>
2o enLrio CM&U e,iste a maior on orr-n ia dentre os ana!isados' pois todos os usuLrios esto omprando o mesmo !i/ro on omitantemente( EsperaKse Eue esse seFa o mais desfa/orL/e! para o ontro!e otimista porEue Euando mais de um usuLrio estL arregada' serL !anada uma modifi ando a Euantidade de um produto no estoEue e a sua /erso' ao fina! da e,e uo do mItodo finali%arPe$i$o23' difere da /erso ini ia!mente e, eo -ptimisticE ception e a transao serL abortada' tendo Eue ini iar no/amente( 7e no de orrer dessa no/a transao o orrer no/amente mesma e, eo' essa serL abortada no/amente' sendo apresentada uma mensagem de erro e so!i itado Eue o usuLrio tente fina!izar o pedido no/amente( Diferentemente' o ontro!e pessimista trata esse enLrio rea!izando um b!oEueio C!o TD na !in;a da tabe!a estoEue Euando o primeiro usuLrio tentar a!terLK!a' sendo Eue os demais usuLrios Eue deseFem a!terLK!a pre isam esperar atI a !iberao desse b!oEueio( Para mais deta!;es de imp!ementao /er o Gdigo fonte das !asses PedidoContro!!er' *eren iadorPedidosEJB e *eren iadorEstoEueEJB no &p-ndi e &( 2o enLrio CMED e,iste uma on orr-n ia moderada' onde ada grupo de 10
usuLrios do tota! estarL disputando pe!o mesmo !i/ro( & reditaKse Eue esse enLrio seFa o mais rea!( Esse' em tese' seria mais benIfi o ao ontro!e otimista' uma /ez Eue ;a/eria pou a on orr-n ia e onseEuentemente pou as transaNes seriam ree,e utadas( JL no enLrio CM$2 no e,iste on orr-n ia' uma /ez Eue ada usuLrio estL
omprando um !i/ro diferente dos demais e no e,iste a possibi!idade de mais de um usuLrio tentar modifi ar' simu!taneamente' a mesma !in;a da tabe!a estoEue( Esse enLrio I neutro para as duas estratIgias de on orr-n ia( 5s enLrios CM&U e CM$2 foram es o!;idos por serem e,tremos( Em tese' o primeiro enLrio seria o mais sa rifi ante para o ontro!e otimista' sendo assim' se e!e demonstrar bom desempen;o atI nessa situao' ento o pessimista de/erL ser preterido sempre Eue poss./e!( 2o segundo on orr-n ia( 2o Eue se refere anL!ise sobre o cac#e de entidades' foi riado o aso de uso [ onsu!tar e a!terar cac#e\' i!ustrado na "igura 2>( Para esse teste foi definido o enLrio6 usuLrios a!terando e onsu!tando a cac#e 9&C( 5nde foram usados dois grupos de usuLrios( 5 primeiro grupo onsu!ta as informaNes de todos os !i/ros C100 !i/rosD para preen ;er as cac#es de ada nG e o segundo farL a!terao em informaNes desses !i/ros( enLrio' Eue I neutro para as duas estratIgias e no possui omportamento da opo otimista Euando ine,iste on orr-n ia' podeKse /erifi ar o
BO Figura 22. 7iagrama e esta os > co!sultar e alterar cac;e e e!ti a es# livraria i7e-
2a preparao para esse teste' ada usuLrio a essa uma pLgina onde e,iste uma !ista om todos os 100 !i/ros( & partir desse instante' o cac#e de entidades desse nG serL preen ;ido om as informaNes oriundas do ban o( Em seguida' ini iaKse o teste' onde os 100 usuLrios a!teram a!guns dados de ada um desses !i/ros' pro/o ando uma in/a!idao ou rep!i ao dessa entidade no cac#e( Para mais deta!;es de imp!ementao /er o Gdigo fonte das !asses +i/roContro!!er' *eren iador+i/rosEJB' Pub!i a ao e do arEui/o UM+ persisten e(,m! no &p-ndi e B( Esse enLrio pretende simu!ar uma situao rea!' onde os !ientes de um site de
omIr io e!etrAni o esto onsu!tando informaNes de a!guns produtos a partir do a ;e de entidades e' ao mesmo tempo' fun ionLrios a!teram dados desses produtos( EsperaKse Eue a rep!i aoQatua!izao mostre o pior desempen;o' pois nessa estratIgia' para ada a!terao nos dados das entidades presentes no cac#e' a onte erL uma rep!i ao de todas as informaNes referentes a essa entidade para todos os membros do cluster e' durante essa rep!i ao' o sistema pre isa esperar atI Eue todos os membros onfirmem a rep!i ao( Por outro !ado' a in/a!idao irL en/iar uma mensagem simp!es so!i itando Eue os demais membros do cluster Eue possuem a entidade Eue foi a!terada em cac#e des artem essas informaNes' no pre isando esperar pe!a onfirmao dessas(
amostra a ser ana!isada de forma Eue esta seFa representati/a( & popu!ao a ser estudada nesse traba!;o I o onFunto de reEuisiNes )##P para um site de omIr io e!etrAni o sob estudo( & /ariL/e! a!eatGria obser/ada I o tempo de resposta para di/ersas pLginas do referido site( 7egundo De/ore C200B' p(2?<K2??D' desde Eue o taman;o da amostra seFa grande' o #eorema do +imite Centra! C#+CD imp!i a Eue a
J0
mIdia popu!a iona! tem distribuio apro,imadamente norma!' Eua!Euer Eue seFa a distribuio da popu!ao( Como regra prLti a para /erifi ar se o taman;o da amostra I grande' De/ore define Eue essa afirmao anterior poderL ser uti!izada Euando o taman;o da amostra for maior Eue <0 e!ementos( De/ore C200B' p(2?>D apresenta uma fGrmu!a para a! u!ar o taman;o de uma amostra para uma proporo da popu!ao' dados um n./e! de onfiana e um erro a eitL/e!( Essa fGrmu!a estL i!ustrada na EEuao 1
Equa%o 1. F?rmula o tama!;o a amostra
5nde6 2 I o taman;o da amostraR z I o /a!or r.ti o da ur/a norma! padronizada para o n./e! de onfiana
deseFado' ou seFa' para O?P de onfiana uti!izaKse z e 1'OB e para OOP de onfiana de/eKse usar z e 2'?>R p I a proporo da popu!ao Eue possui a ara ter.sti a estudadaR E I 1 pR M I a amp!itude ou a margem de erro a eitL/e!R L! u!o mais onser/ador Euando no se on;e e a proporo p da
Para um
popu!ao uti!izaKse p mL,imo' ou seFa' p e ?0P( Para esse e,perimento foi definido um n./e! de onfiana de O?P e uma margem de erro a eitL/e! de ?P( Dessa forma' temKse Eue o taman;o m.nimo da amostra Euando ap!i ada a EEuao 1 I de 1?11 e!ementos( Contudo' para amp!iar ainda mais a onfiana da amostra reso!/euKse uti!izar uma amostra de 2000 e!ementos(
J1
L RESULTADOS
Esse Cap.tu!o apresenta os resu!tados das mediNes rea!izadas atra/Is do e,perimento no sistema sob estudo( 7ero apresentadas aEui as figuras Eue e,ibem as reEuisiNes re!a ionadas estratIgia ana!isada e os /a!ores totais( Para me!;or ompreenso das informaNes obtidas nas mediNes fazKse imperati/o e,p!i itar a!guns on eitos uti!izados pe!o JMetter na gerao dos seus resu!tados e apresentados no g!ossLrio> do seu manua!6 CiD mediana' I um /a!or Eue di/ide o tota! de amostras em dois grupos de mesmo taman;o' ou seFa' metade das amostras serL menor ou igua! a mediana e a outra metade serL maior ou igua!R CiiD !in;a de O0P CPer enti! de O0PD' segundo De/ore C200B' p( 2>D' per enti! I uma medida estat.sti a Eue di/ide deta!;adamente um onFunto de dados Camostra ou popu!aoD' ou seFa' o per enti! de O0P separa O0P dos /a!ores do restanteR e CiiiD t#roug#put' I a /azo do sistema em um determinado tempo' ou seFa' nWmero de reEuisiNes di/idido pe!o tempo tota! ou Euantidade de bStes pro essados di/idido pe!o tempo tota!(
>
;ttp6QQFmeter(apa ;e(orgQusermanua!Qg!ossarS(;tm!(
Para esse
enLrio de mL,ima
on orr-n ia o
L?8?4 Ce+,"*& CMED Para esse enLrio de on orr-n ia intermediLria o ontro!e otimista apresentou os seguintes resu!tados' onforme "igura 116
Figura 31. @esulta o simplifica o # co!trole e co!corr&!cia otimista # 36E7
Para esse enLrio de on orr-n ia intermediLria o ontro!e pessimista apresentou os seguintes resu!tados' onforme "igura 126
Figura 32. @esulta o simplifica o # co!trole e co!corr&!cia pessimista # 36E7
L?8?3 Ce+,"*& CMIN 5 ontro!e otimista apresentou os seguintes resu!tados para o enLrio de on orr-n ia m.nima' onforme "igura 116
Figura 33. @esulta o simplifica o # co!trole e co!corr&!cia otimista # 36$B
enLrio de
L?8?5 A+$#*!e '&! "e!0#-$'&! 2o enLrio CM&U o ontro!e otimista apresentou tempos de respostas me!;ores Eue o pessimista' onforme *rLfi o 1( 5 ontro!e otimista mostrou6 CiD mIdia 2O'0OP inferior e CiiD /a!or da !in;a de O0P sendo 2J'12P inferior ao pessimista( Por outro !ado' a /azo C^bQsD do ontro!e pessimista foi 1<'>?P maior( &pesar dessa /azo' a superioridade nos tempos de respostas do ontro!e otimista fi a e/idente em uma situao de forte on orr-n ia( 2o Eue se refere ao nWmero de pedidos rea!izados pe!os usuLrios Eue no foram on !u.dos sem no/a inter/eno do usuLrio' na a!ternati/a otimista apro,imadamente <0P dos pedidos pre isaram da inter/eno do usuLrio para refaz-K!os( 2o entanto' esse prob!ema do ontro!e otimista pode ser ontornado in !uindo no/as tentati/as para refazer o pedido de forma automLti a Euando da o orr-n ia de onf!ito de a!terao on orrente(
=r:fico 1. 3omparativo # co!trole e co!corr&!cia > 36AA > requisies <C1TD3o!firmar<e i o.x;tml
Contro!e de on orr-n ia
CenLrio de mL,ima on orr-n ia K CM&U K reEuisiNes P57#]ConfirmarPedido(,;tm! otimista pessimista
mIdia
!in;a de O0P
JL no outro
onforme *rLfi o 2( 5s /a!ores obtidos pe!o pessimista foram6 CiD /a!or da !in;a de O0P foi
J<
1'>OP menor Eue o obtido pe!o otimista e CiiD /azo CreEuisiNesQsD 2?P maior e a /azo C^bQsD 2<'1>P maior Eue a a!ternati/a otimista( 5 /a!or da mIdia do pessimista foi 0'JP maior(
=r:fico 2. 3omparativo # co!trole e co!corr&!cia > 36$B > requisies <C1TD3o!firmar<e i o.x;tml
Contro!e de on orr-n ia
CenLrio de on orr-n ia m.nima K CM$2 K reEuisiNes P57#]ConfirmarPedido(,;tm! otimista
1100 1200 1100 1000 O00 >00 J00 B00 ?00 <00 100 200 100 0
pessimista
mIdia
!in;a de O0P
5 enLrio CMED demonstrou mesma tend-n ia do enLrio anterior' onforme *rLfi o 1( 2esse enLrio' os /a!ores obtidos pe!o pessimista foram6 CiD media 1'0JP inferiorR e CiiD /a!or da !in;a de O0P foi 1'>1P menorR CiiiD /azo CreEuisiNesQsD 12'>2P maior e a /azo C^bQsD 11'1?P maior Eue a a!ternati/a otimista( 2o Eue se refere ao nWmero de pedidos rea!izados pe!os usuLrios Eue no foram on !u.dos de forma automLti a em funo do onf!ito de a!terao on orrente' essa Euantidade foi menor nesse enLrio' apro,imadamente' BP dos pedidos pre isaram de no/a inter/eno do usuLrio para refaz-K !os no aso do ontro!e otimista( &pesar das mIdias e !in;as de O0P dos dois tipos de ontro!es apresentarem /a!ores apro,imados' os des/iosKpadro mostraram Eue os tempos de resposta da a!ternati/a pessimista /ariaram mais Eue aEue!es do otimista( 5 des/ioK padro do pessimista foi <JB'O< ms' o Eue representa ?JP da sua mIdia( EnEuanto o des/ioKpadro do otimista foi 1>>'>2 ms' o Eue eEui/a!e a <B P da sua mIdia(
J? =r:fico 3. 3omparativo # co!trole e co!corr&!cia > 36E7 > requisies <C1TD3o!firmar<e i o.x;tml
Contro!e de on orr-n ia
CenLrio de on orr-n ia mediano K CMED K reEuisiNes P57#]ConfirmarPedido(,;tm! otimista
1200 1100 1000
pessimista
mIdia
!in;a de O0P
onforme
onforme
L?4?4 A+,#*!e '&! "e!0#-$'&! & a!ternati/a de in/a!idao demonstrou tempo de resposta mIdio 1'<2 P menor e !in;a de O0P om /a!or 1J'<?P menor' onforme *rLfi o <( 5utrossim' o des/ioKpadro da in/a!idao foi >JJ'J1 ms' representando B0P da sua mIdia( JL o des/ioKpadro da rep!i ao foi OO1'?O ms' o Eue eEui/a!e a BJP da sua mIdia( 5 Eue demonstra maior /ariao dos tempos da rep!i ao(
=r:fico ). 3omparativo # cac;e e e!ti a es # EA3
Ca ;e de entidades K
reEuisiNes P57#]&!terar+i/ro(,;tm! in/a!idao
1000 2J00 2<00 #empo de resposta CmsD 2100 1>00 1?00 1200 O00 B00 100 0
rep!i ao
mIdia
!in;a de O0P
& /azo C^bQsegundoD da in/a!idao foi ?0'O<P superior a rep!i aoQatua!izao' onforme *rLfi o ?(
rep!i ao
J>
CONCLUSO
Considerando o grande ris o Eue di/ersas eEuipes de desen/o!/imento de sistemas Meb esto e,postas Euando ompNem seus sistemas baseados' prin ipa!mente' em suas intuiNes e e,peri-n ias anteriores' o presente traba!;o pro urou ana!isar o impa to da ap!i ao das tLti as arEuiteturais de cac#e de entidades do ban o e foram re/isados os prin ipais ontro!e de on orr-n ia no desempen;o e na es a!abi!idade de sistemas orporati/os Meb( Para isso' on eitos !igados a p!ataforma Ja/a EE B' a anL!ise de desempen;o e arEuitetura de softMare' bem omo foi rea!izada uma e,tensa pesEuisa sobre as prin ipais tLti as arEuiteturais i!ustradas na !iteratura Eue podem me!;orar o desempen;o de sistema Meb( &!Im do mais' foram rea!izadas mediNes de desempen;o' onde foram mensurados os tempos de resposta e a /azo C t#roug#putD do sistema de eK ommer e produzido omo obFeto de estudo para ada tLti a sob in/estigao( 5s resu!tados das referidas mediNes e/iden iaram a!gumas informaNes importantes( 2o Eue se refere ao ontro!e de on orr-n ia' esse estudo di/u!ga a!gumas
informaNes Eue no e,istem na !iteratura re/isada( ConstatouKse Eue o ontro!e otimista apresentou desempen;o superior ao pessimista em um enLrio de forte on orr-n ia Eue de/eria se mostrar bem mais ad/erso para o otimista( Este apresentou !in;a de O0P e mIdia om /a!ores' respe ti/amente' 2J'12P e 2O'0OP inferiores aos /a!ores do ontro!e pessimista( 2o entanto' o ontro!e otimista sob forte on orr-n ia pre isou da inter/eno do ar-n ia do ontro!e otimista pode ser
ontornada modifi andoKse a imp!ementao desse ontro!e( 7endo assim' re omendaKse dar prefer-n ia para o ontro!e otimista em ap!i aNes Eue possuem forte on orr-n ia( JL para ap!i aNes de on orr-n ia moderada a peEuena podeKse usar tambIm o loc" pessimista' atentandoKse para uti!izar o loc" o mais prG,imo poss./e! do momento da a!terao na entidade( &!Im do mais' no aso do ontro!e otimista' para ada no/o proFeto se faz ne essLrio ana!isar se os usuLrios esto dispostos a ar ar transaNes em per.odos de forte on orr-n ia( Em se tratando de cac#e de entidades do ban o' esse traba!;o tambIm informa a!gumas informaNes no/as( Confirmando a e,pe tati/a' /erifi ouKse Eue a tI ni a de in/a!idao de cac#e e,ibiu desempen;o bem superior a tI ni a de rep!i ao ou atua!izao( 5s resu!tados da opo de in/a!idao apresentaram tempo de resposta mIdio om esse Anus de refazer a!gumas
JO
1'<2 P menor e !in;a de O0P om /a!or 1J'<?P menor Eue a rep!i ao e /azo ?0'O<P maior( Diante desse resu!tado do cac#e' re omendaKse uti!izar sempre Eue poss./e! a a!ternati/a de in/a!idao( & partir desse estudo' podem surgir omo possibi!idades de no/as !in;as de pesEuisa e traba!;os futuros6
$n/estigar e rea!izar esses mesmos testes na /erso ? do JBoss Eue uti!iza o JBoss Ca ;e e omparar om os resu!tados aEui obtidosR
Estudar os deta!;es do ser/io de cluster e rea!izar esses mesmos testes no ser/idor *!assfis;R
&na!isar tambIm a estratIgia de geren iamento de sesso' uti!izando' in !usi/e' o stateful session beans em ambiente de clusterR
PesEuisar sobre os impa tos na uti!izao da rede no Eue se refere s estratIgias de rep!i ao da sesso e rep!i aoQin/a!idao do cac#e de entidadesR
$n/estigar o impa to nos tempos de resposta das diferentes tLti as Euando uti!izados diferentes taman;os de cluster(
>0
REFERTNCIAS
B&C)M&22' "(R B&77' +(R ^+E$2' M( I##0/*+$-*+@ -;e F0+'$/e+-$# C&+-"*%0-&"! -& S&)-D$"e A".;*-e.-0"e Q0$#*-2( 1 ed( Pittsburg;6 Carnegie Me!!on 9ni/ersitS' 2002( B2p( B&77' +(R C+EME2#7' P(R ^&=M&2' %( S&)-D$"e A".;*-e.-0"e *+ P"$.-*.e( 2( Ed( &ddison 0es!eS' 2001( ?B0p( C&DE' M(R 7)E$+' )( S0+ Ce"-*)*e' E+-e"("*!e A".;*-e.- )&" J$ $ EE !-0'2 @0*'e( 2( Ed( Boston6 Pearson Edu ation' 2010( 1O1p( DE&2' J(R *)EM&0&#' 7( M$(Re'0.e: S*/(#*)*e' D$-$ P"&.e!!*+@ &+ L$"@e C#0!-e"!( 2011( 11p DE@5%E' J( +( P"&%$%*#*'$'e e E!-$-O!-*.$: ($"$ e+@e+;$"*$ e .*H+.*$! ( B ed( 7o Pau!o6 #;ompson +earning' 200B( BO2p( E+M&7%$' %(R 2&@&#)E' 7( S*!-e/$! 'e %$+.&! 'e '$'&!( <( Ed( 7o Pau!o6 Pearson &ddison 0es!eS' 200?( J2<p( "E%%&%5' 2011( *523&+@E7' &( Be@*++*+@ J$ $U EE L P#$-)&"/ D*-; G#$!!F*!; 3 6 2( ed( 2eM _orT6 &press' 2010( ?0>p( )&$2E7' 7( P"& J$ $ EE 6 Pe")&"/$+.e M$+$@e/e+- $+' O(-*/*N$-*&+(1( Ed( 2eM _orT6 &press' 200B( <20p( )&+$+$' E( )( A($.;e JMe-e"( 1( Ed( Mumbai6 Pa Tt Pub!is;ing' 200>( 11>p( ^E$#)' MR 7C)$2C&%$5+' M( P"& JPA 4( 2eM _orT6 &press' 200O( ?01p( P( C#0!-e"*+@ C;$+@e! *+ ASL( 2010( Dispon./e! em6 7an "ran is o6 *oog!e' 200<( Dispon./e! em6 c;ttp6QQresear ;(goog!e( omQar ;i/eQmapredu eKosdi0<(pdfd( & esso em6 0> de setembro de
>1
^592E@'
7(
Pe")&"/$+.e
E+@*+ee"*+@
&)
D*!-"*%0-e'
C&/(&+e+--B$!e'
S2!-e/!6 Ben ;marTing' Mode!ing and Performan e Predi tion( 200?( 20>p( Dissertao CDoutorado D K @om "a ;berei ; $nformatiT K #e ;nis ;en 9ni/ersitfat Darmstad' Darmstadt( ^592E@' 7(R 0E$7' B(R B9C)M&22' &( Pe")&"/$+.e T0+*+@ $+' O(-*/*N$-*&+ &) J4EE A((#*.$-*&+! &+ -;e J%&!! P#$-)&"/ ( Journa! of Computer %esour e Management' de ( 200<( @o!( 111( p( <0K<O( M&%C)$52$' "( JB&!! AS 6 Pe")&"/$+.e T0+*+@( Mumbai6 Pa Tt Pub!is;ing' 2010( 2O1p( ME2&7Cb' D( &(R &+ME$D&' @( &( "(R D50D_' +( 0( Pe")&"/$+.e %2 De!*@+: C&/(0-e" C$($.*-2 P#$++*+@( 1( Ed( 2eM JerseS6 Prenti e )a!!' 200<( <>0p( 2$C(B%( TIC D&/*.O#*&! 4<<K 'e!-$.$ ."e!.*/e+-& '& $.e!!& V I+-e"+e- +&! #$"e! %"$!*#e*"&!( Dispon./e! em6 c;ttp6QQMMM(ni (brQimprensaQre!easesQ2010Qr!K2010K0B(;tmd( & esso em 20 de setembro de 2010( 5%&C+E( T;e J$ $ EE L T0-&"*$#( %edMood CitS6 5ra !e' 2011a( Dispon./e! em6 c ;ttp6QQdoMn!oad(ora !e( omQFa/aeeQBQtutoria!Qdo QFa/aeetutoria!B(pdfd( & esso em6 0J de setembro de 2011( O0Bp( ]]]]]]( W&0" F*"!- C0(: A+ I+-"&'0.-*&+ -& -;e J$ $TM EE P#$-)&"/( %edMood CitS6 de 2011( ?2p( P5%#&+ %J( Ve+'$! (e#$ *+-e"+e- ."e!.e/ 87<X e/ '&*! $+&!( Dispon./e! em6 c;ttp6QQnoti ias(rJ( omQe onomiaQnoti iasQ/endasKpe!aKinternetK res eramK1J0KnoKbrasi!KemK 200OK20100>11(;tm!d( & esso em 20 de setembro de 2010( P%E77M&2' %( 7( E+@e+;$"*$ 'e S&)-D$"e( B ed( %io de Janeiro6 M *raMK)i!!' 200B( J?2p( %9B$2*E%' &( +(R B9%^E' B( E+-e"("*!e J$ $Be$+! 3?8? B( ed( 7ebastopo!6 5g%ei!!S' 2010( J1>p( 5ra !e' 2011b( Dispon./e! em6 c;ttp6QQdoMn!oad(ora !e( omQFa/aeeQBQfirst upQdo Qfirst up(pdfd( & esso em6 0J de setembro
>2
7)&0' M(R *&%+&2' D( S&)-D$"e A".;*-e.-0"e: Pe!(e.-* e! &+ $+ e/e"@*+@ '*!.*(#*+e( 1 ed( 2eM JerseS6 Prenti e )a!!' 1OOB( 2<2p( 759=&' 5( %( P"&.e!!&! 'e $(&*& $& 'e!e+ &# */e+-& 'e $(#*.$ARe! De% ( 200?( 121p( Dissertao CMestrado em i-n ias de omputao e matemLti a omputa iona!D $nstituto de Ci-n ias MatemLti as e de Computao K 97P' 7o Car!os( 792 M$C%57_7#EM7( J$ $U P#$-)&"/: E+-e"("*!e E'*-*&+ 1J$ $ EE9
S(e.*)*.$-*&+:
S(e.*)*.$-*&+( 7anta C!ara6 7un' 200Oa( 2<Jp( ]]]]]]( J$ $Se" e"U F$.e! S(e.*)*.$-*&+ F$.e! S(e.*)*.$-*&+( 7anta C!ara6 7un' 200Ob( <?>p( ]]]]]]( JSR 387: J$ $TM Pe"!*!-e+.e API 4?<( 7anta C!ara6 7un' 200O ( <>Bp( 0&2*' _( U+'e" -;e H&&' &) J4EE C#0!-e"*+@( #;e 7er/er 7ide( 200?( Dispon./e! em6 c;ttp6QQMMM(t;eser/erside( omQneMsQ11B<<10Q9nderKt;eK)oodKofKJ2EEKC!usteringd( & esso em6 0O de &gosto de 2011( ]]]]]](S.$#*+@ W&0" J$ $ EE A((#*.$-*&+! P P$"- 8( #;e 7er/er 7ide( 200>a( Dispon./e! em6 c;ttp6QQMMM(t;eser/erside( omQneMsQ11B1B>1Q7 a!ingK_ourKJa/aKEEK &pp!i ationsd( & esso em6 0O de &gosto de 2011( ]]]]]](S.$#*+@ W&0" J$ $ EE A((#*.$-*&+! P P$"- 4( #;e 7er/er 7ide( 200>b( Dispon./e! em6 c;ttp6QQMMM(t;eser/erside( omQneMsQ11B1BJOQ7 a!ingK_ourKJa/aKEEK &pp!i ationsKPartK2d( & esso em6 0O de &gosto de 2011( 4?<: JSR-<<<385 J$ $Se" e"1-/9
>1
import .ava1io1Seriali%able> import .ava1mat#1Big&ecimal> import .ava1util1ArrayList> import .ava1util1List> import .ava 1annotation1PostConstruct> import .ava 1e.b1EJB> import .ava 1enterprise1conte t1Conversation> import .ava 1enterprise1conte t1ConversationScope$> import .ava 1faces1application1(aces!essage> import .ava 1faces1bean1!anage$Bean> import .ava 1faces1bean1!anage$Property> import .ava 1faces1bean1)e*uestScope$> import .ava 1faces1component1#tml1Html&ataTable> import .ava 1faces1conte t1(acesConte t> import .ava 1faces1conte t1(las#> import .ava 1faces1event1ComponentSystemEvent> import .ava 1in.ect1In.ect> import .ava 1in.ect1'ame$> import .ava 1persistence1-ptimisticLoc"E ception>
import br1com1i$e%boo"store1aplicacao1Sessao> import br1com1i$e%boo"store1e.bs1@erencia$orPe$i$os> import br1com1i$e%boo"store1e ceptions1ItensPe$i$os'aoSalvosE ception> import br1com1i$e%boo"store1e ceptions1!o$ificacaoConcorrenteE ception> import br1com1i$e%boo"store1e ceptions1Pe$i$o'aoSalvoE ception> import br1com1i$e%boo"store1mo$el1Cliente> import br1com1i$e%boo"store1mo$el1En$erecoEntrega> import br1com1i$e%boo"store1mo$el1ItensPe$i$o> import br1com1i$e%boo"store1mo$el1Pe$i$o> import br1com1i$e%boo"store1mo$el1Publicacao> import br1com1i$e%boo"store1mo$el16suario> import br1com1i$e%boo"store1mo$el1e ceptions1Esto*ue'egativoE ception>
><
11111111111111private static final long serial+ersion6I& 7 ;L>
11111111111111public String finali%arPe$i$o23 11111111111111B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 pe$i$o 7 gerencia$orEJB1finali%arPe$i$o2cliente4entrega4itens4cartaoCre$ito4numParc3> Cliente cliente 7 getCarrin#o231getCliente23> En$erecoEntrega entrega 7 getCarrin#o231getEn$ereco23> ListEItensPe$i$oF itens 7 ne0 ArrayListEItensPe$i$oF2getCarrin#o231getPro$utos233> long cartaoCre$ito 7 getCarrin#o231getCartaoCre$ito23> int numParc 7 getCarrin#o231get'umParcelas23> Pe$i$o pe$i$o 7 null> try B
11111111111111 11111111111111
11111111111111 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 AAlgum item $o pe$i$o n:o po$e ser salvo1A4 AAlgum item $o pe$i$o n:o po$e ser salvo1A33> 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 D catc# 2Pe$i$o'aoSalvoE ception e3 B (acesConte t1getCurrentInstance231a$$!essage2null4 get(las#231setIeep!essages2true3> return AConfirmarPe$i$oJfaces,re$irect7trueA>
11111111111111 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 A- Pe$i$o n:o po$e ser salvo1A4 A- Pe$i$o n:o po$e ser salvo1A33> 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 Dcatc# 2Esto*ue'egativoE ception e3 B (acesConte t1getCurrentInstance231a$$!essage2null4 get(las#231setIeep!essages2true3> return AConfirmarPe$i$oJfaces,re$irect7trueA>
11111111111111 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 A':o #K *uanti$a$e suficiente em esto*ue1A4A':o #K *uanti$a$e suficiente em esto*ue1A33> 11111111111111 11111111111111 11111111111111 11111111111111 D catc# 2!o$ificacaoConcorrenteE ception e3 B get(las#231setIeep!essages2true3> return AConfirmarPe$i$oJfaces,re$irect7trueA>
>?
11111111111111 try B
11111111111111 pe$i$o 7 gerencia$orEJB1finali%arPe$i$o2cliente4entrega4itens4cartaoCre$ito4numParc3> 11111111111111 11111111111111 D catc# 2!o$ificacaoConcorrenteE ception e;3 B (acesConte t1getCurrentInstance231a$$!essage2null4
11111111111111 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 A6ma mo$ificaL:o concorrente foi efetua$a1 (avor refaLa1A4A6ma mo$ificaL:o concorrente foi efetua$a1A33> 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 D catc# 2E ception e=3 B (acesConte t1getCurrentInstance231a$$!essage2null4 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 get(las#231setIeep!essages2true3> return AConfirmarPe$i$oJfaces,re$irect7trueA>
11111111111111 e=1get!essage234 e=1get!essage2333> 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 D D catc# 2E ception e3 B
import .ava1mat#1Big&ecimal> import .ava1util1Collection> import .ava1util1&ate> import .ava1util1Has#Set> import .ava1util1List> import .ava1util1Set>
>B
import .ava 1e.b1EJB> import .ava 1e.b1Local> import .ava 1e.b1Stateless> import .ava 1e.b1TransactionAttribute> import .ava 1e.b1TransactionAttributeType> import .ava 1e.b1Transaction!anagement> import .ava 1persistence1Entity!anager> import .ava 1persistence1PersistenceConte t> import .ava 1persistence1Query>
import br1com1i$e%boo"store1e ceptions1ItensPe$i$os'aoSalvosE ception> import br1com1i$e%boo"store1e ceptions1!o$ificacaoConcorrenteE ception> import br1com1i$e%boo"store1e ceptions1Pe$i$o'aoSalvoE ception> import br1com1i$e%boo"store1mo$el1Cliente> import br1com1i$e%boo"store1mo$el1En$erecoEntrega> import br1com1i$e%boo"store1mo$el1ItensPe$i$o> import br1com1i$e%boo"store1mo$el1Pe$i$o> import br1com1i$e%boo"store1mo$el1Pro$uto> import br1com1i$e%boo"store1mo$el1e ceptions1Esto*ue'egativoE ception>
11111111111111private static final Big&ecimal +AL-)H()ETEHP-)HLI+)- 7 ne0 Big&ecimal2M1?3> 111111111111115PersistenceConte t2unit'ame7APro.etoI$e%EJBA3 11111111111111private Entity!anager em> 11111111111111 111111111111115EJB 11111111111111private @erencia$orEsto*ue controleEsto*ue> 11111111111111 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111public Pe$i$o finali%arPe$i$o2Cliente cliente4 En$erecoEntrega en$ereco4 ListEItensPe$i$oF listItens4long cartao4 int numParc3 11111111111111 t#ro0s ItensPe$i$os'aoSalvosE ception4 Pe$i$o'aoSalvoE ception4 Esto*ue'egativoE ception4 !o$ificacaoConcorrenteE ception B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 pe$i$o1setLogra$ouroEntrega2en$ereco1getLogra$ouro233> cliente 7 em1merge2cliente3> pe$i$o1setCliente2cliente3> Pe$i$o pe$i$o 7 ne0 Pe$i$o23>
>J
11111111111111 11111111111111 11111111111111 11111111111111 1111111111 11111111111111 1111111111111 1111111111 11111111111111 1111111111 11111111111111 1111111111 11111111111111 11111111111111 Integer numero'ota(iscal 7 gera'umero'ota(iscal23> pe$i$o1set'umero'ota(iscal2numero'ota(iscal3> SetEItensPe$i$oF setItens 7 ne0 Has#SetEItensPe$i$oF2listItens3> &ate $ataAtual 7 ne0 &ate2System1currentTime!illis233> pe$i$o1set&ataPe$i$o2$ataAtual3> pe$i$o1setBairroEntrega2en$ereco1getBairro233> pe$i$o1setCi$a$eEntrega2en$ereco1getCi$a$eEntrega233> pe$i$o1setEsta$oEntrega2en$ereco1getEsta$o233> pe$i$o1setCepEntrega2en$ereco1getCep233> pe$i$o1setItensPe$i$oSet2null3> pe$i$o1setCartaoCre$ito2cartao3> pe$i$o1set'umParcelas2numParc3>
1111111111NNSalva $a$os $o pe$i$o na tabela pe$i$o 11111111111111 1111111111 NNsalva $a$os $os itens $o pe$i$o em ItensPe$i$o 11111111111111 1111111111 11111111111111 11111111111111D 11111111111111 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111private voi$ retiraItens&oEsto*ue2SetEItensPe$i$oF setItens3 t#ro0s Esto*ue'egativoE ception4 !o$ificacaoConcorrenteE ception B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111D D for 2ItensPe$i$o itemPe$i$o 8 setItens3 B controleEsto*ue1retiraQuanti$a$eEmEsto*ue2 itemPe$i$o1getPro$uto;231getCo$Pro$uto234 itemPe$i$o1getQuanti$a$e233> return pe$i$o> salvarItensPe$i$o2pe$i$o4setItens3> salvarPe$i$o2pe$i$o3>
11111111111111private int getQuanti$a$ePro$utos2CollectionEItensPe$i$oF listItens3 B 11111111111111 11111111111111 11111111111111 for 2ItensPe$i$o itensPe$i$o 8 listItens3 B int *uanti$a$e 7 O>
>>
11111111111111 11111111111111 11111111111111 11111111111111 11111111111111D return *uanti$a$e> D *uanti$a$e P7 itensPe$i$o1getQuanti$a$e23>
11111111111111private Integer gera'umero'ota(iscal23 B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 return ma 'um'ota(iscal> D ma 'um'ota(iscalPP> D if 2num!a '(Q7null3 B ma 'um'ota(iscal 7 num!a '(> Query *uery 7 em1create'ame$Query2APe$i$o1fin$!a 'umero'ota(iscalA3> Integer num!a '( 72Integer3*uery1getSingle)esult23> Integer ma 'um'ota(iscal 7 O>
public Big&ecimal calcula+alor(rete2CollectionEItensPe$i$oF listItens4En$erecoEntrega entrega3B 1111111111Big&ecimal valor(rete 7 ne0 Big&ecimal2O1OO3>NN(rete gratis 1111111111valor(rete 7 +AL-)H()ETEHP-)HLI+)-> 1111111111valor(rete 7 valor(rete1multiply2ne0 Big&ecimal2getQuanti$a$ePro$utos2listItens333> 1111111111 1111111111return valor(rete> D
111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111private voi$ salvarItensPe$i$o2Pe$i$o pe$i$o4SetEItensPe$i$oF itens3 t#ro0s ItensPe$i$os'aoSalvosE ception B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 D em1persist2item3> for 2ItensPe$i$o item 8 itens3 B item1setPe$i$o;2pe$i$o3> item1getItensPe$i$oPI231setPe$i$o2pe$i$o1getCo$Pe$i$o233> try B
>O
11111111111111 t#ro0 ne0 ItensPe$i$os'aoSalvosE ception2A'ao foi possivel salvar os itens $o pe$i$o APpe$i$o1getCo$Pe$i$o233> 11111111111111 11111111111111D 11111111111111 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111private voi$ salvarPe$i$o2Pe$i$o pe$i$o3 t#ro0s Pe$i$o'aoSalvoE ception B 11111111111111 11111111111111 11111111111111 try B em1persist2pe$i$o3> D catc# 2E ception e3 B D
11111111111111 t#ro0 ne0 Pe$i$o'aoSalvoE ception2A'ao foi possivel salvar o pe$i$o APpe$i$o1getCo$Pe$i$o233> 11111111111111 11111111111111D D D
import .ava1mat#1Big&ecimal> import .ava1util1Collection> import .ava1util1&ate> import .ava1util1Has#Set> import .ava1util1List> import .ava1util1Set>
import .ava 1annotation1security1PermitAll> import .ava 1annotation1security1)olesAllo0e$> import .ava 1e.b1Local> import .ava 1e.b1Stateless> import .ava 1e.b1TransactionAttribute> import .ava 1e.b1TransactionAttributeType> import .ava 1persistence1Entity!anager> import .ava 1persistence1Loc"!o$eType> import .ava 1persistence1-ptimisticLoc"E ception> import .ava 1persistence1PersistenceConte t> import .ava 1persistence1Query>
import br1com1i$e%boo"store1e ceptions1!o$ificacaoConcorrenteE ception> import br1com1i$e%boo"store1mo$el1Cliente> import br1com1i$e%boo"store1mo$el1En$erecoEntrega> import br1com1i$e%boo"store1mo$el1Esto*ue> import br1com1i$e%boo"store1mo$el1ItensPe$i$o> import br1com1i$e%boo"store1mo$el1Pe$i$o>
O0
import br1com1i$e%boo"store1mo$el1e ceptions1Esto*ue'egativoE ception>
5Stateless 5Local2@erencia$orEsto*ue1class3 5TransactionAttribute2TransactionAttributeType1'-THS6PP-)TE&3 public class @erencia$orEsto*ueEJB implements @erencia$orEsto*ue B 111111111111115PersistenceConte t2unit'ame7APro.etoI$e%EJBA3 11111111111111private Entity!anager em> 11111111111111 111111111111115-verri$e 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111public voi$ retiraQuanti$a$eEmEsto*ue2int co$Pro$uto4 int *uanti$a$e)etira$a3 t#ro0s Esto*ue'egativoE ception4 !o$ificacaoConcorrenteE ceptionB 11111111111111 11111111111111 11111111111111 Query * 7 em1create'ame$Query2AEsto*ue1fin$ByPro$utoA3> *1setParameter2Aco$Pro$utoA4 co$Pro$uto3> Esto*ue esto*ue 7 2Esto*ue3*1getSingle)esult23>
esto*ue1retiraEsto*ue2*uanti$a$e)etira$a3>
aplica!u$ancas23>
11111111111111protecte$ voi$ aplica!u$ancas23 t#ro0s !o$ificacaoConcorrenteE ceptionB 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111D D D try B em1flus#23> Dcatc# 2-ptimisticLoc"E ception e3 B t#ro0 ne0 !o$ificacaoConcorrenteE ception2e1get!essage233>
import .ava1mat#1Big&ecimal> import .ava1util1Collection> import .ava1util1&ate> import .ava1util1Has#!ap> import .ava1util1Has#Set> import .ava1util1List> import .ava1util1!ap> import .ava1util1Set>
O1
import .ava 1e.b1EJBTransaction)olle$bac"E ception> import .ava 1e.b1Local> import .ava 1e.b1Stateless> import .ava 1e.b1TransactionAttribute> import .ava 1e.b1TransactionAttributeType> import .ava 1persistence1Entity!anager> import .ava 1persistence1Loc"!o$eType> import .ava 1persistence1Loc"TimeoutE ception> import .ava 1persistence1-ptimisticLoc"E ception> import .ava 1persistence1PersistenceConte t> import .ava 1persistence1PessimisticLoc"E ception> import .ava 1persistence1Query>
import br1com1i$e%boo"store1e ceptions1!o$ificacaoConcorrenteE ception> import br1com1i$e%boo"store1mo$el1Cliente> import br1com1i$e%boo"store1mo$el1En$erecoEntrega> import br1com1i$e%boo"store1mo$el1Esto*ue> import br1com1i$e%boo"store1mo$el1ItensPe$i$o> import br1com1i$e%boo"store1mo$el1Pe$i$o> import br1com1i$e%boo"store1mo$el1e ceptions1Esto*ue'egativoE ception>
5Stateless 5Local2@erencia$orEsto*ue1class3 5TransactionAttribute2TransactionAttributeType1'-THS6PP-)TE&3 public class @erencia$orEsto*ueEJB implements @erencia$orEsto*ue B 111111111111115PersistenceConte t2unit'ame7APro.etoI$e%EJBA3 11111111111111private Entity!anager em> 11111111111111 111111111111115-verri$e 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111public voi$ retiraQuanti$a$eEmEsto*ue2int co$Pro$uto4 int *uanti$a$e)etira$a3 t#ro0s Esto*ue'egativoE ception4 !o$ificacaoConcorrenteE ceptionB 11111111111111 11111111111111 Query * 7 em1create'ame$Query2AEsto*ue1fin$ByPro$utoA3> *1setParameter2Aco$Pro$utoA4 co$Pro$uto3>
Esto*ue esto*ue 7 2Esto*ue3*1getSingle)esult23> int *uanti$a$eEsto*ue 7 esto*ue1getQuanti$a$e23> if 2*uanti$a$eEsto*ue,*uanti$a$e)etira$a F7 O3 B !apEString4-b.ectF props 7 ne0 Has#!apEString4-b.ectF23> props1put2A.ava 1persistence1loc"1timeoutA4?OOO3>
O2
11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 try B em1refres#2esto*ue4 Loc"!o$eType1PESSI!ISTICH/)ITE4props3> D catc# 2Loc"TimeoutE ception eTime-ut3 B try B em1refres#2esto*ue4 Loc"!o$eType1PESSI!ISTICH/)ITE4props3> D catc# 2Loc"TimeoutE ception e=Time-ut3 B
11111111111111 t#ro0 ne0 !o$ificacaoConcorrenteE ception2A'ao foi possivel finali%ar pe$i$o1 -correu um time out na retira$a $o esto*ue1A3> 11111111111111 11111111111111 D Dcatc#2PessimisticLoc"E ception ePessimistic3B
11111111111111 t#ro0 ne0 !o$ificacaoConcorrenteE ception2A'ao foi possivel finali%ar pe$i$o1 -correu um erro com o banco na retira$a $o esto*ue1A3> 11111111111111 Dcatc#2EJBTransaction)olle$bac"E ception eTransaction3B
11111111111111 t#ro0 ne0 !o$ificacaoConcorrenteE ception2A'ao foi possivel finali%ar pe$i$o1 -correu um erro com o banco na retira$a $o esto*ue1A3> 11111111111111 Dcatc#2@enericJ&BCE ception e@enericJ&BC3B
11111111111111 t#ro0 ne0 !o$ificacaoConcorrenteE ception2A'ao foi possivel finali%ar pe$i$o1 -correu um erro com o banco na retira$a $o esto*ue1A3> 11111111111111 Dcatc#2E ception e3B
11111111111111 t#ro0 ne0 !o$ificacaoConcorrenteE ception2A'ao foi possivel finali%ar pe$i$o1 -correu um erro com o banco na retira$a $o esto*ue1A3> 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 DelseB if 2*uanti$a$eEsto*ue,*uanti$a$e)etira$a F7 O3 B esto*ue1retiraEsto*ue2*uanti$a$e)etira$a3> if 2*uanti$a$eEsto*ueQ7esto*ue1getQuanti$a$e233 *uanti$a$eEsto*ue 7 esto*ue1getQuanti$a$e23> D
O1
import .ava1io1Seriali%able> import .ava1util1Lin"e$List> import .ava1util1List> import .ava 1e.b1EJB> import .ava 1faces1application1(aces!essage> import .ava 1faces1bean1!anage$Bean> import .ava 1faces1bean1!anage$Property> import .ava 1faces1bean1)e*uestScope$> import .ava 1faces1conte t1(acesConte t> import .ava 1faces1event1ComponentSystemEvent> import .ava 1faces1mo$el1&ata!o$el> import .ava 1in.ect1'ame$>
import br1com1i$e%boo"store1e.bs1@erencia$orLivros> import br1com1i$e%boo"store1mo$el1Categoria> import br1com1i$e%boo"store1mo$el1E$itora> import br1com1i$e%boo"store1mo$el1ItensPe$i$o> import br1com1i$e%boo"store1mo$el1Livro> import br1com1i$e%boo"store1mo$el1Pro$uto> import br1com1i$e%boo"store1mo$el1Publicacao>
11111111111111private Livro livro> 11111111111111 11111111111111private Publicacao publicacao> 11111111111111 11111111111111private Integer co$Categoria> 11111111111111 11111111111111private Integer co$Publicacao> 11111111111111 11111111111111private Integer *uanti$a$ePaginas>
111111111111115EJB
O<
11111111111111private @erencia$orLivros gerencia$orLivrosEJB> 11111111111111 111111111111115!anage$Property2value7ACBcarrin#oControllerDA3 11111111111111private Carrin#oController carrin#o> 11111111111111 11111111111111public String alterarPublicacao23B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 D catc# 2E ception e3 B e1printStac"Trace23> (acesConte t1getCurrentInstance231a$$!essage2null4 return AlivroAltera$oComSucessoJfaces,re$irect7trueA> try B Publicacao pro$uto&etal#a$o 7 getCarrin#o231getPublicacao&etal#a$a23> pro$uto&etal#a$o1setAnoPublicacao2publicacao1getAnoPublicacao233> pro$uto&etal#a$o1setIsbn2publicacao1getIsbn233> pro$uto&etal#a$o1set'umeroE$icao2publicacao1get'umeroE$icao233> gerencia$orLivrosEJB1alterarPublicacao2pro$uto&etal#a$o3>
11111111111111 ne0 (aces!essage2(aces!essage1SE+E)ITGHE))-)4 AAlteracao nao efetiva$a1A4 AAlteracao nao efetiva$a1A33> 11111111111111 get(las#231setIeep!essages2true3>
return Aerro'aAlteracaoJfaces,re$irect7trueA>
11111111111111public String a$icionarItemCarrin#o23B 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111D 11111111111111 11111111111111public voi$ carregarPublicacao2ComponentSystemEvent cse3B 11111111111111 11111111111111 11111111111111D D publicacao 7 gerencia$orLivrosEJB1pes*uisarPublicacaoPorCo$igo2co$Publicacao3> getCarrin#o231setPublicacao&etal#a$a2publicacao3> return A!euCarrin#oJfaces,re$irect7trueA> Publicacao pro$uto&etal#a$o 7 getCarrin#o231getPublicacao&etal#a$a23> getCarrin#o231a$icionarItemCarrin#o2pro$uto&etal#a$o1getPro$uto233>
O?
import .ava1util1Has#Set> import .ava1util1List> import .ava1util1Set> import .ava 1annotation1security1PermitAll> import .ava 1annotation1security1)olesAllo0e$> import .ava 1e.b1Local> import .ava 1e.b1Stateless> import .ava 1e.b1TransactionAttribute> import .ava 1e.b1TransactionAttributeType> import .ava 1e.b1Transaction!anagement> import .ava 1e.b1Transaction!anagementType> import .ava 1persistence1Entity!anager> import .ava 1persistence1PersistenceConte t> import .ava 1persistence1Query>
import br1com1i$e%boo"store1mo$el1Autor> import br1com1i$e%boo"store1mo$el1AutorLivro> import br1com1i$e%boo"store1mo$el1AutorLivroPI> import br1com1i$e%boo"store1mo$el1Categoria> import br1com1i$e%boo"store1mo$el1E$itora> import br1com1i$e%boo"store1mo$el1Livro> import br1com1i$e%boo"store1mo$el1Pro$uto> import br1com1i$e%boo"store1mo$el1Publicacao>
111111111111115PersistenceConte t2unit'ame7APro.etoI$e%EJBA3 11111111111111private Entity!anager em> 11111111111111 111111111111115TransactionAttribute2TransactionAttributeType1)EQ6I)E&3 11111111111111public voi$ alterarPublicacao2Publicacao pubAltera$o3 B 11111111111111 Publicacao publicacao 7 em1fin$2Publicacao1class4pubAltera$o1getCo$Publicacao233>
OB
11111111111111 11111111111111D D
import .ava1io1Seriali%able> import .ava1util1Set> import .ava 1persistence1Basic> import .ava 1persistence1Casca$eType> import .ava 1persistence1Column> import .ava 1persistence1Entity> import .ava 1persistence1(etc#Type> import .ava 1persistence1@enerate$+alue> import .ava 1persistence1@enerationType> import .ava 1persistence1I$> import .ava 1persistence1JoinColumn> import .ava 1persistence1!anyTo-ne> import .ava 1persistence1'ame$Queries> import .ava 1persistence1'ame$Query> import .ava 1persistence1-neTo!any> import .ava 1persistence1-neTo-ne> import .ava 1persistence1Table> import .ava 1persistence1Table@enerator>
5Entity 5Table2name 7 ApublicacaoA3 5'ame$Queries2B 5'ame$Query2name 7 APublicacao1fin$AllA4 *uery 7 ASELECT p ()-! Publicacao pA34 5'ame$Query2name 7 APublicacao1fin$ByAnoPublicacaoA4 *uery 7 ASELECT p ()-! Publicacao p /HE)E p1anoPublicacao 7 8anoPublicacaoA34 5'ame$Query2name 7 APublicacao1fin$By'umeroE$icaoA4 *uery 7 ASELECT p ()-! Publicacao p /HE)E p1numeroE$icao 7 8numeroE$icaoA34 5'ame$Query2name 7 APublicacao1fin$ByCo$PublicacaoA4 *uery 7 ASELECT p ()-! Publicacao p /HE)E p1co$Publicacao 7 8co$PublicacaoA34 5'ame$Query2name 7 APublicacao1fin$ByIsbnA4 *uery 7 ASELECT p ()-! Publicacao p /HE)E p1isbn 7 8isbnA3D3 5Cac#e2usage7Cac#eConcurrencyStrategy1T)A'SACTI-'AL3 public class Publicacao implements Seriali%able B private static final long serial+ersion6I& 7 ;L>
OJ
5Basic2optional 7 false3 5Column2name 7 AanoHpublicacaoA3 private String anoPublicacao> 5Basic2optional 7 false3 5Column2name 7 AnumeroHe$icaoA3 private s#ort numeroE$icao> 5I$ 5Table@enerator2allocationSi%e7;4initial+alue7;4name7ApublicacaoHse*A4 table7Ase*uenceA4p"Column'ame7ASEQH'A!EA4 valueColumn'ame7ASEQHC-6'TA4 sc#ema7Ai$e%boo"storeA3 5@enerate$+alue2strategy7@enerationType1TABLE4 generator7ApublicacaoHse*A3 5Basic2optional 7 false3 5Column2name 7 Aco$HpublicacaoA3 private Integer co$Publicacao> 5Column2name 7 AisbnA3 private String isbn> 5JoinColumn2name 7 AlivroA4 reference$Column'ame 7 Aco$HlivroA3 5!anyTo-ne2optional 7 false3 private Livro livro> 5JoinColumn2name 7 Apro$utoA4 reference$Column'ame 7 Aco$Hpro$utoA4 insertable 7 false4 up$atable 7 false3 5-neTo-ne2optional 7 false3 private Pro$uto pro$uto> 5JoinColumn2name 7 Ae$itoraA4 reference$Column'ame 7 Aco$He$itoraA3 5!anyTo-ne2optional 7 false3 private E$itora e$itora>
public Publicacao23 B D 5-verri$e public int #as#Co$e23 B int #as# 7 O> #as# P7 2co$Publicacao Q7 null J co$Publicacao1#as#Co$e23 8 O3> return #as#> D
5-verri$e public boolean e*uals2-b.ect ob.ect3 B if 2Q2ob.ect instanceof Publicacao33 B return false> D Publicacao ot#er 7 2Publicacao3 ob.ect>
O>
if 22t#is1co$Publicacao 77 null RR ot#er1co$Publicacao Q7 null3 SS 2t#is1co$Publicacao Q7 null RR Q t#is1co$Publicacao1e*uals2ot#er1co$Publicacao333 B return false> D return true> D D
11111111 Eproperty name7A#ibernate1cac#e1region1factoryHclassA value7Aorg1#ibernate1cac#e1infinispan1Jn$iInfinispan)egion(actoryANF 11111111111111 Eproperty name7A#ibernate1cac#e1infinispan1cac#emanagerA value7A.ava8Cac#e!anagerNentityANF 1111111111ENpropertiesF 11111111111111ENpersistence,unitF ENpersistenceF