PDF de programación - Sesión 6: Acceso remoto. Pruebas - Spring

Imágen de pdf Sesión 6: Acceso remoto. Pruebas - Spring

Sesión 6: Acceso remoto. Pruebas - Springgráfica de visualizaciones

Publicado el 13 de Febrero del 2019
785 visualizaciones desde el 13 de Febrero del 2019
662,9 KB
26 paginas
Creado hace 12a (01/01/2012)
Experto Universitario Java Enterprise

Spring

Sesión 6: Acceso remoto. Pruebas



Experto Universitario Java Enterprise

Indice

• Spring para acceso remoto

– Spring vs. EJB
– Comparación de los protocolos disponibles

• Acceso remoto con HttpInvoker
• Pruebas

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

2



Experto Universitario Java Enterprise

Acceso remoto en Spring
• Hacer accesibles nuestros métodos y clases de negocio desde otras máquinas (no

solo a través de la capa web)

• ¿Por qué acceso remoto?
• Clientes ricos (Swing, etc)
• Servicios web
• Aplicaciones distribuidas

• Spring tiene ciertas limitaciones, relativas sobre todo a transacciones distribuídas

que impliquen objetos remotos. Para eso necesitaremos EJBs

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

3



Experto Universitario Java Enterprise

Opciones en Spring para acceso remoto
• RMI

• Clientes Java, eficiente, problemas con firewalls

• Hessian y Burlap

• Clientes en varios lenguajes, eficiencia media, firewall friendly

• HTTP invoker

• Clientes Spring, eficiencia media, firewall friendly

• Servicios web SOAP

• Estandarización, portabilidad máxima en cuanto a clientes, poca

eficiencia, firewall friendly

• Servicios web REST:

• Superan el coste computacional de los SOAP pero a cambio

requieren más trabajo manual

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

4



Experto Universitario Java Enterprise

REST vs Otros “protocolos”

• En Spring, RMI, HttpInvoker, Hessian y Burlap comparten una filosofía subyacente

común
– Tenemos un objeto remoto que nos da servicios (métodos) y accedemos a ellos como si fuera

un objeto local

– Misma filosofía que en EJBs, como ya veréis en la parte enterprise

• REST es distinto

– Realizamos operaciones prefijadas con las entidades (Create/Read/Update/Delete)

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

5



Experto Universitario Java Enterprise

Indice

• Spring para acceso remoto

– Spring vs. EJB
– Comparación de los protocolos disponibles

• Acceso remoto con HttpInvoker
• Pruebas

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

6



Experto Universitario Java Enterprise

Conceptos básicos
• Exporter: en el servidor. Es un bean de Spring que nos permite exportar el

servicio
• Lo asociará a una URL (un “endpoint”)

• ProxyFactoryBean: en el cliente. Es un bean de Spring que implementa el mismo

interfaz al que queremos acceder y que actúa de proxy
• Llamamos a un objeto local y él delega esa llamada en un objeto remoto, escondiendo los

detalles de la comunicación

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

7



Experto Universitario Java Enterprise

Muy importante
• El bean al que queremos acceder de forma remota debe implementar un interface
• Lo que “veremos” desde el cliente es el interface, no la implementación

– Esto nos permitirá tener un interface local y uno remoto (con menos operaciones, posiblemente)

<<Interface>>
IGestorPedidos

<<Interface>>

IGestorPedidosRemoto

GestorPedidos

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

8



Experto Universitario Java Enterprise

Esquema en el servidor

GestorPedidosExporter

beans-remotos.xml

GestorPedidos

beans-negocio-datos.xml
Contenedor web (p.ej. Tomcat)

PedidosDAO

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

9



Experto Universitario Java Enterprise

Esquema en el cliente

ClaseCliente

Proxy

a IGestorPedidos

JVM cliente

beans-importados.xml

<<Interface>>

IGestorPedidos

beans-remotos.xml

GestorPedidos
beans-negocio-datos.xml

Contenedor web (p.ej. Tomcat)

GestorPedidosExporter

PedidosDAO

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

10



Experto Universitario Java Enterprise

Ejemplo
• Queremos acceder remotamente a este bean

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

11

package servicios; public interface ServicioSaludo { public String getSaludo();}package servicios; @Service("saludador")public class ServicioSaludoImpl implements ServicioSaludo { String[] saludos = {"hola, ¿qué tal?", "me alegra verte", "ola k ase"}; public String getSaludo() { int pos = (int)(Math.random() * saludos.length); return saludos[pos]; }}

Experto Universitario Java Enterprise

HTTP invoker en el servidor
• Inconveniente: el cliente debe ser Java y además requiere las

librerías de Spring

• La comunicación con el cliente se hace a través de un servlet

• Así se puede acceder al servicio remoto por HTTP
• La implementación del servlet ya está hecha en Spring (clase

DispatcherServlet, misma que usábamos en MVC)

• Se asocian ciertas URL con el servlet en el web.xml

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

12



Experto Universitario Java Enterprise

HTTP invoker en el servidor (II)
• El fichero de definición de beans exportados se debe llamar por defecto igual que el

servlet seguido de “-servlet.xml” (y estar en WEB-INF)
• En nuestro ejemplo debe ser “remoting-servlet.xml”

• En él se define/n el/los exporter, bean/s de la clase HttpInvokerServiceExporter

• El endpoint será http://localhost:8080/MI_APLICACION/remoting/saludadorHTTP

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

13

<bean name="/saludadorHTTP" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> <property name="service" ref="saludador"/> <property name="serviceInterface" value="servicios.ServicioSaludo"/></bean

Experto Universitario Java Enterprise

HTTP invoker en el cliente
• Llamar al bean remoto desde Java

• Fichero “clienteHTTP.xml”

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

14

ClassPathXmlApplicationContext contexto = new ClassPathXmlApplicationContext("clienteRMI.xml");ServicioSaludo ss = contexto.getBean(ServicioSaludo.class);System.out.println(ss.getSaludo());<bean id="httpProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:8080/MiAplicacion/remoting/saludadorHTTP"/> <property name="serviceInterface" value="servicios.ServicioSaludo"/></bean>

Experto Universitario Java Enterprise

Indice

• Spring para acceso remoto

– Spring vs. EJB
– Comparación de los protocolos disponibles

• Acceso remoto “clásico”

– HttpInvoker

• Pruebas

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

15



Experto Universitario Java Enterprise

Soporte de Spring para pruebas

• Para pruebas unitarias/de integración

• Uso de un fichero de configuración/perfil distinto al de “producción”
• Resolución de dependencias

• Para pruebas de objetos de acceso a datos

• Soporte de bases de datos embebidas
• Transaccionalidad automática

• Para pruebas de la capa web

• Pruebas fuera del contenedor web

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

16



Experto Universitario Java Enterprise

Pruebas unitarias

• Clase a probar: UsuariosDAOJDBC, que implementa la interfaz:

• Clase de prueba

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

17

public interface IUsuariosDAO { public List<Usuario> listar(); public Usuario getUsuario(String login); public void alta(Usuario u); ...}@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:config/daos-test.xml")public class UsuariosDAOTest { //Spring nos da la instancia del DAO a probar @Autowired IUsuariosDAO dao; //Esto ya no tiene nada de particular de Spring @Test public void testListar() { List<Usuario> lista = dao.listar(); assertEquals(10, lista.size()); }}

Experto Universitario Java Enterprise

Fichero de configuración para pruebas

• Base de datos embebida (por defecto HSQLDB)
• Almacena los datos en memoria, pruebas más rápidas

• Por ahora, el resto igual que “en producción”

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

18

<!-- conexión con la BD de pruebas --><jdbc:embedded-database id="miDataSource"> <jdbc:script location="classpath:db.sql"/> <jdbc:script location="classpath:testdata.sql"/></jdbc:embedded-database> <!-- los DAOs están en este package --><context:component-scan base-package="es.ua.jtech.spring.datos"/>

Experto Universitario Java Enterprise

Transaccionalidad en pruebas

• Deshace automáticamente los efectos de las pruebas ejecutadas

• Util para dejar la BD en un estado conocido

• Debemos declarar un gestor de transacciones en el fichero de configuración de

pruebas

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

19

<jdbc:embedded-database id="miDataSource"> <jdbc:script location="classpath:db.sql"/> <jdbc:script location="classpath:testdata.sql"/></jdbc:embedded-database> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- importante: este "ref" coincide con el "id" del dataSource --> <property name="dataSource" ref="miDataSource"/></bean>@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:config/daos-test.xml")@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)@Transactionalpublic class UsuariosDAOTest {

Experto Universitario Java Enterprise

Pruebas de integración

• Spring resuelve las dependencias, como “en producción”

Acceso remoto. Pruebas

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

20

public interface IUsuariosBO { //Este método debe comprobar que el password coincide co
  • Links de descarga
http://lwp-l.com/pdf15188

Comentarios de: Sesión 6: Acceso remoto. Pruebas - Spring (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad