0% encontró este documento útil (0 votos)
46 vistas29 páginas

Tipos y Ejemplos de EJBs en Java

Enterprise JavaBeans (EJBs) son componentes de software que encapsulan la lógica de negocio y son reusables. EJBs existen en diferentes tipos como de sesión y mensajería. Los EJBs de sesión pueden ser stateless, stateful o singleton.

Cargado por

david
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
46 vistas29 páginas

Tipos y Ejemplos de EJBs en Java

Enterprise JavaBeans (EJBs) son componentes de software que encapsulan la lógica de negocio y son reusables. EJBs existen en diferentes tipos como de sesión y mensajería. Los EJBs de sesión pueden ser stateless, stateful o singleton.

Cargado por

david
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Enterprise JavaBeans (EJBs)

Cesar Julio Bustacara M.


Tier de Negocio
Tier de Negocio
Definición


Enterprise JavaBeans (EJBs)
– Componentes de software que:

Encapsulan la lógica de negocio

Son reusables

Son portables

Se ejecutan por medio de un contenedor

– Es una clase Java pública, que implementa los métodos de negocio e


implementa determinadas interfaces.
Tipos de EJBs


Para cumplir con la funcionalidad de la lógica de negocio, JEE
provee los siguientes tipos de EJBs:
– Sesión: Ejecuta una tarea para un cliente. Opcionalmente,
puede implementar servicios web
– Mensajeria: Actua como un listener para un tipo específico
de mensajes.
Tier de Negocio
Negocio Datos
Tier de Negocio – bajo acoplamiento
Negocio Datos

Fachada

Fachada
Tipos de EJBs de Sesión


Stateful: mantiene en el servidor el estado de la sesión del cliente

Stateless: no mantiene estado

Singleton: existe un sólo bean para toda la aplicación o sea para todos los
clientes por lo que soporta acceso concurrente
EJB de Sesión - Stateless

EJB Container – p.e. WildFly


1 Bean Pool Bean Pool
ues t No.
Req
Client 1 ResvServiceA ResvServiceB
2
ues t No.
Req ResvServiceA

es t No.3
Requ ResvServiceA
Client 2
EJB de Sesión - Stateful

EJB Container – p.e. WildFly


1
ues t No. ResvService
Req
Client 1
2
ues t No.
Req ResvService

es t No.3
Requ
Client 2
Elementos de los EJB de Sesión
Define los servicios públicos Define los servicios públicos
a los clientes remotos a los clientes locales

Clientes en máquinas diferentes

Clientes en JVM diferentes

Clientes en la misma JVM

Paso por valor

Paso por referencia

<<Interface>> <<Interface>>
Remote Local

Provee la implementación
<<Class>>
EJB (código java )
de las interfaces
Wildfly
Wildfly
Cliente
Logica Datos
JVM
Remote Remote

LogicaUsuario
ServiciosUsuario
Local

LogicaUsuario1

La vista de “no-interface” es una variación de la vista local
que expone todos los métodos públicos de negocio de manera
local sin exponer interfaces.


Los clientes que realizan llamadas remotas usan RMI o RMI-IIOP
Ejemplo interface Remote
@ expone interface
remota.

@ clientes en
diferentes VM ó en
diferentes nodos

BankAccountBean
@ expone interface
@ clientes en misma local.
VM

<<Local Interface>>
BankAccount

VerifierBankAccount

BankAccountBean
Ejemplo de un EJB de Sesión de tipo stateless
Interface Remote

import javax.ejb.Remote;

/**
* This is the business interface for Ejemplo01 enterprise bean.
*/

@Remote
public interface Ejemplo01Remote {
public Usuario validarUsuario(String userName, String password);
}
Interface Local

import javax.ejb.Local;

/**
* This is the business interface for Ejemplo01 enterprise bean.
*/

@Local
public interface Ejemplo01Local {

}
Implementacion del EJB
import javax.ejb.Stateless;

@Stateless (name=”Ejemplo01”)
public class Ejemplo01Bean implements Ejemplo01Remote, Ejemplo01Local {

@EJB ServiciosUsuarioLocal usuariosEJB;

/** Creates a new instance of Ejemplo01Bean */


public Ejemplo01Bean() {
}

public Usuario validarUsuario(String userName, String password){


List<Usuario> usuarios = usuariosEJB.findUsuario(userName, password);
return usuarios.get(0); //recuerden validar la lista
}
}
Aplicación cliente
import Ejemplo01.Ejemplo01Remote;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Main {


public static void main(String[] args) {
try {
Context ctx = new InitialContext();
Ejemplo01Remote ejem = (Ejemplo01Remote) ctx.lookup("Ejemplo01Bean/remote");
System.out.println("Encontrada la referencia : " + ejem. validarUsuario(“admin”, “admin”));
} catch (NamingException ex) {
ex.printStackTrace();
}
}
}
Aplicación cliente2
import Ejemplo01.Ejemplo01Remote;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Main {


public static void main(String[] args) {
try {
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
environment.put(Context.PROVIDER_URL, "jnp://localhost:1099"); // IP Maquina Remota
InitialContext context = new InitialContext(environment);

Ejemplo01Remote ejem = (Ejemplo01Remote) context.lookup("Ejemplo01Bean/remote");


System.out.println("Encontrada la referencia : " + ejem.getCadena());
} catch (NamingException ex) {
ex.printStackTrace();
}
}
}
EjemploEE01 - EJBs Stateless (WildFly 17)

Cliente java Servidor WildFly

LocalizadorServicios http FachadaLogicaBeanRemote

8080

http
Main FachadaLogicaBean
JNDI
Interface Remote

package logica;
import javax.ejb.Remote;

@Remote
public interface FachadaLogicaBeanRemote {
String servicio01(String text);
}
EJB Stateless
package logica;

import javax.ejb.Remote;
import javax.ejb.Stateless;

/**
* Session Bean implementation class FachadaLogicaBean
*/
@Stateless
@Remote(FachadaLogicaBeanRemote.class)
public class FachadaLogicaBean implements FachadaLogicaBeanRemote {

/**
* Default constructor.
*/
public FachadaLogicaBean() {
// TODO Auto-generated constructor stub
}

public String servicio01(String text) {


return ("Se recibió solicitud para el servicio01: " + text);
}
}
Cliente del EJB

import javax.naming.*;
import logica.FachadaLogicaBeanRemote;

public class Main {


public static void main(String[] args) throws NamingException {
// Crear el localizador de servicios
LocalizadorServicios serviceLocator = new LocalizadorServicios();
// Obtener la referencia remota usando el localizador de servicios
FachadaLogicaBeanRemote fachadaLogica = serviceLocator.getRemoteFachadaLogica();
// Invocar el servicio usando la referencia remota
System.out.println(fachadaLogica.servicio01("Servicio01"));
}
}
Localizador de servicios
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import logica.FachadaLogicaBean;
import logica.FachadaLogicaBeanRemote;

public class LocalizadorServicios {

public FachadaLogicaBeanRemote getRemoteFachadaLogica() throws NamingException {


return this.lookupFachadaLogicaBean("ejb:");
}

private FachadaLogicaBeanRemote lookupFachadaLogicaBean(String namespace) throws NamingException {

Context ctx = createInitialContext();


String appName = "";
String moduleName = "EjemploEE01";
String distinctName = "";
String beanName = FachadaLogicaBean.class.getSimpleName();
String viewClassName = FachadaLogicaBeanRemote.class.getName();

return (FachadaLogicaBeanRemote) ctx.lookup(namespace + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
}

private static Context createInitialContext() throws NamingException {


Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
jndiProperties.put("jboss.naming.client.ejb.context", true);
return new InitialContext(jndiProperties);
}
}
Taller No.2

A ) Crear una aplicación de 2-niveles para manejar usuarios y autenticación

Contenedor EJBs
WildFly 19

8080
Servicios Negocio ServiciosDatos DB

Entidades
Taller No.2

B) Crear una aplicación de 3-niveles para manejar usuarios y autenticación

Contenedor EJBs Contenedor EJBs


WildFly 19.1 WildFly 19.2

8080 8090
Servicios Negocio ServiciosDatos DB

JVM

Entidades
Entidades
Wildfly
Wildfly
Cliente
Jboss-client.jar Logica Jboss-client.jar Datos
JVM
Remote Remote

LogicaUsuario
ServiciosUsuario
Local

LogicaUsuario1
Mysql-driver.jar

ServiciosLogica.jar ServiciosDatos.jar Datos.jar


Logica.jar

También podría gustarte