Sunteți pe pagina 1din 36

Por el experto: Ing.

Ubaldo Acosta

www.globalmentoring.com.mx
•El objetivo del ejercicio es acceder desde el cliente EJB al EJB del proyecto sg-jee-web. A
continuación se muestra el resultado (los datos pueden variar).

www.globalmentoring.com.mx
Este es el Diagrama de Clases del Ejercicio, donde se pueden observar la Arquitectura de nuestro Sistema:

Cliente
EJB (Local) Local

Remoto
Cliente
EJB (Remoto)

www.globalmentoring.com.mx
Creamos el siguiente proyecto ClienteEJBSeguridad :

www.globalmentoring.com.mx
Creamos el siguiente proyecto ClienteEJBSeguridad:

www.globalmentoring.com.mx
Creamos el siguiente proyecto ClienteEJBSeguridad:

www.globalmentoring.com.mx
Archivo pom.xml: Dar click para ir al código
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-
4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mx.com.gm.sga</groupId>
<artifactId>ClienteEJBSeguridad</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.glassfish.main.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>5.0</version>
</dependency>
</dependencies>
</project>
www.globalmentoring.com.mx
Hacemos clean & build para en caso necesario descargar las librerías del proyecto vía Maven:

www.globalmentoring.com.mx
Agregamos un archivo de configuración llamado login.conf a nivel raíz de la aplicación. Esto es
necesario para poder hacer login vía el cliente EJB:

www.globalmentoring.com.mx
Agregamos un archivo de configuración llamado login.conf a nivel raíz de la aplicación. Esto es
necesario para poder hacer login vía el cliente EJB:

www.globalmentoring.com.mx
Agregamos un archivo de configuración llamado login.conf a nivel raíz de la aplicación. Esto es
necesario para poder hacer login vía el cliente EJB:

www.globalmentoring.com.mx
Si vemos el tabulador de Files, podemos observar que el archivo login.conf se ha creado
correctamente. Este archivo no se visualizará en el tabulador de Projects, solo en este
tabulador de Files:

www.globalmentoring.com.mx
Archivo login.config: Dar click para ir al código
default {
com.sun.enterprise.security.auth.login.ClientPasswordLoginModule required;
};

www.globalmentoring.com.mx
Agregamos las clases Java que utilizaremos en el cliente EJB. Solo agregamos lo esencial
para que se reconozcan los tipos o clases Java que utilizaremos: Creamos la clase
Persona.java

www.globalmentoring.com.mx
Creamos la clase Persona.java

www.globalmentoring.com.mx
Archivo Persona.java: Dar click para ir al código
package mx.com.gm.sga.domain;

import java.io.Serializable;

public class Persona implements Serializable {

private static final long serialVersionUID = 1L;

private Integer idPersona;

private String nombre;

private String apellidoPaterno;

private String apellidoMaterno;

private String email;

private String telefono;

public Persona() {
}

public Persona(Integer idPersona) {


this.idPersona = idPersona;
}

www.globalmentoring.com.mx
Archivo Persona.java: Dar click para ir al código
public Persona(String nombre, String apePaterno, String apeMaterno,
String email, String telefono) {
this.nombre = nombre;
this.apellidoPaterno = apePaterno;
this.apellidoMaterno = apeMaterno;
this.email = email;
this.telefono = telefono;
}

public Persona(Integer idPersona, String nombre, String apellidoPaterno, String email) {


this.idPersona = idPersona;
this.nombre = nombre;
this.apellidoPaterno = apellidoPaterno;
this.email = email;
}

public Persona(Integer idPersona, String nombre, String apellidoPaterno, String apellidoMaterno,


String email, String telefono) {
this.idPersona = idPersona;
this.nombre = nombre;
this.apellidoPaterno = apellidoPaterno;
this.apellidoMaterno = apellidoMaterno;
this.email = email;
this.telefono = telefono;
}

public Integer getIdPersona() {

}
return idPersona;
www.globalmentoring.com.mx
Archivo Persona.java: Dar click para ir al código
public void setIdPersona(Integer idPersona) {
this.idPersona = idPersona;
}

public String getNombre() {


return nombre;
}

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getApellidoPaterno() {


return apellidoPaterno;
}

public void setApellidoPaterno(String apellidoPaterno) {


this.apellidoPaterno = apellidoPaterno;
}

public String getApellidoMaterno() {


return apellidoMaterno;
}

public void setApellidoMaterno(String apellidoMaterno) {


this.apellidoMaterno = apellidoMaterno;
}
www.globalmentoring.com.mx
Archivo Persona.java: Dar click para ir al código
public String getEmail() {
return email;
}

public void setEmail(String email) {


this.email = email;
}

public String getTelefono() {


return telefono;
}

public void setTelefono(String telefono) {


this.telefono = telefono;
}

@Override
public String toString() {
return "Persona{" + "idPersona=" + idPersona + ", nombre=" + nombre + ", apellidoPaterno=" + apellidoPaterno + ",
apellidoMaterno=" + apellidoMaterno + ", email=" + email + ", telefono=" + telefono + '}';
}
}

www.globalmentoring.com.mx
Creamos la clase PersonaServiceRemote.java:

www.globalmentoring.com.mx
Creamos la clase PersonaServiceRemote.java:

www.globalmentoring.com.mx
Archivo PersonaServiceRemote.java: Dar click para ir al código
package mx.com.gm.sga.servicio;

import java.util.List;
import mx.com.gm.sga.domain.Persona;

public interface PersonaServiceRemote {

public List<Persona> listarPersonas();

public Persona encontrarPersonaPorId(Persona persona);

public Persona encontrarPersonaPorEmail(Persona persona);

public void registrarPersona(Persona persona);

public void modificarPersona(Persona persona);

public void eliminarPersona(Persona persona);


}

www.globalmentoring.com.mx
Creamos la clase ClientePersonaService.java:

www.globalmentoring.com.mx
Creamos la clase ClientePersonaService.java:

www.globalmentoring.com.mx
Archivo ClientePersonaService.java: Dar click para ir al código
package prueba;

import com.sun.enterprise.security.ee.auth.login.ProgrammaticLogin;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import mx.com.gm.sga.domain.Persona;
import mx.com.gm.sga.servicio.PersonaServiceRemote;

public class ClientePersonaService {

public static void main(String[] args) {

System.out.println("Iniciando llamada al EJB desde el cliente\n");

String authFile = "login.conf";


System.setProperty("java.security.auth.login.config", authFile);
ProgrammaticLogin programmaticLogin = new ProgrammaticLogin();
programmaticLogin.login("admin", "admin".toCharArray());
www.globalmentoring.com.mx
Archivo ClientePersonaService.java: Dar click para ir al código
try {
Context jndi = new InitialContext();
PersonaServiceRemote personaService = (PersonaServiceRemote)
jndi.lookup("java:global/sga-jee-web/PersonaServiceImpl!mx.com.gm.sga.servicio.PersonaServiceRemote");

List<Persona> personas = personaService.listarPersonas();

for (Persona persona : personas) {


System.out.println(persona);
}
System.out.println("\nFin llamada al EJB desde el cliente");
} catch (NamingException e) {
e.printStackTrace(System.out);
}
}
}

www.globalmentoring.com.mx
Ejecutamos la clase ClientePersonaService.java:

www.globalmentoring.com.mx
Podemos observar el resultado (los datos pueden variar) de ejecutar el listadoPersonas del
EJB, como hemos visto el código ya ha agregado las credenciales de un usuario válido. Nota:
La aplicación de sga-jee-web ya debe estar desplegada y funcionando en Glassfish, ya que de
lo contrario no se podrá ejecutar la llamada al servidor:

www.globalmentoring.com.mx
Creamos la clase ClientePersonaServiceConIP.java:

www.globalmentoring.com.mx
Creamos la clase ClientePersonaServiceConIP.java:

www.globalmentoring.com.mx
Archivo ClientePersonaServiceConIP.java: Dar click para ir al código
package prueba;

import com.sun.enterprise.security.ee.auth.login.ProgrammaticLogin;
import java.util.List;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import mx.com.gm.sga.domain.Persona;
import mx.com.gm.sga.servicio.PersonaServiceRemote;

public class ClientePersonaServiceConIP {

public static void main(String[] args) {

System.out.println("Iniciando llamada remota al EJB desde el cliente\n");

String authFile = "login.conf";


System.setProperty("java.security.auth.login.config", authFile);
ProgrammaticLogin programmaticLogin = new ProgrammaticLogin();
programmaticLogin.login("admin", "admin".toCharArray());

www.globalmentoring.com.mx
Archivo ClientePersonaServiceConIP.java: Dar click para ir al código
try {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");

// optional. Default localhost. Aqui se cambia la IP del servidor donde esta Glassfish
props.setProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1");

// optional. Puerto por Default 3700. Solo se necesita cambiar si el puerto no es 3700.
//props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
Context jndi = new InitialContext(props);
PersonaServiceRemote personaService = (PersonaServiceRemote)
jndi.lookup("java:global/sga-jee-web/PersonaServiceImpl!mx.com.gm.sga.servicio.PersonaServiceRemote");

List<Persona> personas = personaService.listarPersonas();

for (Persona persona : personas) {


System.out.println(persona);
}
System.out.println("\nFin llamada remota al EJB desde el cliente");
} catch (NamingException e) {
e.printStackTrace(System.out);
}
}
}

www.globalmentoring.com.mx
Ejecutamos la clase ClientePersonaServiceConIP.java:

www.globalmentoring.com.mx
Podemos observar el resultado (los datos pueden variar) de ejecutar el listadoPersonas del
EJB desde un cliente con código para acceder de manera remota (desde otra IP), como
hemos visto el código ya ha agregado las credenciales de un usuario válido. Nota: La
aplicación de sga-jee-web ya debe estar desplegada y funcionando en Glassfish, ya que de lo
contrario no se podrá ejecutar la llamada al servidor:

www.globalmentoring.com.mx
Con este ejercicio hemos creado el cliente para agregar el usuario y
password y así poder acceder al EJB que ya tiene seguridad del lado del
servidor.

Creamos tanto un proyecto con un cliente que se ejecuta de manera local o


también creamos un cliente que se puede ejecutar de manera remota desde
otra IP.

www.globalmentoring.com.mx
Por: Ing. Ubaldo Acosta

www.globalmentoring.com.mx

S-ar putea să vă placă și