Академический Документы
Профессиональный Документы
Культура Документы
SistemasDistribuidos
RenyAlvarado.
Caracas,Febrero2007
Aspectosatratar
Java. JEEJavaPlatform,EnterpriseEdition ModelodeAplicacindeJavaEE ArquitecturamulticapasdeJEE ContenedoresJEE EnterpriseBean TiposdeEnterpriseBean Definiraccesosdeclientesconinterfaces ContenidodeunEnterpriseBean ConvencionesdenombresparaEnterpriseBean Ejemplodeaplicacin.
Java
Esunlenguajede programacinorientado aobjetos. Fuedadoaconoceren elao1995enla ConferenciadeDiseo, Tecnologay Entretenimiento,en Monterrey.
CaractersticasdeJava
Seguridad Simplicidad Portable
Multi-hilo
Distribuido
Arquitectura neutral
Caractersticas
Orientado a Objetos
Robusto
LaplataformaJava
JavaVirtualMachine
Esunaaplicacinque representaaun procesadorgenrico enelcualcorrenlos bytecodesdeJava. HacequeJavasea independientede plataforma.
Implementacin Concreta
Aspectos
Especificacin abstracta
ImpactodeJavaenlaWWW
JEEJavaPlatform,EnterpriseEdition
Esunaplataformadeprogramacin paradesarrollarycorreraplicaciones Javadearquitecturasmulticapas distribuidas. IncluyevariasAPIs,talescomo:JDBC, RMI,email,JMS,webservices,XML, EnterpriseJavaBeans,servlets,Java ServerPages,ylaJavaPersistence APIentreotros.
ModelodeAplicacindeJavaEE
ElmodeloJEEcomienzaconellenguajede programacinJavaylaJVM. Soportaaplicacionesqueimplementan serviciosempresariales. Losrequerimientosdelosclientessontratados enlacapamediadelmodelo,queescontrolada poreldepartamentodetecnologade informacindelaempresa. Lacapamediacorreenunhardwarededicadoy tieneaccesoatodoslosrecursos empresariales. Divideeltrabajoendospartes:lalgicadel negocioylapresentaci n.
ArquitecturaMulticapasdeJEE
Unacapaesunconceptoabstractoque defineungrupodetecnologasque proporcionanunoomsserviciosasus clientes. J2EEconsistedecuatrocapas,cadauna delascualesseenfocaenproporcionara unaaplicacinuntipoespecficode funcionalidad.
ArquitecturaMulticapasdeJEE
Componente Componente
Capa Cliente
Capa Web
Componente
Componente
Capa de EJB
Componente
Componente
Componente
Componente
ProcesamientodepeticionesenJEE
Capa Cliente Componente
Respuesta
Componente
Peticin del cliente
Capa Web
Componente
Respuesta
Componente
Peticin del cliente
Capa de EJB
Componente
Respuesta
EJB
Peticin del cliente
Componente
RBMS
EjemplodeunaaplicacinJEE
ContenedoresJEE
Normalmente,lasaplicacionesmulticapassondifciles deescribir. Laarquitecturaindependientedeplataformasyel hechodequeJEEestbasadoencomponentes facilitanlaescrituradeaplicacionesporquelalgica delnegocioesorganizadadentrodecomponentes reusables. JEEproporcionaserviciosenformadecontenedor paracadacomponente. Uncontenedoresunainterfaceentreuncomponentey unafuncionalidaddeunaplataformaespecficade bajonivelquesoportaesecomponente.
Servicioscontenedores
ModelodeseguridaddeJavaEE:Permite
configuraruncomponenteparaqueseaaccedidoslopor usuariosautorizados.
ModelodetransaccindeJavaEE:Todoslos
mtodosenunatransaccinsontratadoscomounaunidad sencilla.
ServiciosdebsquedadeJNDI:Proporciona
unainterfazunificadaparaserviciosdemltiplesnombresy directorios
ModelodeconectividadremotadeJava EE:Administralascomunicacionesdebajonivelentreclientesy
EJBs
Tiposdecontenedores
ServidorJEE:ProporcionaEJBycontenedoresweb. ContenedorEJB:AdministralaejecucindeEJBpara
aplicacionesJEE.
Contenedorweb:Administralaejecucindepginas
JSPycomponentesservletsparaaplicacionesJEE.
Contenedordeaplicacionescliente:
Administralaejecucindecomponentesdetipoaplicaciones cliente.
Contenedordeapplets:Administralaejecucinde
applets.
EnterpriseBean
Esuncomponentedelladodelservidor, escritoenlenguajedeprogramacinjava, queencapsulalalgicadenegociosdela aplicacin. ElcontenedorEJBproporcionaservicios comoseguridadytransaccionesasus EnterpriseBeanspermitiendoal desarrolladorlaconstruccinydesarrollo rpidodelosmismos.
BeneficiosdeEnterpriseBeans
ElcontenedorEJBleproporcionaserviciosdel niveldelsistemayeldesarrolladorseconcentra enresolverlosproblemasdelnegocio. Losclientessonmsligerosporquelalgicadel negocioescontenidaenlosbeansynoenel cliente.As,eldesarrolladordelclientenotiene elcdigoqueimplementalalgicadelnegocioo losaccesosalabasededatos. Losbeanssoncomponentesportables.
CundousarEnterpriseBean?
Laaplicacindebeserescalable. Lastransaccionesdebenasegurarla integridaddelosdatos. Laaplicacintendrunavariedadde clientes.
TiposdeEnterpriseBean
Session MessageDriven Actacomounlistener paratiposdemensajes particulares,talescomoel APIdeServiciosde MensajesdeJava.
QuesunaSessionBean?
UnaSessionBeanrepresentauncomponente sencillodentrodeunservidordeaplicacin. Paraaccesarunaaplicacinqueesdesarrollada enelservidor,elclienteinvocalosmtodosde laSessionBean. UnaSessionBeanessimilaraunasesin interactivayaquenoescompartida,tieneslo unclienteynoespersistente. Lasesinpermanecemientraselclienteest conectadoconelservidor
Modosdeadministracindeestado
StatefulSessionBean StatelessSessionBean Noexisteunestadoconversacional entreelclienteyelbean. Cuandoelclienteinvocaunmtodo delbean,lasvariablesdeinstancia beanpuedencontenerunestado, perosloduranteladuracindela invocacin. Exceptodurantelainvocacindeun mtodo,todaslasvariablesde instanciasonequivalentes, permitiendoalcontenedorEJB asignarunainstanciaacualquier cliente.
CundousarSessionBean?
SessionBean Si en un momento dado, solo un cliente tiene acceso a una instancia bean. El estado de un bean no es persistente, existiendo solo por un perodo corto. El bean implementa un servicio web. StatefulSessionBean El estado del bean representa la interaccin entre el bean y un cliente especfico. El bean necesita mantener informacin del cliente a travs de las invocaciones de mtodos. El bean es un mediador entre el cliente y los otros componentes de la aplicacin.
StatelessSessionBean
El estado del bean no tiene datos de un cliente especfico. En una invocacin de mtodo simple, el bean ejecuta una tarea genrica para todos los clientes.
QuesMessageDrivenBean?
Es un Enterprise Bean que permite a las aplicaciones Java EE procesar mensajes asincrnicamente. Losmensajespuedenserenviadosporcualquier componente JEE, una aplicacin JMS o una aplicacinquenousalatecnologaJava. MessageDriven Bean pueden procesar mensajesJMSyotrostiposdemensajes. Se diferencia de un Session Bean en que el cliente no puede accesarlos por medio de interfaces.
CaractersticasdeMessageDrivenBean
Soninvocadosasincrnicamente. No representan directamente datos compartidos en la base de datos, pero pueden acceder y modificaresosdatos. Puedensertransaccionescompletas. Puedenserdecortaduracin.
CundousarMessageDrivenBean?
LosSessionBeanpermitenenviarmensajesJMS y recibirlos sincrnicamente pero no asincrnicamente. Para recibir mensajes asincrnicamente use MessageDrivenBean
UsodelosMessageDrivenBeans
Definiraccesosdeclientesconinterfaces
Slo aplica a Session Bean ya que los MessageDriven Bean no tienen interfaces que definen el acceso de los clientes. Un cliente puede accesar el Session Bean slo a travs de los mtodos definidos en la interface de negocio del Bean. La interfaz del negocio define la vista de cliente de un Bean,losotrosaspectosdelBeansonocultadosalcliente. Las interfaces bien diseadas simplifican el desarrollo y mantenimientodeaplicacionesJEE. Cuando se disea una aplicacin JEE se debe decidir el tipodeaccesopermitidoalcliente:remoto,localoservicio web.
ClientesRemotos
PuedecorrerenotramquinayotraJVM Puede ser un componente web, una aplicacin clienteuotroEnterpriseBean. ParaunclienteremotolalocalizacindelEnterprise Beanestransparente.
Clienteslocales
DebecorrerenlamismaJVMalaquetieneacceso elEnterpriseBean. Puede ser un componente web u otro Enterprise Bean. Para un cliente local, la ubicacin del Enterprise Beannoestransparente.
ClientesLocalesvs.ClientesRemotos
Acoplamiento fuerte o ligero de los beans relacionados. Tiposdeclientes. Distribucindecomponentes. Rendimiento.
ClientesdeServiciosWeb
Unclientedeserviciowebpuedeaccesaruna aplicacinJEEdedosmaneras: El cliente puede accesar un servicio web creadoconJAXWS. El cliente puede invocar los mtodos del negocio utilizando un stateless session bean.
ElcontenidodeunEnterpriseBean
ParadesarrollarunEnterpriseBeansedepe proporcionarlossiguientesarchivos: Clase Enterprise Bean: Implementa los
mtodosdefinidosenlainterfazdelnegocioyalgunos mtodoscallbackdelciclodevida.
EstructuradeunJAREnterpriseBean
Convencionesdenombrespara EnterpriseBean
Enterprisebeansestncompuestospormltiples partes, por ello es til seguir las siguientes convencionesdenombres. Item Nombre Clase Interfazdel negocio
CuandousarEJB:
Transaccionesdenegociosmultisistemas Funcionalidaddistribuida Componentesportables Aplicaciones que necesiten comunicacin asincrona Presenciademltiplesrolesdeseguridad
CuandonousarEJB:
Control por parte de la aplicacin de la concurrencia. Rendimiento. Aplicacionesconpocalgicadenegocio.
Ejemplo:InterfazdeNegocio
packagecart.ejb; importcart.util.BookException; importjava.util.List; importjavax.ejb.Remote; @Remote publicinterfaceCart{ publicvoidinitialize(Stringperson)throwsBookException; publicvoidinitialize( Stringperson, Stringid)throwsBookException; publicvoidaddBook(Stringtitle); publicvoidremoveBook(Stringtitle)throwsBookException; publicList<String>getContents(); publicvoidremove(); }
Ejemplo:StatefulSessionBean
packagecart.ejb; importcart.util.BookException; importcart.util.IdVerifier; importjava.util.ArrayList; importjava.util.List; importjavax.ejb.Remove; importjavax.ejb.Stateful; @Stateful() publicclassCartBeanimplementsCart{ List<String>contents; StringcustomerId; StringcustomerName; publicvoidinitialize(Stringperson)throwsBookException{ if(person==null){ thrownewBookException("Nullpersonnotallowed."); }else{ customerName=person; } customerId="0"; contents=newArrayList<String>(); } publicvoidinitialize( Stringperson, Stringid)throwsBookException{ if(person==null){ thrownewBookException("Nullpersonnotallowed."); }else{ customerName=person;
}
IdVerifieridChecker=newIdVerifier(); if(idChecker.validate(id)){ customerId=id; }else{ thrownewBookException("Invalidid:"+id); } contents=newArrayList<String>(); } publicvoidaddBook(Stringtitle){ contents.add(title); } publicvoidremoveBook(Stringtitle)throwsBookException{ booleanresult=contents.remove(title); if(result==false){ thrownewBookException("\""+title+"\"notincart."); } } publicList<String>getContents(){ returncontents; } @Remove() publicvoidremove(){ contents=null; } }
Ejemplo:StatelessSessionBean
packagecom.sun.tutorial.javaee.ejb.helloservice; importjavax.ejb.Stateless; importjavax.jws.WebMethod; importjavax.jws.WebService; @Stateless @WebService publicclassHelloServiceBean{ privateStringmessage="Hello,"; publicvoidHelloServiceBean(){ } @WebMethod publicStringsayHello(Stringname){ returnmessage+name+"."; } }
Ejemplo:MessageDrivenBean
importjavax.ejb.MessageDriven; importjavax.ejb.MessageDrivenContext; importjavax.ejb.ActivationConfigProperty; importjavax.jms.MessageListener; importjavax.jms.Message; importjavax.jms.TextMessage; importjavax.jms.JMSException; importjavax.annotation.Resource; importjava.util.logging.Logger; publicvoidonMessage(MessageinMessage){ TextMessagemsg=null; try{ if(inMessageinstanceofTextMessage){ msg=(TextMessage)inMessage; logger.info("MESSAGEBEAN:Messagereceived:"+ msg.getText()); }else{ logger.warning( @MessageDriven(mappedName="jms/Queue") "Messageofwrongtype:" publicclassSimpleMessageBean +inMessage.getClass().getName()); implementsMessageListener{ } staticfinalLoggerlogger= }catch(JMSExceptione){ Logger.getLogger("SimpleMessageBean"); e.printStackTrace(); @Resource mdc.setRollbackOnly(); privateMessageDrivenContextmdc; }catch(Throwablete){ te.printStackTrace(); publicSimpleMessageBean(){ } } } }
Gracias
RenyAlvarado