© CasadoCódigo TodososdireitosreservadoseprotegidospelaLeinº9.610,de10/02/1998. Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,semauto- rizaçãopréviaporescritodaeditora,sejamquaisforemosmeios: fotográficos, eletrônicos,mecânicos,gravaçãoouquaisqueroutros. CasadoCódigo Livrosparaoprogramador RuaVergueiro,3185-8ºandar 04101-300–VilaMariana–SãoPaulo–SP–Brasil CasadoCódigo Sumário Sumário 1 AntesdefalardeCDI... 1 1.1 Boaspráticasdeorientaçãoaobjetos . . . . . . . . . . . . . . . . . . . 2 1.2 Lidandocomoacoplamento . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Evoluçãodasferramentasdegestãodedependência . . . . . . . . . . 11 1.4 Obomevelhoarquivoproperties . . . . . . . . . . . . . . . . . . . . . 11 1.5 BuscandoasdependênciascomSpringeXML . . . . . . . . . . . . . 14 1.6 BuscandoasdependênciascomSeameanotações . . . . . . . . . . . 17 1.7 Deondevimos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2 OqueéeparaqueserveaCDI 21 2.1 Paraondevamos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Evitandoqueacomplexidadedocódigosempreaumente . . . . . . . 21 2.3 Introduçãoàinjeçãodedependências . . . . . . . . . . . . . . . . . . 31 2.4 AmotivaçãodaCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5 Oqueéeparaqueserveumaespecificação? . . . . . . . . . . . . . . . 36 2.6 ACDIésóparaJavaEEmesmo? . . . . . . . . . . . . . . . . . . . . . 38 3 IniciandoumprojetocomCDI 39 3.1 OláCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.2 OqueéumpacoteCDI? . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3 Usandoinjeçãoempropriedades,construtoresemétodosinicializa- dores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.4 Asformasdeseinjetardependências . . . . . . . . . . . . . . . . . . . 49 3.5 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 i Sumário CasadoCódigo 4 Resolvendodependênciascomtipagemforte 53 4.1 Lidandocomaambiguidadenasdependências . . . . . . . . . . . . . 54 4.2 Osqualificadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.3 Alternatives:eliminandoambiguidadeetornandoumbeanopcional 65 4.4 Prioridade:novidadedaCDI1.1,partedoJavaEE7 . . . . . . . . . . 68 4.5 Beansnomeados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.6 Trabalhandocomherançaentrebeans . . . . . . . . . . . . . . . . . . 72 4.7 Restringindootipodosbeans . . . . . . . . . . . . . . . . . . . . . . . 74 4.8 Resoluçãodedependênciasobdemandaelookupprogramático . . . 76 4.9 Resumodofuncionamentodaresoluçãodedependências . . . . . . . 80 5 OciclodevidadosobjetosgerenciadospelaCDI 83 5.1 Métodosprodutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2 EscoposdaCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.3 Escopoderequisiçãocom@RequestScoped . . . . . . . . . . . . . . . 94 5.4 Escopodesessãocomo@SessionScoped. . . . . . . . . . . . . . . . . 97 5.5 @ApplicationScoped:Omaiorescopopossível . . . . . . . . . . . . . 99 5.6 @ConversationScoped:Vocêcriandoseupróprioescopo . . . . . . . 101 5.7 @Dependent:OescopopadrãodoCDI . . . . . . . . . . . . . . . . . 108 5.8 Métodosfinalizadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6 InterceptorseDecorators 113 6.1 Implementandorequisitostransversaiscominterceptors. . . . . . . . 113 6.2 Interceptadoresdeciclodevida . . . . . . . . . . . . . . . . . . . . . . 121 6.3 EstendendoumbeanexistentecomDecorators . . . . . . . . . . . . . 124 6.4 Vinculaçãodinâmicaentreoobjetodecoradoeseudecorador . . . . 126 7 DefinindoEstereótiposediminuindooacoplamentoutilizandoEventos 133 7.1 Definindoestereótipos . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.2 UtilizandoEventosparaobterumbaixíssimoacoplamento . . . . . . 137 7.3 Observadoressíncronosdeeventos . . . . . . . . . . . . . . . . . . . . 141 7.4 Eventosequalificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.5 Observadoresassíncronosdeeventos . . . . . . . . . . . . . . . . . . . 146 7.6 Injetandodependênciasnosobservadores . . . . . . . . . . . . . . . . 148 ii CasadoCódigo Sumário 8 ArelaçãodaCDIcomasdemaisespecificaçõesJavaEE 151 8.1 RelaçãoentreCDIeEJB/JPA . . . . . . . . . . . . . . . . . . . . . . . . 152 8.2 RelaçãoentreCDIeJSF . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8.3 RelaçãoentreCDIeJMS . . . . . . . . . . . . . . . . . . . . . . . . . . 163 8.4 Empacotandoasmelhorias . . . . . . . . . . . . . . . . . . . . . . . . . 169 9 ExtensõesCDI 171 9.1 DoSeamàCDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 9.2 Extensõesportáveisdisponíveis . . . . . . . . . . . . . . . . . . . . . . 174 9.3 Criandonossasextensões . . . . . . . . . . . . . . . . . . . . . . . . . . 175 9.4 Extensãoportável:usandoconvençãoemvezdeconfiguração . . . . 177 9.5 Extensãonãoportável:eventosassíncronosforadoJavaEE . . . . . . 180 10 ExecutandoCDIemdiferentesambientes 189 10.1 ExecutandoCDIemservletcontainers . . . . . . . . . . . . . . . . . . 190 10.2 ExecutandoCDIapartirdeumaclassemain . . . . . . . . . . . . . . 193 10.3 EcomotestarumaaplicaçãoCDI? . . . . . . . . . . . . . . . . . . . . 195 10.4 Desenvolvendotestesdeintegraçãocompersistência. . . . . . . . . . 201 ÍndiceRemissivo 208 Versão:16.3.26 iii Capítulo1 Antes de falar de CDI... O assunto principal deste livro é a CDI, mas não iremos começar nossos estudos diretamentenela. Teremmãosumaboaferramentaémuitobom,porém,antesde utilizá-la,precisamosversobredesenvolvimentodesoftwarecomoumtodo.Mesmo quevocêsejaumprogramadorexperiente,valeapenarevisitartópicosimportantes comoesses.Atéporqueserexperientenãoésinônimodesabertudo. O bom desenvolvimento de software não é uma tarefa trivial. Equilibrar a ba- lançaquetem,deumlado,aaltacoesão,edeoutro,obaixoacoplamentoéalgoque setornamaissimplescomaexperiênciaeobservandobonscódigos. Nãoépossíveljustificaramáqualidadedeumsoftwarepelaquantidadedemu- danças que o mesmo precisou sofrer por alterações no negócio, ou simplesmente pormudançadeopiniãodocliente. Issovaiacontecer,ecabeanós,desenvolvedo- res, projetarmosnossasaplicaçõesdeformaaacomodardamelhorformapossível essasmudanças. Amenosqueosoftwarequeestivermosdesenvolvendosejaalgoparaumane- cessidade temporária, e não tenha um uso permanente, certamente ele mudará, e 1.1. Boaspráticasdeorientaçãoaobjetos CasadoCódigo nãoapenasumavez,ecomissoalgumaspartesdeleirãosofrercomessamudança. Podeseratéque,dependendodaurgência,aparteafetadapelamudançapreciseser melhoradadepois,masnãopodemosdeixarqueesseefeitosejapropagadoparatoda aaplicação. Tomemos como exemplo uma aplicação que controle tudo relacionado aos re- cursoshumanosdeumaempresa,desdeocadastrodetalhadodosdadosdosfuncio- náriosatéafolhadepagamento.Agoravamosconsiderarumamudançadelegislação quenosobrigueamudaraformacomoafolhadepagamentoécalculada,eessaseja simplesmenteapartemaiscomplexadetodoosistema,umavezquealémdosalário de cada funcionário, é preciso também calcular todos os impostos e descontos de planodesaúde,empréstimoscomdescontoemfolhaetudomais. Nesse cenário, é possível argumentar que a mudança é inviável por mexer no cerne do sistema? Obviamente, não. Então nosso sistema precisa ser resiliente, ou seja,suportarbemasmudanças. No cenário apresentado, a mudança de todo o cálculo da folha de pagamento provavelmentenãoseráapiorpartedotrabalho. Geralmenteaequipesabeprogra- mar,escrevercódigo,econsequentementevaisaberpassarparaaIDEasalterações nalegislação.Apiorpartecostumaseroreflexodessamudançanorestantedosoft- ware. Apesardenãoserofocodolivro,veremosumpoucosobretestesnocapítulo 10,eentãoentenderemosoquantoessaéumaferramentaimportanteparaminimi- zarosriscosdessescomportamentosnãoprevistosapósumaalterações. Masantes mesmodeescrevertestesparaosistema,temosqueprojetaressesistemadeformaa nãopropagarmosasmudançasdeumadeterminadaparteparaosistematodo.Esse efeitocascataéquecostumaserapiorpartedeumamudançagrande. 1.1 Boas práticas de orientação a objetos Abaixacoesãoeoaltoacoplamentosãoasprincipaiscausasdeumamudança,que deveriaficarretidaemumaparte, sairdestruindoosistematodo. Masoquereal- menteéisso?Ouvimostantofalaremcoesãoeacoplamentomasasvezesnãotemos certezadoqueissosignifica. Coesão Acoesãoéacapacidadedeumobjetoestarfocadonasuatarefaespecífica.Seseu papelécalcularosaláriodofuncionário,entãoquefaçaisso. Elenãodevecalcular osalárioecalcularodescontodoimpostoderenda,ecalcularodescontodoplano 2
Description: