Servicios Web ligeros
description
Transcript of Servicios Web ligeros
Servicios Web ligerosServicios Web ligerosAlternativas al protocoloAlternativas al protocolo
SOAP para la creación de SOAP para la creación de servicios distribuidosservicios distribuidos
Noé Fernández IglesiasNoé Fernández Iglesias
IntroducciónIntroducción
Popularización de los Servicios WebPopularización de los Servicios Web HTTPHTTP XMLXML
Protocolo SOAPProtocolo SOAP
SOAPSOAP
Protocolo de referencia para la creación Protocolo de referencia para la creación de SWde SW
Mensajes XML sobre HTTPMensajes XML sobre HTTP
Fichero de definición WSDLFichero de definición WSDL
UDDI UDDI
SOAPSOAP
Principales críticas al protocoloPrincipales críticas al protocolo ComplejoComplejo
Mensajes XML Mensajes XML Sobrecarga de redSobrecarga de red
WSDLWSDL
Demasiado pesado para pequeños dispositivosDemasiado pesado para pequeños dispositivos
Alternativas a SOAPAlternativas a SOAP
Caucho TechnologyCaucho Technology HessianHessian BurlapBurlap
Spring frameworkSpring framework HTTP invokerHTTP invoker
HessianHessian
Protocolo binario sobre HTTPProtocolo binario sobre HTTP
LigeroLigero
Los servicios son desplegados como servletsLos servicios son desplegados como servlets
No necesita fichero de descripción (WSDL, IDL, …)No necesita fichero de descripción (WSDL, IDL, …)
Usa un mecanismo propio de serializaciónUsa un mecanismo propio de serialización
Implementado en varias plataformasImplementado en varias plataformas Java, C++, C#, PHP, Ruby, PythonJava, C++, C#, PHP, Ruby, Python
HessianHessian
Creación de un servicio con Hessian:Creación de un servicio con Hessian:
Creación de una interfaz Java a modo de API Creación de una interfaz Java a modo de API pública.pública.
Creación de un cliente del servicio mediante Creación de un cliente del servicio mediante HessianProxyFactoryHessianProxyFactory..
Creación de la clase de implementación del Creación de la clase de implementación del servicio.servicio.
Despliegue y configuración del servicio en un Despliegue y configuración del servicio en un contenedor de servlets.contenedor de servlets.
HessianHessian
Creación de una interfaz Java a modo de Creación de una interfaz Java a modo de API públicaAPI pública
public interface HWService { public String helloWorld(); }
HessianHessian
Creación de un cliente del servicio Creación de un cliente del servicio mediante mediante HessianProxyFactoryHessianProxyFactory
public class BasicClient { public static void main(String []args) throws Exception {
String url = "http://localhost/helloWorld";
HessianProxyFactory factory = new HessianProxyFactory();
HWService service = (HWService) factory.create(HWService.class, url);
System.out.println("Hello: " + basic.hello()); }}
HessianHessian
Creación de la clase de implementación Creación de la clase de implementación del serviciodel servicio
public class MyService implements HWService {
public String hello() { return "Hello, world"; } }
HessianHessian
Despliegue y configuración del servicio en Despliegue y configuración del servicio en un contenedor de servletsun contenedor de servlets
<web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.framework.HessianServlet</servlet-class> <init-param> <param-name>home-class</param-name> <param-value>MyService</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>HWService</param-value> </init-param> </servlet>
<servlet-mapping> <url-pattern>/helloWorld</url-pattern> <servlet-name>hello</servlet-name> </servlet-mapping></web-app>
BurlapBurlap
Versión XML de HessianVersión XML de Hessian
Mensajes SML sobre HTTPMensajes SML sobre HTTP
Los servicios son desplegados como servletsLos servicios son desplegados como servlets
No necesita fichero de descripción (WSDL, IDL, …)No necesita fichero de descripción (WSDL, IDL, …)
Usa un mecanismo propio de serializaciónUsa un mecanismo propio de serialización
Implementado actualmente sólo en JavaImplementado actualmente sólo en Java
BurlapBurlap
Creación de un servicio con Burlap:Creación de un servicio con Burlap:
Creación de una interfaz Java a modo de API Creación de una interfaz Java a modo de API pública.pública.
Creación de un cliente del servicio mediante Creación de un cliente del servicio mediante BurlapBurlapProxyFactoryProxyFactory..
Creación de la clase de implementación del Creación de la clase de implementación del servicio.servicio.
Despliegue y configuración del servicio en un Despliegue y configuración del servicio en un contenedor de servlets.contenedor de servlets.
HTTP invokerHTTP invoker
Solución del framework Spring para el desarrollo Solución del framework Spring para el desarrollo de servicios remotos.de servicios remotos.
Funciona sobre HTTPFunciona sobre HTTP
Utiliza la serialización de JavaUtiliza la serialización de Java
Sencilla implementación y despliegue de Sencilla implementación y despliegue de servicios (pasos similares a Hessian y Burlap)servicios (pasos similares a Hessian y Burlap)
HTTP invokerHTTP invoker
Creación de un servicio con HTTP Creación de un servicio con HTTP invoker:invoker:
Creación de una interfaz del servicio e Creación de una interfaz del servicio e implementación de la misma.implementación de la misma.
Exportación del servicio mediante la Exportación del servicio mediante la definición de un bean de Spring.definición de un bean de Spring.
Despliegue del servicio en un contenedor de Despliegue del servicio en un contenedor de servlets.servlets.
Creación del bean de Spring para el cliente.Creación del bean de Spring para el cliente.
HTTP invokerHTTP invoker
Exportación del servicio mediante la Exportación del servicio mediante la definición de un bean de Spring :definición de un bean de Spring :
<bean name="/MyService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service"> <ref bean="myService"/> </property>
<property name="serviceInterface"> <value>com.httpInvoker.example.MyService</value> </property>
</bean>
HTTP invokerHTTP invoker
Despliegue del servicio en un contenedor Despliegue del servicio en un contenedor de servlets :de servlets :
<servlet> <servlet-name>myServiceHttpInvoker</servlet-name> <servlet-class>
org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>3</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>myServiceHttpInvoker</servlet-name> <url-pattern>/remoting/*</url-pattern> </servlet-mapping>
HTTP invokerHTTP invoker
Creación del bean de Spring para el Creación del bean de Spring para el cliente :cliente :
<bean id="service" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> <property name="serviceUrl"> <value>http://localhost/remoting/MyService</value> </property> <property name="serviceInterface"> <value>com.httpInvoker.example.MyService</value> </property> <property name="httpInvokerRequestExecutor"> <bean class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor"/> </property> </bean>
HTTP invokerHTTP invoker
Invocación del servicio:Invocación del servicio:
MyService service = (MyService)context.getBean("service");service.hello();
ConclusionesConclusiones
¿Cuándo usar cada protocolo?¿Cuándo usar cada protocolo? Tenemos control sobre el servicio y el clienteTenemos control sobre el servicio y el cliente
Hessian, Burlap, HTTP invokerHessian, Burlap, HTTP invoker
Poco ancho de banda: Hessian, BurlapPoco ancho de banda: Hessian, Burlap
Clientes de diversas plataformasClientes de diversas plataformasHessianHessian
Aplicaciones complejas, diversos protocolos, Aplicaciones complejas, diversos protocolos, funcionalidad prima sobre la velocidadfuncionalidad prima sobre la velocidad
SOAPSOAP