====== Publicar el Servicio al Exterior - RMI ====== --- //[[pedrody@um.es|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. ===== Cliente de un EJB Remoto ===== 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. ===== Crear un Usuario para JNDI ===== Para poder crear usuarios (diferentes al administrador del serviodor), tenemos que seguir los siguientes pasos: * Arrancar el servidor. * ===== Bibliografia y Referencia ===== * [[https://docs.oracle.com/cd/E13222_01/wls/docs81/jndi/jndi.html|Programming WebLogic JNDI]] * [[https://docs.oracle.com/middleware/1212/wls/INTRO/ejbs.htm#INTRO255|Oracle® Fusion Middleware Understanding Oracle WebLogic Server - 12 Enterprise JavaBeans (EJBs)]] * [[https://docs.oracle.com/cd/E24329_01/web.1211/e24378/wlthint3client.htm#SACLT379|Fusion Middleware Programming Stand-alone Clients for Oracle WebLogic Server - 3 Developing a WebLogic Thin T3 Client]] * [[https://docs.oracle.com/middleware/1212/wls/EJBAD/implementing.htm#EJBAD127|Oracle® Fusion Middleware Developing Enterprise JavaBeans for Oracle WebLogic Server - 4 Iterative Development of Enterprise JavaBeans]] * [[http://pauldone.blogspot.com.es/2013/04/load-balancing-t3-initial-context.html|Load Balancing T3 InitialContext Retrieval for WebLogic using Oracle Traffic Director]] * [[http://thegreyblog.blogspot.com.es/2010/09/references-to-ejbs-outside-your.html|References to EJBs Outside Your Application With Oracle WebLogic]] * [[http://thegreyblog.blogspot.com.es/2010/09/ejb-31-global-jndi-access.html|EJB 3.1 Global JNDI Access]] * [[http://biemond.blogspot.com.es/2009/12/ejb-session-bean-security-in-weblogic.html|EJB Session Bean Security in Weblogic]] * [[https://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html|The Java EE 6 Tutorial - Accessing Enterprise Beans]]