Sie sind auf Seite 1von 7

ToEJBornotToEJB?

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

EJBfuecreadoentoncesparafacilitarnuestravida,elcomitencargadodelEJB1.0nosprometeentreotras cosasque: SeramuyfcilescribiraplicacionesusandolosEnterpriseJavaBeans,puesloscontenedoresdeEJBnos proveendeserviciosquenospermitiranconcentrarnosenelnegociodelaaplicacin. Nuestrasaplicacionesseescribiranunsolaunavez,yluegoseinstalaranencualquierplataformasin tenerquemodificarelcdigofuentenirecompilarnuestrosEJBs,oseaaplicaciones100%portables.

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

LosStatelessSessionBeanssonmuypopularesentrearquitectoseingenierosJ2EE,ysufamanoestmal infundada,yaqueenunfinalproveenalaaplicacinserviciosnecesarioscomoelmanejodetransacciones, concurrencia,accesoremoto,soporteaclusters,pooldeobjetosdenegocio,seguridaddeclarativayel gerenciamientodelosobjetosdenegocio,abstrayndonosdesuimplementacin. Noobstante,comoveremosmsadelante,esposiblecontarconestosserviciossindependerdeuncontenedor EJB.

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)

4. Llama lgica de negocio del bean

MiSessionBean

5. Finalmente el EJB Object delega

DondeestnlosvendedoresdeEJB?
OtraespeculacindelaquealardeaelmodeloEJB,esladepodercomprarcomponentesEJBhechospor tercerosyensamblarlosparaconstruirunaaplicacindeformagil(recuerdenladefinicinderolesdescritaen prrafosanteriores).TodopareceindicarquelamalaportabilidaddelosEJBligadosmuchasvecescon caractersticaspropietariasdelosservidoresdeaplicacinsoncausadequeestemercadonuncatuvieraxito encomparacinconelmercadodecontrolesActiveXoJavaBeans3(ensusversionesdetaglibsoincluso libreras.jarparadiversosfines).

Javayanoeselmismo

LaespecificacinEJB1.0aparecemesesantesqueelJ2SEsalieraensuversin1.2congrandesmejoras comoelframeworkCollections,olaincorporacindeSwingalJRE4,asmismocontinuaeldesarrollodelJ2SE llegandolasversiones1.3,1.4yhacemuypocola5.0,sinembargoEJBsufrepocoscambios,casisiempre, solucionesaproblemasdeperformanceoescalabilidadcomolainclusindelasinterfaceslocalesenla especificacin2.0olosWebServicesenla2.1.


3

ObjetoJavaconunconstructorvaco(default)eimplementacionesdemtodosget/setparacadaunodesus atributosprivate,oprotected. EnversionesanterioresSwingeranlibreriasaparte.

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

Eneldinamismoeconmicoqueviveelmundohoy,inclusolosprocesosdedesarrollodesoftwarehantenido queadaptarse,naciendonuevasdisciplinascomolaeXtremeProgrammingolaTDD(TestDriven Development,dondelafilosofaesinclusoescribirlaspruebasantesdelaimplementacin),basadaestaltima enelusopruebasunitarias8.Enestasnuevasdisciplinasdondeelciclodedesarrollodeunaaplicacinsehace eniteracionescortas,juegaunpapelmuyimportanteelpoderrealizarpruebasrpidasdelcdigo implementado.As,ydebidoaladependenciadelosEJBsconelservidor,sehacemuydifcillaprcticade estosprocesosdedesarrollogiles,pueselciclodeimplementar,deployaryprobarpuedellegaradurarmucho tiempo.

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

EnjavaatravsdeframeworkscomoJUnit,HttpUnit,etc NoobstantecontinuarelsoportedeEJB2.1y2.0 IncluyeentreotraslaespecificacinEJB2.1 verhttp://java.sun.com/j2ee/compatibility.html Segnespecificacin2.1deEJBpodemosconvertirnuestrosStatelessSessionBeansenWebServices.

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

EJBproveeserviciosdemuchovalor.LosStatelesssessionbeansnosproveendeexcelentesolucinalahora dedistribuirserviciosennuestrasaplicaciones20,adems,escalanbienenambientesclusterizables,ysonuna formafcildesepararinterfacedeimplementacinenobjetosdenegocio.Porotraparte,atravsdelusodelos


13

14 15 16 17 18 19 20

J2EEesunconjuntodeespecificacionesbiendefinidasentrelasqueseencuentranSerlvets,JSP,JDBC, JMS,RMI,JTA,JCA,entreotras. DependencyInjection(http://www.martinfowler.com/articles/injection.html) ConocidosenlaliteraturacomoPlainOldJavaObject(POJO) AbandonadoenunprincipioporlaaparicindelosEJByretomadohacealgunosaos. ObjectRelationalMapping DataAccessObjectqueevidentementeimplementaninterfacesDAO. Casisiempreeldiseodeunaaplicacinesinfluenciadoporlatecnologaausar. YaseaatravsdeRMIoinclusoWebServicesparaelcasodeEJB2.1

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.

Das könnte Ihnen auch gefallen