Hola OSGiAgustín Ramos Fonseca
Objetivo2Proveer un conocimiento básicode las capacidades de la tecnología OSGi,de las herramientas necesarias en su usoy del tipo de aplicaciones que habilita.
AgendaModularización.Introducción a OSGi.Ejemplos básicos.Spring DM.Ejemplos con Spring DM.Enterprise OSGi.Preguntas y respuestas.3
4Modularización
Modularización¿Qué es?Particionar un sistema de acuerdo a ciertas restricciones y principios de diseño, así como una estrategia de desarrollo,gobernando las partes resultantes
Beneficios de la modularizaciónAyuda a  atacar problemas de gran tamañoPartiendo el problema y permitiendo resolverlo incrementalmente. Permite distribuir las tareas de desarrollo entre diferentes personas/equipos.ReusoSeparación de dominios (Verticales y Horizontales) y de sus implementaciones, permitiendo utilizar las implementaciones en contextos distintos.
Beneficios de la modularizaciónMantenibilidadEl entendido común es que sistemas modulares, cuyos módulos presentan alta cohesión y bajo acoplamiento son más fáciles de modificar y extender
ModularizaciónLa modularización efectiva no se logra mediante el simple uso de un lenguaje o una tecnología.Es necesaria la correcta aplicación de principios y técnicas de diseño, así como el diseño de una estrategia de desarrollo.
9Introducción a OSGi
OSGi - ¿Quées?Es la especificación de un modelo de componentes, caracterizado por:Orientado a ServiciosDinámicoTamaño reducido (~ 1Mb)Alto desempeño (No hay classpath)Portable (desde móviles hasta servidores)Soporta múltiples versiones de clases y servicios.10
OSGi - ArquitecturaLa unidad de instalación y reutilizaciónes el ‘bundle’.Los bundles exportan e importan clases y servicios a través de un ‘serviceregistry’.Se programan solo POJO’s.SeguridadBundlesServiciosCiclo de VidaMódulosEntorno de EjecuciónJava VMSistema Operativo Nativo11
¿Para quésirve? (1/2)Creación de…Sistemas altamente modulares.Con características deseables de flexibilidad, orientación a reuso y mantenibilidad.Arquitecturas basadas en plug-ins.e.g. Eclipse, JIRA.12
¿Para quésirve? (2/2)Creación de…Líneas de productos.e.g. Servidores de aplicaciones, middleware.Plataforma para cómputo en la nube.e.g.ParemusServiceFabric13
Historia (1/2)Comenzó como un esfuerzo conjunto en el mercado de dispositivos embebidos.OSGi Alliance fundada en 1999Su éxito le permitió ganar adopción en otros dominios… Eclipse 3.0 basó su modelo de plug-ins sobre OSGi14
Historia (2/2)Versión 4.2 de la especificación liberada en Septiembre del 2009.Primera versión de OSGi Enterprise (4.2) liberada en Marzo del 201015
OSGi - Adopción 1/2Miembros de OSGi Alliance:Oracle, IBM, Samsung, Nokia, IONA, Motorola, NTT, Siemens, Hitachi, Deutsche Telekom, Redhat, Ericsson .. y muchos más.Areas de aplicaciónAutomatizaciónCómputo móvilServidores de aplicacionesCómputo en “La Nube”16
OSGi - Adopción 2/2Actualmente es el fundamento de la nueva generación de servidores de aplicaciones y plataformas SOA.Websphere v6.1 (IBM) GlassFish v3 (Sun)Weblogic v10.3 (Oracle/BEA)JBossJonas v5SpringSourceApplication ServerWSO2 Carbon SOA Platform17
OSGi - Beneficios 1/2Modularidad.Los servicios de la plataforma JEE                   (EJB, Contenedor de servlets, JMS, Mail, Transacciones, etc) se implementan como servicios OSGi opcionales.Extensibilidad.Consecuencia casi directa de la modularidad.Dinamismo real.Permite instalar / actualizar / desinstalar módulos al vuelo (sin reinicios).Impactando la disponibilidad y flexibilidad de las aplicaciones18
OSGi - Beneficios 2/2Nativamente orientado a servicios (SOA).Permite la coexistencia controlada de diferentes versiones de una misma clase y servicio.Las clases pueden estar compartidas entre bundles, o completamente aisladas fuera de un contexto.Cada bundle declara sus dependencias y opcionalmente rangos soportados de versiones para las mismas.19
OSGi - Implementaciones20
21Ejemplo Simple
Bundle (1/2)Es un JAR con un MANIFEST especial, que provee:Mejor control sobre la visibilidad del JARLa noción de ‘Activator’Declaración de dependencias:Hacia otros bundlesHacia paquetes (java)VersionamientoDeclaración de servicios ofrecidos por el bundle.... ¡un mejor JAR !22
Bundle (1/2)Ejemplo de MANIFEST:Bundle-ManifestVersion: 2Bundle-SymbolicName: com.pragprog.HelloWorldBundle-Name: HelloWorldBundle-Version: 1.0.0Bundle-Activator: com.pragprog.hello.HelloWorldImport-Package: org.osgi.frameworkExport-Package: com.pragprog.hello23
Ciclo de vida del bundle24
BundleActivator25import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;public class HelloWorld implements BundleActivator {public void start(BundleContextctx) throws Exception {System.out.println("Hello World!");  }public void stop(BundleContextctx) throws Exception {System.out.println("Goodbye World!");  }}
ServiceRegistration26import org.osgi.framework.ServiceRegistration;import com.pragprog.hello.service.HelloService;public class HelloPublisher implements BundleActivator {   private ServiceRegistration registration;   public void start(BundleContext context) throws Exception {      registration = context.registerService(HelloService.class.getName(), new HelloImpl(), null);   }   public void stop(BundleContext context) throws Exception {registration.unregister();   }}
ServiceReference27public class HelloWorld implements BundleActivator {   public void start(BundleContext context) throws Exception {HelloServicehelloService = getHelloService(context);System.out.println(helloService.getHelloMessage());   }   public void stop(BundleContext context) throws Exception {HelloServicehelloService = getHelloService(context);System.out.println(helloService.getGoodbyeMessage());   }   private HelloServicegetHelloService(BundleContext context) {ServiceReference ref =context.getServiceReference(HelloService.class.getName());      return (HelloService) context.getService(ref);   }}
28Spring DM
¿Quéofrece Spring-DM?Aprovechar las capacidades de OSGiSin abandonar el modelo de programación de Spring.Un nivel más alto de abstracciónTodo el poder de OSGi, sin aprender nuevas APIs.29
Modelo Spring - OSGi30
Exportación de Servicios31<beans xmlns="http://www.springframework.org/schema/beans" xmlns:osgi= ="http://www.springframework.org/schema/osgi"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd 	http://www.springframework.org/schema/beans 	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><osgi:serviceref="pigLatinTranslatorService"		 interface=“…..translator.service.TranslatorService" /></beans>
Consumo de Servicios32<beans xmlns="http://www.springframework.org/schema/beans" xmlns:osgi="http://www.springframework.org/schema/osgi"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd 	http://www.springframework.org/schema/beans 	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><osgi:referencie id=“translatorService"		 interface=“…..translator.service.TranslatorService" /></beans>
33Enterprise OSGi
Enterprise OSGi (1/2)Extensiones del Registro de Servicios.Permite crear bundlesque observan o manipulan actividad del registro de servicios.Soporte de TransaccionesDa soporte de operaciones transaccionales tanto a eventos del ciclo de vida de los componentes como a las aplicaciones.OSGi DistribuidoHabilita la comunicación entre servicios que se ejecutan en distintas JVM’s.34
Enterprise OSGi (2/2)BlueprintContainer.Estandariza el uso de frameworks como Spring sobre OSGi para proveer un modelo de componentes más completo.Spring DM es la implementación de referencia.Soporte a JPA, JDBC y JMXTodo lo que usamos día a día =)35
Objetivo36Arquitecturas Posibles
ArquitecturasPosiblesArquitecturas de micro-kernel:Define las API’s e implementaciones principalesLos componentes van y vienen dinámicamente.A través de plug-ins se provee implementación y extensión de la funcionalidadAdemás de definir nuevos puntos de extensión37
Lineas de Productos (LP)Definición    “Una línea de productos de software es un conjunto de sistemas intensivos en software que comparten un conjunto común y administrado de características, que satisfacen las necesidades específicas de un segmento particular del mercado y que son desarrollados a partir de un conjunto central de bienes (también conocido como “plataforma”) de una manera prescrita”Clements & Northrop38
Objetivo39Conclusiones
Conclusiones (1/2)Los sistemas modulares bien implementados tienen grandes beneficios.Flexibilidad, reuso y mantenibilidad.OSGi es el sistema de módulos para tiempo de ejecución más maduro y adoptado en la plataforma Java.Y un sistema de módulos ya no es un lujo, es una necesidad.40
Conclusiones (2/2)Contempla OSGi y Spring DM como alternativa de implementación de tus aplicaciones/plataformas.Ya estás disfrutando de sus beneficios,                                            pero no lo habías notado =)41
¡Gracias!Twitter : @MachinesAreUsBlog :     http://machinesareus.blogspot.come-mail :  aramos@certum.com

Hola OSGi

  • 1.
  • 2.
    Objetivo2Proveer un conocimientobásicode las capacidades de la tecnología OSGi,de las herramientas necesarias en su usoy del tipo de aplicaciones que habilita.
  • 3.
    AgendaModularización.Introducción a OSGi.Ejemplosbásicos.Spring DM.Ejemplos con Spring DM.Enterprise OSGi.Preguntas y respuestas.3
  • 4.
  • 5.
    Modularización¿Qué es?Particionar unsistema de acuerdo a ciertas restricciones y principios de diseño, así como una estrategia de desarrollo,gobernando las partes resultantes
  • 6.
    Beneficios de lamodularizaciónAyuda a atacar problemas de gran tamañoPartiendo el problema y permitiendo resolverlo incrementalmente. Permite distribuir las tareas de desarrollo entre diferentes personas/equipos.ReusoSeparación de dominios (Verticales y Horizontales) y de sus implementaciones, permitiendo utilizar las implementaciones en contextos distintos.
  • 7.
    Beneficios de lamodularizaciónMantenibilidadEl entendido común es que sistemas modulares, cuyos módulos presentan alta cohesión y bajo acoplamiento son más fáciles de modificar y extender
  • 8.
    ModularizaciónLa modularización efectivano se logra mediante el simple uso de un lenguaje o una tecnología.Es necesaria la correcta aplicación de principios y técnicas de diseño, así como el diseño de una estrategia de desarrollo.
  • 9.
  • 10.
    OSGi - ¿Quées?Esla especificación de un modelo de componentes, caracterizado por:Orientado a ServiciosDinámicoTamaño reducido (~ 1Mb)Alto desempeño (No hay classpath)Portable (desde móviles hasta servidores)Soporta múltiples versiones de clases y servicios.10
  • 11.
    OSGi - ArquitecturaLaunidad de instalación y reutilizaciónes el ‘bundle’.Los bundles exportan e importan clases y servicios a través de un ‘serviceregistry’.Se programan solo POJO’s.SeguridadBundlesServiciosCiclo de VidaMódulosEntorno de EjecuciónJava VMSistema Operativo Nativo11
  • 12.
    ¿Para quésirve? (1/2)Creaciónde…Sistemas altamente modulares.Con características deseables de flexibilidad, orientación a reuso y mantenibilidad.Arquitecturas basadas en plug-ins.e.g. Eclipse, JIRA.12
  • 13.
    ¿Para quésirve? (2/2)Creaciónde…Líneas de productos.e.g. Servidores de aplicaciones, middleware.Plataforma para cómputo en la nube.e.g.ParemusServiceFabric13
  • 14.
    Historia (1/2)Comenzó comoun esfuerzo conjunto en el mercado de dispositivos embebidos.OSGi Alliance fundada en 1999Su éxito le permitió ganar adopción en otros dominios… Eclipse 3.0 basó su modelo de plug-ins sobre OSGi14
  • 15.
    Historia (2/2)Versión 4.2de la especificación liberada en Septiembre del 2009.Primera versión de OSGi Enterprise (4.2) liberada en Marzo del 201015
  • 16.
    OSGi - Adopción1/2Miembros de OSGi Alliance:Oracle, IBM, Samsung, Nokia, IONA, Motorola, NTT, Siemens, Hitachi, Deutsche Telekom, Redhat, Ericsson .. y muchos más.Areas de aplicaciónAutomatizaciónCómputo móvilServidores de aplicacionesCómputo en “La Nube”16
  • 17.
    OSGi - Adopción2/2Actualmente es el fundamento de la nueva generación de servidores de aplicaciones y plataformas SOA.Websphere v6.1 (IBM) GlassFish v3 (Sun)Weblogic v10.3 (Oracle/BEA)JBossJonas v5SpringSourceApplication ServerWSO2 Carbon SOA Platform17
  • 18.
    OSGi - Beneficios1/2Modularidad.Los servicios de la plataforma JEE (EJB, Contenedor de servlets, JMS, Mail, Transacciones, etc) se implementan como servicios OSGi opcionales.Extensibilidad.Consecuencia casi directa de la modularidad.Dinamismo real.Permite instalar / actualizar / desinstalar módulos al vuelo (sin reinicios).Impactando la disponibilidad y flexibilidad de las aplicaciones18
  • 19.
    OSGi - Beneficios2/2Nativamente orientado a servicios (SOA).Permite la coexistencia controlada de diferentes versiones de una misma clase y servicio.Las clases pueden estar compartidas entre bundles, o completamente aisladas fuera de un contexto.Cada bundle declara sus dependencias y opcionalmente rangos soportados de versiones para las mismas.19
  • 20.
  • 21.
  • 22.
    Bundle (1/2)Es unJAR con un MANIFEST especial, que provee:Mejor control sobre la visibilidad del JARLa noción de ‘Activator’Declaración de dependencias:Hacia otros bundlesHacia paquetes (java)VersionamientoDeclaración de servicios ofrecidos por el bundle.... ¡un mejor JAR !22
  • 23.
    Bundle (1/2)Ejemplo deMANIFEST:Bundle-ManifestVersion: 2Bundle-SymbolicName: com.pragprog.HelloWorldBundle-Name: HelloWorldBundle-Version: 1.0.0Bundle-Activator: com.pragprog.hello.HelloWorldImport-Package: org.osgi.frameworkExport-Package: com.pragprog.hello23
  • 24.
    Ciclo de vidadel bundle24
  • 25.
    BundleActivator25import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;publicclass HelloWorld implements BundleActivator {public void start(BundleContextctx) throws Exception {System.out.println("Hello World!"); }public void stop(BundleContextctx) throws Exception {System.out.println("Goodbye World!"); }}
  • 26.
    ServiceRegistration26import org.osgi.framework.ServiceRegistration;import com.pragprog.hello.service.HelloService;publicclass HelloPublisher implements BundleActivator { private ServiceRegistration registration; public void start(BundleContext context) throws Exception { registration = context.registerService(HelloService.class.getName(), new HelloImpl(), null); } public void stop(BundleContext context) throws Exception {registration.unregister(); }}
  • 27.
    ServiceReference27public class HelloWorldimplements BundleActivator { public void start(BundleContext context) throws Exception {HelloServicehelloService = getHelloService(context);System.out.println(helloService.getHelloMessage()); } public void stop(BundleContext context) throws Exception {HelloServicehelloService = getHelloService(context);System.out.println(helloService.getGoodbyeMessage()); } private HelloServicegetHelloService(BundleContext context) {ServiceReference ref =context.getServiceReference(HelloService.class.getName()); return (HelloService) context.getService(ref); }}
  • 28.
  • 29.
    ¿Quéofrece Spring-DM?Aprovechar lascapacidades de OSGiSin abandonar el modelo de programación de Spring.Un nivel más alto de abstracciónTodo el poder de OSGi, sin aprender nuevas APIs.29
  • 30.
  • 31.
    Exportación de Servicios31<beansxmlns="http://www.springframework.org/schema/beans" xmlns:osgi= ="http://www.springframework.org/schema/osgi"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><osgi:serviceref="pigLatinTranslatorService" interface=“…..translator.service.TranslatorService" /></beans>
  • 32.
    Consumo de Servicios32<beansxmlns="http://www.springframework.org/schema/beans" xmlns:osgi="http://www.springframework.org/schema/osgi"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><osgi:referencie id=“translatorService" interface=“…..translator.service.TranslatorService" /></beans>
  • 33.
  • 34.
    Enterprise OSGi (1/2)Extensionesdel Registro de Servicios.Permite crear bundlesque observan o manipulan actividad del registro de servicios.Soporte de TransaccionesDa soporte de operaciones transaccionales tanto a eventos del ciclo de vida de los componentes como a las aplicaciones.OSGi DistribuidoHabilita la comunicación entre servicios que se ejecutan en distintas JVM’s.34
  • 35.
    Enterprise OSGi (2/2)BlueprintContainer.Estandarizael uso de frameworks como Spring sobre OSGi para proveer un modelo de componentes más completo.Spring DM es la implementación de referencia.Soporte a JPA, JDBC y JMXTodo lo que usamos día a día =)35
  • 36.
  • 37.
    ArquitecturasPosiblesArquitecturas de micro-kernel:Definelas API’s e implementaciones principalesLos componentes van y vienen dinámicamente.A través de plug-ins se provee implementación y extensión de la funcionalidadAdemás de definir nuevos puntos de extensión37
  • 38.
    Lineas de Productos(LP)Definición “Una línea de productos de software es un conjunto de sistemas intensivos en software que comparten un conjunto común y administrado de características, que satisfacen las necesidades específicas de un segmento particular del mercado y que son desarrollados a partir de un conjunto central de bienes (también conocido como “plataforma”) de una manera prescrita”Clements & Northrop38
  • 39.
  • 40.
    Conclusiones (1/2)Los sistemasmodulares bien implementados tienen grandes beneficios.Flexibilidad, reuso y mantenibilidad.OSGi es el sistema de módulos para tiempo de ejecución más maduro y adoptado en la plataforma Java.Y un sistema de módulos ya no es un lujo, es una necesidad.40
  • 41.
    Conclusiones (2/2)Contempla OSGiy Spring DM como alternativa de implementación de tus aplicaciones/plataformas.Ya estás disfrutando de sus beneficios, pero no lo habías notado =)41
  • 42.
    ¡Gracias!Twitter : @MachinesAreUsBlog: http://machinesareus.blogspot.come-mail : aramos@certum.com