Ejercicios de Acceso Remoto
Acceso remoto con HttpInvoker
Vamos a acceder a la búsqueda de usuarios de manera remota. Para ello creamos un interfaz con la operación accesible desde el exterior
package es.ua.jtech.amigosSpring.negocio; import java.util.List; import es.ua.jtech.amigosSpring.AmigosSpringException; import es.ua.jtech.amigosSpring.modelo.Sexo; import es.ua.jtech.amigosSpring.modelo.UsuarioTO; public interface IGestorUsuariosRemoto { public List<UsuarioTO> buscar(String localidad, int edadMin, int edadMax, Sexo sexo) throws AmigosSpringException; }
Por supuesto, habrá que hacer que la clase GestorUsuarios implemente este nuevo interfaz.
Aviso
En UsuarioDAO hay un "agujero de seguridad" porque en el método
crearUsuarioTO se rellena también el password del usuario. Evidentemente
esto es un problema si vamos a permitir el acceso remoto al usuario. Quitar la línea
192 de UsuarioDAO.
Seguir los pasos necesarios para hacer accesible remotamente el interfaz mediante HttpInvoker:
- Crear la clase y el interfaz anteriores en su paquete.
- Convertir los Transfer Object en serializables, porque deben viajar por la red. Bastará con "Sexo" y "UsuarioTO"
- Mapear el servlet "Dispatcher" también con las URL de tipo "/remoting"
- En el "dispatcher-servlet.xml", configurar el bean necesario para la parte del servidor. Una vez creado, podéis comprobar que está inicializado intentando acceder a través de un navegador a su URL. No funcionará, ya que el HttpInvoker no devuelve HTML, pero al menos mostrará una excepción Java de tipo EOFException, y sabremos "que está ahí"
- Crear un proyecto de tipo Aplicación Java (de consola) para implementar el cliente. Necesitaremos añadir a este proyecto:
- las librerías de Spring 2.5 y la "commons-logging" de Apache (copiadlas del proyecto AmigosSpring)
- Commons HTTPClient y commons-codec para el cliente HTTP
- Además las clases referenciadas: el interfaz IGestorUsuariosRemoto y las clases dependientes (UsuarioTO, Sexo y AmigosSpringException)
- La clase Main del proyecto cliente debe cargar el XML con el bean necesario para comunicarse desde este lado y accederá a los datos de un usuario, imprimiéndolos por la salida estándar.
Eficiencia en el acceso remoto
Hacer accesible el "IGestorUsuariosRemoto" también mediante RMI y comparar la eficiencia de este método contra la de HttpInvoker haciendo 10000 veces de manera remota la misma búsqueda.