Publicar el Servicio al Exterior - RMI

PEDRO DELGADO YARZA 2014/01/29 13:51

Para poder publicar un EJB al exterior y que este disponible para otras aplicaciones, se utiliza la API RMI.

Para realizar esto necesitamos tener definida una interface remota, que contendra los métodos que estarán accesibles desde el exterior. Para ello se utiliza la anotación @Remote.

   package prueba.ejb;
 
   @Remote
   public interface ServicioPruebaUmu  {
	...
   }

Una vez creada la interface y declarados los métodos, tenemos que modificar la implementación del EJB para que implemente el interface remoto (puede también seguir implementando el local, aunque en remoto sólo se expondrán los métodos de la interfaz remota).

También debemos modificar la implementación del EJB para que nos permita indicar el nombre con que se registra en JNDI el proxy remoto y la clase local.

Veamos un pequeño ejemplo donde ServicioPruebaUmu es la interface remota y ServicioPruebaUmuLocal es la interface local. Las anotaciones utilizadas son:

  • Stateless: Declaramos el EJB sin estado.
   package prueba.ejb;
 
   import javax.ejb.Stateless;
 
   @Stateless
   public class ServicioPruebaUmuImpl implements ServicioPruebaUmu {
	...
   }

Ahora ya tenemos registrado el EJB para su utilización remota, desde otras aplicaciones.

Para configurar un cliente y obtener un EJB remoto de Weblogic 12, tenemos que crear un Context de la API NAMING de JAVA, con los siguientes propiedades:

String ejbRemotoJndi = "java:global/prototipo-ear/prototipo-ejb/PruebaBean!action.interfaces.PruebaRemote";
 
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.SECURITY_PRINCIPAL, "usuario-rmi");
properties.put(Context.SECURITY_CREDENTIALS, "pwd-usuario-rmi");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001/");
Context ctx;
try {
    ctx = new InitialContext( properties );
    PruebaRemote pr = (PruebaRemote) ctx.lookup( ejbRemotoJndi );
    pr.lanzaPrueba();
}
catch ( NamingException e ) {
    log.error("Error al obtener el EJB Remoto '#0'", e, ejbRemotoJndi);
}
finally {
    try {
        ctx.close();
    }
    catch (Exception e) {
        // a failure occurred
    }
}

donde:

  • ejbRemotoJndi: es la ruta JNDI donde esta publicado el EJB remoto.
  • PruebaRemote: es la interface remota.
  • usuario-rmi: es un usuario dado de alta en el servidor weblogic.
  • pwd-usuario-rmi: es la contraseña del usuario de weblogic.

Para poder crear usuarios (diferentes al administrador del serviodor), tenemos que seguir los siguientes pasos:

  • Arrancar el servidor.
  • fdw2.0/fundeweb2.0/gt/publicar_el_servicio_al_exterior_-_rmi.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)