Beruflich Dokumente
Kultur Dokumente
Marzode2005 @author:JorgeRodrguez EJBesconsideradoporlamayoraelncleodelJ2EE,ypormuchotiempolasolucinatodoslos requerimientosdeaplicacionesempresariales.Fuecentrodeatencindemuchasempresasvendedorasde servidoresdeaplicacinporalgunosaos,perohoyelmercadoestaconsolidadoporloquesoloquedan algunasempresaslideres. Enelao1998aparecelaespecificacinEJB1.0enmediodelamodadeldotcom,aslasempresasdelsector nolimitabanlosgastoseninfraestructura,sinimportarmuchasvecessilainversinsignificababeneficios.Era unapocadeunclimaeconmicobenigno,queayudalsurgimientodetecnologascomoelJ2EE,costos comoelhardware,laslicencias,einclusoelentrenamientodelpersonalsecontabandentrodelos presupuestos. Porotraparte,CORBAeralanicaalternativaabiertafrenteaCOM/DCOMdeM$1,peroCORBAesuna tecnologacomplejayqueademsnoabstraealdesarrolladordetenerquelidiarconAPIsdecomunicacin remota,as,EJBaparececomounasolucinideal,simpleyabierta.
MitovsRealidad
PerotodasestaspromesasrelacionadasalusodeEJBnosecumplenmuybien,larealidadprcticaha mostradootrosresultadosconrespectoalusodeestoscomponentesennuestrasaplicacionesJ2EE. DesarrollarunaaplicacinusandoEJBescostosotantodelpuntodevistaeconmicocomodesdeel tecnolgico. NoabundandesarrolladoresconbuengradodeconocimientosenelreaEJB,ydeencontrarlosesevidente quesetengaquepagarunpreciocaroporcontratarlosenunproyecto.Porotroladoelesquemaparael equipodedesarrolloqueproponelaespecificacindondehayrolestalescomoProveedordeBeans(Bean Provider),EnsambladordeAplicacin(ApplicationAssembler),InstaladordeEJB(EJBDeployers)y AdministradordeSistemas(SystemAdministrator)soloexisteenlamentedelcomitencargadodemantenerla especificacin. Delladotecnolgico,lidiarconcomponentesEJBnoesunatareatrivial,apesarqueexistenherramientasque ayudaneneltrabajodedesarrollo,noestransparenteelciclodecrear,deployaryprobarunEJB.Mismoen ambientesdedesarrollosofisticadoscomoelWorkshopdebeaoelWSADdeIBM,casinuncaescapamosal infiernoquesignificaentenderymuchasvecesmodificardescriptoresdeinstalacinestndarescomolosejb jar.xml,opropietarioscomoweblogicejbjar.xml. Enfin,elusodeEJBssignificaaltoscostosenlosproyectos,ybajasdelaproductividadeneldesarrollo,y comoconsecuenciademorayfallaenelcumplimientodeplazosdeentregaestablecidosenlosproyectos,pero hayms.
Micro$oft.
SobrelosStatelessSessionBeans
ModelodeComponentesyModelodeObjetos
EJBintroduceunmodelodecomponentescomplejo,queincumplelapromesadeescribiraplicaciones fcilmente,puesademsdequetenemosquelidiarcontodaslasimplementacionesdeclaseseinterfacesdela API(verfigura1),aniveldecdigodebemoshacerlookupdetodoslosEJB,yapesardehacerusode patronesdediseocomoelServicesLocator,oelBusinessDelegateparaminimizareldolor,estosintroducen dependenciadeJNDIylasAPIsEJBennuestrocdigoquefinalmentequedaamarradoalcontenedor. PorotrapartecuandodiseamosteniendoencuentaqueusaremoselmodeloEJB,particularmenteentity beansestamoslimitandoeldiseodenuestromodelosdeobjetos,personalmenteconsideroaEJBcomouna tecnologainvasivaenlaetapadediseoOOyquevaencontradelosconceptosdeADOO,imaginenala claseCuentaCorriente,queesevidentementeunaclasedenegociosteniendoqueimplementarlainterface EntityBean,conestoestamosmarcandolaclasecomopersistente,porquehabradesaberCuentaCorriente quevaaserpersistente?.ElusodeentitybeansintroduceloqueMartinFowler2describecomomodelos anmicos,dondeunobjetonopossecomportamiento,soloestado.
http://www.martinfowler.com
Fig1.FragmentodelmodeloEJB,losobjetosdecolorgrissonimplementacionesquedebemosproveeral container.
1. Crea un objeto Home MiEJBHome Cliente 3. Devuelve una referencia 2. Crea un objeto EJB MiEJBObject
EJB Container
ejb-jar.xml (descriptor)
MiSessionBean
DondeestnlosvendedoresdeEJB?
OtraespeculacindelaquealardeaelmodeloEJB,esladepodercomprarcomponentesEJBhechospor tercerosyensamblarlosparaconstruirunaaplicacindeformagil(recuerdenladefinicinderolesdescritaen prrafosanteriores).TodopareceindicarquelamalaportabilidaddelosEJBligadosmuchasvecescon caractersticaspropietariasdelosservidoresdeaplicacinsoncausadequeestemercadonuncatuvieraxito encomparacinconelmercadodecontrolesActiveXoJavaBeans3(ensusversionesdetaglibsoincluso libreras.jarparadiversosfines).
Javayanoeselmismo
Laversin1.3delJ2SEintrodujocaractersticasnuevascomolosProxisDinmicos,quepermitenimplementar cualquierinterfaceenruntime,locualfueinclusousadoporlasimplementacionesEJB2.0quepermitenla generacindelasclases(stubs)ahoraenlafasededeploymentdelaaplicacin.Porotraparteestanueva funcionalidadacompaadadeotrascomolamejoraenlaperformancedelpaquetereflectiondelnuevoJDKdio lugaralnacimientodeunanuevaeraenlaqueaparecieronlibrerascomolasCGLIB(CodeGeneration Library),librerasusadasporHibernate,iBatis,oSpringyquepermitengenerarcdigoenruntimeque interceptellamadasamtodosdecualquierclasejava. PorsuparteelJ2SE5.0incluyeelusodemetadatosaniveldecdigofuente(enlos.java),conocidocomo annotations5quepermiteneliminarelusodearchivosdescriptorescomolosejbjar.xml. OtromodelodeprogramacinhasurgidoconestaoladenuevastecnologasyeslaAOP6(AspectOriented Progamming),quebasadoenlaintercepcin,permiteejecutarcdigoantesydespusdelallamadade cualquiermtododecualquierclase,sintenerestaqueextenderdeclaseointerfacealguna.Adiferenciadel modeloEJB,AOPesuncomplementoalaprogramacinorientadaaobjetos,locualdefineenmuchos aspectossuxitoyusoactual.NoobstanteelusodeAOPincluyeunacurvadeaprendizajeenlos desarrolladores,perohoyesposibleelusodeframeworksquenosabstraendesuusodirecto,comoeselcaso deSpring(quehaceextensivousodeAOP,porejemploparaelmanejodetransaccionesenmtodosde negocios).
Antipatrones
LaaparicinenprimerainstanciadelaespecificacinEJByluegodelasimplementacionesreales,obligarona losvendedoresdecontainersEJBacumplirlosestndares,olvidandolaexperienciaprctica,locualprovocla aparicindeciertosPatronesdeDiseo,creadosensumayorapararesolverproblemasdelmodeloEJB comolaaltadependenciadellamadasJNDI(ServiceLocator),labajaperformanceprovocadaporelexcesode llamadasremotas(BusinessDelegate),oeltransportededatosentrecapasremotas(DTO7),estospatrones ademsintroducennuevascurvasdeaprendizaje,nobastaconleerselascasi400pginasdela especificacin,debemosaprendertambincomousarlospatrones.Sinembargomuchosdeestosformanparte deunconjuntodemalasprcticasdeprogramacinqueseponendemodaentredesarrolladores,unejemplo clsicoloconstituyeelpatrnDTOqueintroduceduplicacindecdigo,ycomoconsecuenciadeesfuerzoala horadelamanutencin,imaginendenuevoaCuentaCorriente,peroademsahoraCuentaCorrienteDTOyque ahoraademsimplementalainterfaceSerializable.
Escalabilidad
EJBporsunaturalezaremotapermiteladistribucindecomponentesdentrodelasaplicaciones(separacin fsicausandointerfacesremotas)ypormuchotiemposepensqueescalabanmejorquelasaplicacionesweb colocadas(separacinlgica),perolaprcticahademostradolocontrario,tantoEntityBeanscomolos StatefullSessionBeansnoescalanbienenambientesclusterizados,sinembargolosStatelessSessionBeans escalanbien,peroesevidentementeporsunaturalezasinestado.Decualquierformaespreferibleclusterizar aplicacioneswebusandobalanceadoresdecargaporhardwarecomoelCiscoLoadBalanceroporsoftware comoservidoresweb.Porotraparteesmejormanipularelestadodeunaaplicacinwebaniveldeobjetos HttpSessionynoStatefullSessionBeans,pueslosprimerosescalanmejor.
Metodologasgiles
5
XDocletesunproductoopensourcequepermitehacerestohoyendiayfuefuentedeinspiracinparala aparicindelosannotationsenelJ2SE5.0 6 Se encarga de los aspectos ortogonales de la aplicacin como el manejo de transacciones, la seguridad, el loggin, etc. Algunasimplementacionespuedenserencontradasen: http://aspectwerkz.codehaus.org/ http://eclipse.org/aspectj/ http://aopalliance.sourceforge.net/ 7 DataTransferObject
MotivadosporEJB3.0
LapublicacindelaespecificacinEJB3.0(esnotableelsaltodelnmerode2.1a3.0)amediadosdel2003y queanestenrevisin(puedeserbajadadesdehttp://java.sun.com/products/ejb/docs.html),hacepensarque laSunsintilanecesidaddedarairesfrescosasutecnologa(ahoraconellemafacilitarelusodeEJBs,pero desdeelpuntodevistadelosdesarrolladores),dandosoportealusodemetadatosenlosEJB9mediantelas nuevascapacidadesdelJ2SE5.0(recuerdenlosannotations).Amododeejemplo,cuandoestelistadicha especificacinseremoscapacesdeescribircdigocomoeldelafigura2 Figura2UsodemetadatossegnespecificacinEJB3.0 @Remote @Stateless publicclassMiNuevoBeanimplementsInterfaceDeNegocios{ publicvoidmetodoDeNegocio(){ //implementacin... } ... } YdeestaformadefinirunEJBStatelessSessionBeancomounobjetojavaplanoqueimplementasuinterface denegociossintenerqueimplementarlaantiguainterfaceSessionBeandelaAPIEJB. NoobstanteyapesarquelaespecificacinJ2EE1.410salienNoviembredel2003,existenpocosservidores J2EE1.4Certified11,portantoesdeesperarquepasenalgunosaosantesdeaparecerimplementacionesde EJB3.0.
Cuandorealmenteusarlos
EJBtieneaunsulugarenelmundojava,yesevidentequeconlaespecificacin3.0vaaimponerse nuevamentecomolatecnologadefactoenlaconstruccindeaplicacionesJ2EE.Decidirhoydesidebemos usaronoEJBnoestrivial,puesdependedelosrequerimientostantofuncionalescomonofuncionalesdela aplicacin,sinembargohayescenariosdondeesapropiadousarlos,porejemplocuando: Laaplicacinser100%middlewareydistribuida.Noposeeunainterfazwebdefinida,sinoquesufuncin serladebrindarserviciosaotrasaplicaciones.AquesevidentequeelusodeRMIesunatecnologafcil deusarparaimplementaresto. EstemosimplementandoserviciosdentrodeunambienteSOA.Nuevamentelamejorsolucinpuedeserel usodeRMIoWebServicesatravsdeStatelessSessionBeans12. Esunhechoquelaaplicacindarserviciosamltiplesclientes(comowebyaplicacindesktop).Enla prcticaestoesalgoraro.
8 9 10 11 12
Solucionesalternativashoy
PerosinoesconvenienteelusodeEJBs,entoncesnuestraaplicacindejadeserJ2EE,yademsno podremosgozardelosserviciosqueelservidordeaplicacionesnosofrece,cierto?,NOOO,errado.J2EE!= EJB,J2EEesmuchomsqueEJB13ymsan,EJBesmuchomenosqueJava.Acontinuacinalgunos productosalternativosqueunarquitectopragmticopuedeusarparasustituirelusodeEJB(sessionbeansy entitybeans)enaplicacionesJ2EE. SpringFramework:esuncontenedordeaplicacionesqueusaInversindeControl(IoC),otambinconocido comoInyeccindedependencias14comoconceptoprincipal,yquejuntoasuimplementacinAOPofrecen soporteaserviciosmedianteelusodeobjetosplanos15.Algunosdelosserviciosson: Manejodetransaccionestantodeclarativoscomoprogramados,oinclusoambosdentrodeunamisma clase(locualesimposiblemedianteelusoEJB,yaqueousasCMTousasBMT). Gerenciamientodelosobjetosdenegocio.MedianteestiloJavaBeanset/get. Seguridadatravsdeinterceptores.NuevamentegraciasaAOP. Accesoremoto.Podemosexponerserviciosenobjetosplanosatravsdelsoporteavariastecnologas comoRMI,WebServices,JMS,oprotocolospropietarioscomoHessianoBurlap,todoestoatravsde proxisdinmicos. JDO:EstndarJSR1216deSun,cuyasimplementacionescomoKodoJDOofrecenbuenaalternativacomo substitucinaEntityBeans. Hibernate:FrameworkORM17opensourceymuypopular,queproveeunaformasencilla,yfcildeusar comosolucindepersistencia.UsainternamenteCGLIB,locualpermitequecualquierobjetodenuestro modelopuedapersistirsetransparentementesinextenderningunaclaseointerface,favoreciendoasiel ADOO. iBatis:Productoopensourcequeofreceunacapadeabstraccinentrelosobjetosdenegocioyelusode JDBCparaaccederamodelosrelacionales. PicoContaineryHiveMind:ContenedoresquealigualqueSpringusancomoncleoelpatrnIoCypueden combinarseconimplementacionesAOP. EstosproductospuedenformarpartedeunaaplicacinJ2EEydeestaformaproveerserviciosqueEJBs ofrecendeformamssencillayquenospermitencontinuarpensandoeimplementandoorientadoaobjetosen nuestrosmodelos.NoobstantelosStatelesssessionbeans,puedenserusadoscomofachadaalosobjetosde negocioparadarsoportedeaccesoremotoalosmismos(esteeselmayorvalorquetienenlossessions beans). Enelcasodelapersistenciadenuestrasaplicaciones,unabuenaprcticaescolocartodoelaccesoalosdatos detrsdeobjetosDAO18,permitiendoindependizarnuestromodelodenegociodelatecnologausadapara persistirlosobjetos,ypudiendoascambiar19dichatecnologasinalterarlalgicadenegocio. EnprximosartculosveremoscomointegrarestosproductosparaconstruiraplicacionesJ2EE,quesean escalablesynodependandeuncontenedorEJB.
Concluyendo
14 15 16 17 18 19 20
MessageDrivenBeans,podemosdarsoporteamensajeraasncronaanuestrasaplicaciones. Sinembargo,EJBnocumplimuybienalgunasdelaspromesasconlasquelaespecificacinalardeoensus dasdegloria,entrelasquerecitamos: Hacerfcilelescribiraplicaciones.ComoyacitamosEJBeliminaciertacomplejidad,introduceunmodelode programacincomplejoeinvasivo. Desarrollarunavez,einstalarencualquierplataforma,sincambiosenelcdigonirecompilacin.Mismo cumpliendoconlaespecificacin,unaaplicacinEJBnohaceelcdigo100%portablecomopuedehacerse conServletsy/oJSP,enlavidaprcticamigrarunaaplicacindeunservidordeaplicacionesaotroincluye siemprealgntipodereescriturayrecompilcacindelcdigofuente. PorotraparteestamosenunaeradesolucionespragmticasquevanmsalldelEJB,yquesibienno cumplenestndaresdemercadoestndeterminadasalxitoporsufilosofabasadaenlaexperiencia,como eselcasodelosproductos:Hibernate,JDO,implementacionesAOP,oelusodecontenedoresdeInversinde ControlcomoPicoContaineroSpring.Todosestosproductospuedenserusadosparaconstruirdeformagil aplicacionesJ2EEsinquedejendeserescalablesyfcilesdedarmanutencin. Portantoysinconcuerdanconmigoentodoloantesexpuesto,lespidoqueelda0delprximoproyectoJ2EE, arquitectoseingenierosyconeldocumentoderequerimientosenmano,serenancomobuenossamaritanos, compartanuncafycoloquenenelpizarrnlapreguntaEsfactibleelusodeEJBenesteproyecto...?.
Recursos
J2EEhttp://java.sun.com/j2ee WebLogicWorkshop8.1http://dev2dev.bea.com/products/wlworkshop81/index.jsp WebSphereStudioApplicationDeveloper
http://www-306.ibm.com/software/awdtools/studioappdev/ CGLIBhttp://cglib.sourceforge.net/ Hibernatehttp://hibernate.org/ JDOhttp://java.sun.com/products/jdo/ iBatishttp://ibatis.com/ Springhttp://www.springframework.org/ PicoContainerhttp://www.picocontainer.org/ HiveMindhttp://jakarta.apache.org/hivemind/ J2SE5.0http://java.sun.com/j2se/1.5.0/ eXtremeProgramminghttp://www.extremeprogramming.org/ TestDrivenDevelopmenthttp://www.testdriven.com/ JUnithttp://www.junit.org/ EspecificacindeEJB3.0http://java.sun.com/products/ejb/docs.html
Acercadelautor: SunCertifiedProgrammerfortheJava2Platform1.4ySunCertifiedWebComponentDeveloperfortheJava2 PlatformEnterpriseEdition,ademscuentaconunacertificacinenWebLogicWorkshop8.1,trabajacomo ArquitectoJ2EEparaInterplanetyXperienceConsultingServicesypuedesercontactadoen jrodriguez@interplanet.cl.