ENTERPRISE JAVA BEANS
ACCESO AL EJB EJB_HOME. Accesible mediante JNDI. Permite crear y destruir EJB. EJB_OBJECT Expone los métodos del negocio del EJB. EL CONTENEDOR INTERCEPTA LAS INVOCACIONES SOBRE AMBAS INTERFACES.
API SOPORTADOS POR EL EJB EJB JDNI RMI JAVA IDL Servlets. JSP. JMS JTA. JTS. JDBC
BENEFICIOS DEL MODELO (1) Simplificación del proceso de desarrollo Gestión de recursos y componentes transparente. Reutilización. Acceso multiprotocolo. Servicios avanzados ( control transaccional, seguridad, redundancia, etc.)
Aplicaciones multinivel. –Cliente ligero-lógica de negocios- Datos. –Escalabilidad. –Mantenibilidad –Distribución Portabilidad de Componentes. Independencia de arquitectura subyacente. BENEFICIOS DEL MODELO (2)
SERVIDOR–CONTENEDOR-COMPONENTE El servidor de aplicaciones ejecuta el código de un componente dado en el contexto de un contenedor. El contenedor gestiona los recursos y ejecución de un componente y su interacción con sistemas externos (entorno de ejecución).
INTERFACE REMOTA extends Métodos que ofrece el Bean a los Clientes INTERFACE EJBObject
INTERFACE REMOTA package Servidor; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface MiEJB extends EJBObject { public String getFirstEJB () throws RemoteException; } La interface remota incluye los métodos que ofrece el bean A sus usuarios. En este caso solo tenemos getFirstEJB
INTERFACE HOME_EJB package Servidor; import java.rmi.*; import javax.ejb.*; public interfaceMiEJBHome extends EJBHome { MiEJB create( ) throws CreateException, RemoteException; }
CLASE SESSION BEAN package Servidor; import java.rmi.RemoteException; import javax.ejb.*; public class MiEJBClass implements SessionBean { public String getFirstEJB () Throws RemoteException { String aString = “mi primer EJB”; return aString; } public void ejbCreate() throws RemoteException, CreateException {} public void ejbActivate() throws RemoteException {} public void ejbPassivate() throws RemoteException {} public void ejbRemove() throws RemoteException {} public void setSessionContext(SessionContext ctx) throws RemoteException {} }
DESCRIPTOR DE IMPLANTACION SessionBean Servidor. MiEJBClass { BeanHomeName = “jdk1.2.2/MisEJB”; HomeInterfaceClassName = Servidor. MiEJBHome; RemoteInterfaceClassName = Servidor.MiEJB; AllowedIdentities = (PUBLIC); SessionTimeout = 0; StateManagementType = STATEFUL_SESSION; RunAsMode = CLIENT_IDENTIFY; }
CLIENTE package Cliente; import Servidor.MiEJB; import Servidor.MiEJBHome; import oracle.aurora.jndi.sess_iiop.ServiceCtx; import java.naming.Context; import java.naming.InitialContext; import java.util.Hastable; import java.sql;
CLIENTE public class miCliente { public static void main (String arg[]) { Hastable env = new Hastable(); env.put(Context.URL_PKG_PREFIXES,”Oracle.aurora.jndi”); env.put(Context.SECURITY_PRINCIPAL,”Scott”); env.put(Context.SECURITY_CREDENTIALS,”tiger”); env.put(Context.SECUTITY_AUTHENTICATION, ServiceCtx.NON_SSL_LOGIN); Context ctx = new InitialContext(env); MiEJBHome home = null; MiEJB remoto = null;
CLIENTE try { home = (MiEJBHome) ctx.loopup( ServiceURL+ObjectName); Bean = home.created(); } catch (Exception e) { System.out.println(“No se pudo ubicar el objeto remoto”); } try { String salida = null; salida = Bean. getFirtEJB( ); System.out.println (“regreso: “+ salida ); } Catch (Exception e1) { System.out.println(“No se pudo acceder al metodo remoto”); } } }}