Вы находитесь на странице: 1из 42

JEEEnterpriseJavaBeans

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

Interpretado Fuertemente tipificado Dinmico

Robusto

LaplataformaJava

JavaVirtualMachine
Esunaaplicacinque representaaun procesadorgenrico enelcualcorrenlos bytecodesdeJava. HacequeJavasea independientede plataforma.
Implementacin Concreta

Aspectos
Especificacin abstracta

JVM Instancia en Tiempo de Ejecucin.

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

Capa de sistemas de informacin empresarial

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

Capa de sistemas de informacin empresarial

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.

Ejecutaunatareapara uncliente. Opcionalmentepuede implementarunservicio web.

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.

Lasvariablesdeinstancia representanelestadodeuna nicasesinclientebean. Elestadoesllamadoestado conversacionalporqueelcliente interactaconsubean. Elestadoesretenidomientras durelasesin,cuandolasesin finalizaelestadodesaparece.

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.

Interfacesdelnegocio: La interfazdelnegocio Clases de ayuda (Helper):

define los mtodos implementados por la clase EnterpriseBean

Otras clases necesitadasporlaclaseEnterpriseBean.

EstructuradeunJAREnterpriseBean

Convencionesdenombrespara EnterpriseBean
Enterprisebeansestncompuestospormltiples partes, por ello es til seguir las siguientes convencionesdenombres. Item Nombre Clase Interfazdel negocio

Sintaxis <name>Bean <name>Bean <name>

Ejemplo CuentaBean CuentaBean Cuenta

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

Вам также может понравиться