SlideShare uma empresa Scribd logo
1 de 72
OSGi


  Óliver Centeno
Modularidad

   División lógica
   Partes independientes
   Oculta clases de implementación
Modularidad

   Visibilidad-Empaquetamiento
   Interfaces publicadas
   Dependencias externas entre módulos
Modularidad

   OOP
   Paquetes/Librerías
   Cohesion
   Acoplamiento
   División del trabajo
   Abstracción
   Reutilización
   Mantenimiento
Modularidad

   Ejemplo:
       Sistema de gestión de películas
Ficheros JAR

   ¿Son módulos?
   Classpath compartido
   No restringible
   No admite versiones
   No hay dependencias
   Condicionado por el orden
   Problemas de visibilidad
   …
Inversión del Control

   Contenedor
   Control de las dependencias
   Classpath específico de cada JAR
   Gestionar las Clases compartidas
Bundle

   Fichero JAR
   Código
   Recursos
   Metadata

   Módulo
   META-INF/MANIFEST.MF
Bundle

   Implica modularidad física de Clases
   Implica unidades de despliegue
   Permite restringir el acceso externo a Clases
¿Qué es OSGi?

   Open Service Gateway initiative
   Plataforma de Servicios
       OSGi Framework
       OSGi Standart Services


   OSGi Alliance (www.osgi.org)
   Versión 4
¿Qué es OSGi?

   OSGi Framework
       Entorno de ejecución Java
       Portable y seguro
       Gestor de servicios
       Sistema de módulos
       Escalable y ligero
       Dinámicamente instalables y actualizables
¿Qué es OSGi?
¿Qué es OSGi?

   Implementaciones

       Apache Felix (http://felix.apache.org)

       Eclipse Equinox (www.eclipse.org/equinox)

       Knopflerfish (www.knopflerfish.org)
¿Qué es OSGi?

   Eclipse Equinox (www.eclipse.org/equinox)
       Muy ligero
           java –jar org.eclipse.osgi_3.8.0.v20120529-1548.jar
                   –console
       Integrado en Eclipse
           Run Configurations > OSGi Framework
¿Qué es OSGi?

   Apache Felix (http://felix.apache.org)
       Ligero
       Intérprete de Comandos Gogo
       No integrado con Eclipse
       Configurable con Pax Runner
           http://www.ops4j.org/pax/eclipse/update/
           Entorno de ejecución embebido
           Run Configurations > OSGi Framework
           Entorno Felix v2.0.1
¿Qué es OSGi?

   Knopflerfish (www.knopflerfish.org)
       Robusto
       Interfaz gráfica
           java –jar framework.jar
       Plugin para Eclipse
       http://www.knopflerfish.org/eclipse-update/
¿Qué es OSGi?

   Conceptual Layers
       Module
       Lifecycle
       Service
Module Layer
   package curso.ejemplo;

   public class Saludo {
     static Saludo instance;
     final String nombre;

       public Saludo(String nombre) {
         this.nombre = nombre;
       }
       public static Saludo get() {
         return instance;
       }
       public void saludar() {
         System.out.println("Hola, " + nombre + "!");
       }
   }
Lifecycle Layer
   package curso.ejemplo;
   import org.osgi.framework.BundleActivator;
   import org.osgi.framework.BundleContext;

   public class Activator implements BundleActivator {

       public void start(BundleContext ctx) {
         Saludo.instance = new Saludo("lifecycle");
       }

       public void stop(BundleContext ctx) {
         Saludo.instance = null;
       }
   }
Service Layer
   package curso.ejemplo;

   import org.osgi.framework.BundleActivator;
   import org.osgi.framework.BundleContext;

   public class ServicioActivator
          implements BundleActivator {

       public void start(BundleContext ctx) {
         ctx.registerService(Saludo.class.getName(),
                  new Saludo("servicio"), null);
       }

       public void stop(BundleContext ctx) {}
   }
Cliente
   package curso.ejemplo;
   import org.osgi.framework.BundleActivator;
   import org.osgi.framework.BundleContext;
   import org.osgi.framework.ServiceReference;

   public class Cliente implements BundleActivator {

     public void start(BundleContext ctx) {
       ServiceReference ref = ctx.getServiceReference(
                                    Saludo.class.
   getName());
       ((Saludo) ctx.getService(ref)).saludar();
     }

       public void stop(BundleContext ctx) {}
   }
Tecnologías relacionadas

   RMI
       Proveedor
       Cliente
       Registro
       Multi-proceso
       No modular
Tecnologías relacionadas

   Spring
       Contenedor ligero
       Inyección de dependencias
       Sin módulos dinámicos
       Portando infraestructura a OSGi
Tecnologías relacionadas

   JSR
       JSR 277: Java Module System
           Propuesta de Sun alternativa a OSGi
       JSR 291: Dynamic Component Support for Java
           Mejora apoyada en OSGi
       JSR 294: Improved Modularity Support
           Intento de mejorar la visibilidad de módulos
Tecnologías relacionadas

   Service Component Architecture
       Modelo de componentes para SOA
       Integra BPEL, SOAP, JMS, JCA,..
       No define formato de módulos
¿Cómo funciona?

   MANIFEST.MF
       Formato “nombre: valor”
       Admite atributos y directivas
       Máximo 72 caracteres/línea

       Información legible
       Identificación del bundle
       Visibilidad externa del código (paquetes)
       Dependencias de paquetes
¿Cómo funciona?

   MANIFEST.MF
    Bundle-Name: Nombre descriptivo
    Bundle-SymbolicName: id.del.bundle
    Bundle-Version: 1.0.0.build-38
    Bundle-ManifestVersion: 2

    Export-Package: curso.ejemplo;version=1.0.0
    Import-Package: org.osgi.framework;version=[1.3,2.0)

    Bundle-ClassPath: .,imagenes/,embedded.jar
¿Cómo funciona?

   Ejemplo
¿Cómo funciona?

   Resolución de dependencias
¿Cómo funciona?

   Resolución de dependencias
       Transitiva
       Restringida en importación
           vendor
           version
           …
       Prioridad a la versión
       Prioridad a la instalación
       Prioridad a la resolución
¿Cómo funciona?

   Resolución de dependencias
       Directiva uses
           Restringe las importaciones de los clientes
            Export-Package: org.osgi.service.http;
             uses:="javax.servlet"
            Import-Package: javax.servlet; version=2.3.0
Ejercicio

   Desplegar un bundle
    public class Dao {
        public void sql(String message) {
           System.out.println(message + " v1");
        }
    }
   Un cliente del bundle y su activador
    public class Cliente {
        public void listar() {
           new Dao().sql("SELECT * FROM Tabla");
        }
    }
Ejercicio

   Crear una nueva versión del bundle
    public class Dao {
        public void sql(String message) {
           System.out.println(message + " v2");
        }
    }
   Desplegar y refrescar el bundle y su cliente
   Modificar la interfaz del bundle
   Restringir la versión máxima del cliente
Ejercicio

   Crear una nueva versión del cliente
   Ejecutarla con la 1.0 en ejecución
   Restringirla al bundle 1.1
   Ejecutar cliente y bundle 1.0
   Ejecutar cliente y bundle 1.1
   Refrescar cliente 1.0
Ciclo de Vida

   El Framework OSGi controla el ciclo de vida
    de los bundle
       install
       update
       start
       stop
       uninstall
Interacción con el Lifecycle

   Lifecycle Layer gestiona los bundles
   Resolviendo dependencias
   Permitiendo
       install
       update
       uninstall
       start
       stop
BundleActivator

   Interfaz de control del ciclo de vida
   Implementar y referenciar en el manifest.mf
   Métodos start y stop de retorno rápido
   Acceso al contexto del bundle
       BundleContext
       Instalar/desinstalar bundles
       Obtener todos o uno por id
       …
Eventos

   BundleListener
       Recibe eventos de los bundles
       bundleChanged()
       BundleEvent
             INSTALLED
             RESOLVED
             STARTED
             STOPED
             UPDATED
             UNINSTALLED
             UNRESOLVED
Eventos

   FrameworkListener
       Recibe eventos de OSGi
       FrameworkEvent
             STARTED
             INFO
             WARNING
             ERROR
             STARTLEVEL_CHANGED
             PACKAGES_REFRESHED
Eventos

   SynchronousBundleListener
       Recibe eventos antes que BundleListener
       bundleChanged()
       BundleEvent
             STARTING
             STOPING
Eventos

   Se registran contra el BundleContext
   Método addListener()
   Se eliminan mediante
       removeBundleListener()
       removeFrameworkListener()
Ejercicio

   Crear un observador de eventos
   Que muestre mensajes del bundle y el
    evento implicados
   Recargar los bundles
   Desinstalar 1.1
   Refrescar cliente 1.1
Servicios

   Interfaz
       java.lang.Class


   Implementación

   Service Properties
Servicios

   Service Registry
       Registrar
       Desregistrar
       Recuperar
       Librerar
Servicios

   Service Properties
       Predefinidas (Constants)
       Personalizadas
Filtros LDAP

   Formato ()
       & | ! Prefijos
       Ejemplos
           (name=John Smith)
           (age>=20)
           (name~=johnsmith)
           (&(name=John Smith)(occupation=doctor))
           (|(name~=John Smith)(name~=Smith John))
           (name=Jo*n*Smith*)
Ejercicio

   Convertir en Servicio
       Crear una interfaz Dao
       Crear una implementación en distinto paquete
       Se exportará el de la interfaz
       No se exportará el de la implementación
       Crear un Activador que registre la implementación
       Y desregistre en el stop
Ejercicio

   Crear un consumidor
       Crear un Thread implementando Runnable
       Que utilice la interfaz
    void start() {     public void run() {
      stop = false;      while (!stop) {
      new Thread(this)     printer.print("Hola...");
           .start();       try {
    }                         Thread.sleep(TWO_SECS);
                           } catch (InterruptedException e) {
    void stop(){              stop = true;
      stop = true;         }
    }                    }
                       }
Ejercicio

   Crear un activador del consumidor
       Que instancie el cliente
       Que busque el servicio
           getServiceReference()
           getService()
       Castear a la interfaz de servicio
       Arrancar el Consumidor
       Detenerlo en el stop
ServiceFactory

   Instanciación de servicios
   Registrarla en lugar del servicio
   Métodos getService() y ungetService()
   Permite implementar patrones creacionales
   Y modificar el ciclo de vida
ServiceListener

   Eventos de Servicio
       ServiceEvent
               REGISTERED
               UNREGISTERED
               MODIFIED
       context.addServiceListener()
           Filter="(objectClass=" + IDao.class.getName() + ")"
           Filtro formato LDAP
Consejos y trucos

   Mantener los paquetes privados
   Si SOLO se va a usar desde un bundle
       Incluir la librería en éste   META-INF/MANIFEST.MF
                                      lib/mylegacy.jar
       Bundle-Classpath              manning/osgi/MyClass.class
                                      Bundle-ClassPath: .,lib

   Si se va a usar desde más bundles
       Crear un bundle propio y referenciarlo
Consejos y trucos

   Evitar los bundles requeridos
       Ven todos los Exported-Packages del requerido
       Incluso de manera transitiva
        Bundle-SymbolicName: B1
        Require-Bundle: B2; visibility:=reexport


   Restringir las clases exportadas
       Directivas include y exclude de Export-Package
        Export-Package: manning.osgi.test;
         include:="Foo*, Bar"; exclude:=FooImpl
Consejos y trucos

   Desacoplar Bundles mediante servicios
       Importar únicamente interfaces
       Publicar Bundle-implementaciones
       Mediante su propio Activador
       Restringir la resolución del consumidor con
        propiedades
             md4Properties.put("PERFORMANCE", "FAST");
Consejos y trucos

    Desacoplar Bundles mediante servicios
        Usar filtros para restringir por propiedades
    String filter =
        "(&(objectClass=" + Servicio.class.getName() + ")" +
        "(PERFORMANCE=FAST))";

        Usar la Propiedad de ranking para priorizar
         md5Properties.put(Constants.SERVICE_RANKING, 10);

        Usar la Propiedad de PID para identificar
         servicios de manera unívoca
         properties.put(Constants.SERVICE_PID, "10.0.0.1");
Consejos y trucos

   Uso de fragmentos
       Bundles degenerados
       Se resuelven después del Bundle Host
       Pero deben instalarse antes que éste
       No pueden tener Activador
       Permiten aumentar el manifiesto
           Añadir un Import-Package propio

        Fragment-Host: symbolic-name-del-host-bundle
Consejos y trucos

   Carga dinámica de bundles
       Por ej.: Acceso a BBDD con reflexión
       DynamicImport-Package
           Último recurso de resolución que admite *
           Se carga en ejecución, no en resolución
            DynamicImport-Package: org.apache.derby.jdbc

       Paquetes opcionales
            Import-Package: x.y.z;resolution:=optional
Consejos y trucos

   Acceso a detalles del bundle
       OSGi 4.3 tiene un Wiring Framework
        BundleRevision revision =
            bundle.adapt(BundleRevision.class);

        List<BundleCapability> exportPackage =
            revision.getDeclaredCapabilities(
               BundleRevision.PACKAGE_NAMESPACE);

        List<BundleRequirement> importPackage =
            revision.getDeclaredRequirements(
               BundleRevision.PACKAGE_NAMESPACE);
Consejos y trucos

   Acceso a detalles del bundle
       OSGi 4.3 tiene un Wiring Framework
       Recorrer detalles de especificación
        for (BundleCapability capability : capabilities) {
            Map<String, Object> attributes =
               capability.getAttributes();
            System.out.println(
               attributes.get("osgi.wiring.package") +
               " version " + attributes.get("version")
            );
        }
Consejos y trucos

   Acceso a detalles del bundle
       OSGi 4.3 tiene un Wiring Framework
       Obtener enlaces/resoluciones en ejecución
        List<BundleWire> providedWires =
            revision.getWiring().getProvidedWires(
               BundleRevision.PACKAGE_NAMESPACE);

        for (BundleWire bundleWire : providedWires) {
             Bundle cliente =
                bundleWire.getRequirerWiring().getBundle();
             Bundle proveedor =
                bundleWire.getProviderWiring().getBundle();
         }
Servicios Remotos

   Configurar propiedades del servicio
   Exportar interfaces remotas
   Añadir Bundle de comunicación
        install http://repo1.maven.org/maven2/org/osgi/org.osgi.
         compendium/4.2.0/org.osgi.compendium-4.2.0.jar
        install http://www.apache.org/dist/cxf/dosgi/1.2/cxf-dosgi-
         ri-singlebundle-distribution-1.2.jar
Servicios Remotos

   Propiedades para acceso remoto
       service.exported.interfaces
       service.exported.configs
           org.apache.cxf.ws
           ws


       org.apache.cxf.ws.address
       SOAP.service.name
       …
Clientes Remotos

   Bundle de comunicación
   Clase ServiceTracker
       Equivalente al ServiceReference
       Método open() para iniciar el tracking
       Método addingService() al encontrar servicios
   Fichero XML de endpoints
       OSGI-INF/remote-services/remote-services.xml
Clientes Remotos

   Service Tracker
       Clase asociada al contexto y a la interfaz
       open() y close() registran Listeners internos
       Instanciarlo en un Activador
       Ejecutar el open() en start()
       Invocar a getService()
       Admite ServiceTrackerCustomizer
           Eventos del servicio
           addingService() y removedService()
Clientes Remotos

   Fichero de endpoints
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 <endpoint-description>
  <property name="objectClass">
   <array>
    <value>servicio.wsdl.GreeterService</value>
   </array>
  </property>
  <property name="endpoint.id">http://localhost:9090/greeter</property>
  <property name="service.imported.configs">org.apache.cxf.ws</property>
 </endpoint-description>
</endpoint-descriptions>
Clientes Remotos

   Fichero de configuración
       OSGI-INF/cxf/intents/intent-map.xml
        <beans>
          <bean id="intentMap" class="org.apache.cxf.dosgi.dsw.qos.IntentMap">
            <property name="intents"><map>
              <entry key="reliability" value-ref="reliableMessaging"/>
              <entry key="decoupled" value-ref="decoupledAddressing"/>
            </map></property>
          </bean>

          <p:policies id="reliableMessaging">…</p:policies>
          <p:policies id="decoupledAddressing">…</p:policies>
          <wsp:Policy wsu:Id="ReliabilityPolicy">…</wsp:Policy>
          <wsp:Policy wsu:Id="DecoupledPolicy">…</wsp:Policy>
          <wsp:Policy wsu:Id="AddressingPolicy">…</wsp:Policy>
        </beans>
OSGi y J2EE

   2 opciones

       Embeber un servidor ligero en OSGi (Jetty)
           Práctico en fase de desarrollo


       Embeber OSGi en una aplicación Web
           Eficiente en fase de despliegue
OSGi y J2EE

   Crear un bundle con su activador
   Crear un Servlet
   Crear un directorio para las páginas Web
   Extender ServiceTracker
       Obtener el servicio HttpService de contexto
       Registrar recursos y servlets
       Liberarlos en removedService()
   Instanciarlo, abrirlo y cerrarlo en el activador
OSGi y J2EE

   Equinox tiene un bridge.war
       http://www.eclipse.
        org/equinox/server/http_in_container.php
       Plantilla de AppWeb con contexto /sp_test
       Con un OSGi embebido en la consola Tomcat
       BridgeServlet que hace de FrontController
   Desplegar los bundle web en
       WEB-INFEclipseplugins
   Y arrancarlos desde consola
Depuración

   Arrancar el framework en modo remoto
    java –Xdebug -Xrunjdwp:transport=
           dt_socket,address=8787,server=y,suspend=n
         -jar framework.jar

       Suspend indica que se pare en arranque
   Crear un Debug Configuration en Eclipse
       Remote Java Application
       Indicar el puerto
       Poner los puntos de ruptura y ejecutar OSGi
Eclipse Plugins

   Formato de bundle especial
   Con un activador estandart: AbstractUIPlugin
       Métodos getDefault() y getImageDescriptor()
   Configurado mediante plugin.xml
       Extensiones de la interfaz de Eclipse
       Views, ayuda contextual, menús,…
Eclipse Plugins

   Ejemplo
       Plugin con Custom Templates
       Seleccionar Popup Menu y View
       Asociar el Popup con org.eclipse.ui.IEditorInput
       Configurar la categoría de la vista
       Finish
       Añadir más opciones al menú
           Invocarán al método run() de la clase asociada

Mais conteúdo relacionado

Mais procurados

Materiales Prefabricados
Materiales PrefabricadosMateriales Prefabricados
Materiales PrefabricadosANY-COMPEAN
 
Monografía tipos de esfuerzos estructurales
Monografía tipos de esfuerzos estructuralesMonografía tipos de esfuerzos estructurales
Monografía tipos de esfuerzos estructuralesAbigail Soberon
 
El moderno en colombia
El moderno en colombiaEl moderno en colombia
El moderno en colombiaIsairyPM
 
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...DanielaRamirez294
 
Deficiencias de estructuras existentes
Deficiencias de estructuras existentesDeficiencias de estructuras existentes
Deficiencias de estructuras existentesIRMA Trejo Amado
 
Arquitectura moderna siglo xix
Arquitectura moderna siglo xixArquitectura moderna siglo xix
Arquitectura moderna siglo xixmaria gomez
 
MAMPOSTERIA NO ESTRUCTURAL.pptx
MAMPOSTERIA NO ESTRUCTURAL.pptxMAMPOSTERIA NO ESTRUCTURAL.pptx
MAMPOSTERIA NO ESTRUCTURAL.pptxJohannaJaramillo23
 
Criterios estructurales definiciones
Criterios estructurales   definicionesCriterios estructurales   definiciones
Criterios estructurales definicionespatrick_amb
 
Losas unidireccional y bidireccional estructura3
Losas unidireccional y bidireccional estructura3Losas unidireccional y bidireccional estructura3
Losas unidireccional y bidireccional estructura3JuliaDiaz_14
 
Interpretacion_ Importancia del Acero
Interpretacion_ Importancia del AceroInterpretacion_ Importancia del Acero
Interpretacion_ Importancia del Acerogeisajph
 
Diseño plastico o de resistencia ultima 2
Diseño plastico o de resistencia ultima 2Diseño plastico o de resistencia ultima 2
Diseño plastico o de resistencia ultima 2daccjade
 
Cableado de puentes colgantes y atirantados
Cableado de puentes colgantes y atirantadosCableado de puentes colgantes y atirantados
Cableado de puentes colgantes y atirantadosIvan Francisco MG
 
Catalogo tecnico porcelanite dos kerlanic
Catalogo tecnico porcelanite dos kerlanicCatalogo tecnico porcelanite dos kerlanic
Catalogo tecnico porcelanite dos kerlanicKerlanic Tile
 

Mais procurados (20)

Materiales Prefabricados
Materiales PrefabricadosMateriales Prefabricados
Materiales Prefabricados
 
cimentacion
cimentacioncimentacion
cimentacion
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Obras de-concreto-simple
Obras de-concreto-simpleObras de-concreto-simple
Obras de-concreto-simple
 
Monografía tipos de esfuerzos estructurales
Monografía tipos de esfuerzos estructuralesMonografía tipos de esfuerzos estructurales
Monografía tipos de esfuerzos estructurales
 
Conceptos basicos ingenieria civil
Conceptos basicos ingenieria civilConceptos basicos ingenieria civil
Conceptos basicos ingenieria civil
 
Elemento estructural
Elemento estructuralElemento estructural
Elemento estructural
 
El moderno en colombia
El moderno en colombiaEl moderno en colombia
El moderno en colombia
 
Teorema betti
Teorema bettiTeorema betti
Teorema betti
 
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...
Caracteristicas de diseño para elementos de concreto pretensado - Daniela Ram...
 
Deficiencias de estructuras existentes
Deficiencias de estructuras existentesDeficiencias de estructuras existentes
Deficiencias de estructuras existentes
 
Arquitectura moderna siglo xix
Arquitectura moderna siglo xixArquitectura moderna siglo xix
Arquitectura moderna siglo xix
 
MAMPOSTERIA NO ESTRUCTURAL.pptx
MAMPOSTERIA NO ESTRUCTURAL.pptxMAMPOSTERIA NO ESTRUCTURAL.pptx
MAMPOSTERIA NO ESTRUCTURAL.pptx
 
Criterios estructurales definiciones
Criterios estructurales   definicionesCriterios estructurales   definiciones
Criterios estructurales definiciones
 
Losas unidireccional y bidireccional estructura3
Losas unidireccional y bidireccional estructura3Losas unidireccional y bidireccional estructura3
Losas unidireccional y bidireccional estructura3
 
Ireneeeeeeeeeeeeee patologiaaaa
Ireneeeeeeeeeeeeee patologiaaaaIreneeeeeeeeeeeeee patologiaaaa
Ireneeeeeeeeeeeeee patologiaaaa
 
Interpretacion_ Importancia del Acero
Interpretacion_ Importancia del AceroInterpretacion_ Importancia del Acero
Interpretacion_ Importancia del Acero
 
Diseño plastico o de resistencia ultima 2
Diseño plastico o de resistencia ultima 2Diseño plastico o de resistencia ultima 2
Diseño plastico o de resistencia ultima 2
 
Cableado de puentes colgantes y atirantados
Cableado de puentes colgantes y atirantadosCableado de puentes colgantes y atirantados
Cableado de puentes colgantes y atirantados
 
Catalogo tecnico porcelanite dos kerlanic
Catalogo tecnico porcelanite dos kerlanicCatalogo tecnico porcelanite dos kerlanic
Catalogo tecnico porcelanite dos kerlanic
 

Semelhante a DOCUMENTO (20)

Spring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres AltezSpring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres Altez
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
spring framework
spring frameworkspring framework
spring framework
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
2 daoo introduccion_java
2 daoo introduccion_java2 daoo introduccion_java
2 daoo introduccion_java
 
Java
JavaJava
Java
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Guia4 java
Guia4 javaGuia4 java
Guia4 java
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
1 -programacion_oo
1  -programacion_oo1  -programacion_oo
1 -programacion_oo
 
Presentacion servlets
Presentacion servletsPresentacion servlets
Presentacion servlets
 
Eventos
EventosEventos
Eventos
 
GWT
GWTGWT
GWT
 
Curso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 IntroduccionCurso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 Introduccion
 

Mais de Oliver Centeno (20)

Metodologías ágiles
Metodologías ágilesMetodologías ágiles
Metodologías ágiles
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Métrica v3 y RUP
Métrica v3 y RUPMétrica v3 y RUP
Métrica v3 y RUP
 
ATL
ATLATL
ATL
 
Herramientas Java
Herramientas JavaHerramientas Java
Herramientas Java
 
Web services y java
Web services y javaWeb services y java
Web services y java
 
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5
 
XML Básico
XML BásicoXML Básico
XML Básico
 
Java en Tiempo Real
Java en Tiempo RealJava en Tiempo Real
Java en Tiempo Real
 
Sun Java System Web Server 6.1
Sun Java System Web Server 6.1Sun Java System Web Server 6.1
Sun Java System Web Server 6.1
 
My SQL
My SQLMy SQL
My SQL
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 
Microsoft Test Manager 2010
Microsoft Test Manager 2010Microsoft Test Manager 2010
Microsoft Test Manager 2010
 
SOA y Web Services
SOA y Web ServicesSOA y Web Services
SOA y Web Services
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Liferay
LiferayLiferay
Liferay
 
Joomla!
Joomla!Joomla!
Joomla!
 
TFS 10
TFS 10TFS 10
TFS 10
 
Azure
AzureAzure
Azure
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (13)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

DOCUMENTO

  • 1. OSGi Óliver Centeno
  • 2. Modularidad  División lógica  Partes independientes  Oculta clases de implementación
  • 3. Modularidad  Visibilidad-Empaquetamiento  Interfaces publicadas  Dependencias externas entre módulos
  • 4. Modularidad  OOP  Paquetes/Librerías  Cohesion  Acoplamiento  División del trabajo  Abstracción  Reutilización  Mantenimiento
  • 5. Modularidad  Ejemplo:  Sistema de gestión de películas
  • 6. Ficheros JAR  ¿Son módulos?  Classpath compartido  No restringible  No admite versiones  No hay dependencias  Condicionado por el orden  Problemas de visibilidad  …
  • 7. Inversión del Control  Contenedor  Control de las dependencias  Classpath específico de cada JAR  Gestionar las Clases compartidas
  • 8. Bundle  Fichero JAR  Código  Recursos  Metadata  Módulo  META-INF/MANIFEST.MF
  • 9. Bundle  Implica modularidad física de Clases  Implica unidades de despliegue  Permite restringir el acceso externo a Clases
  • 10. ¿Qué es OSGi?  Open Service Gateway initiative  Plataforma de Servicios  OSGi Framework  OSGi Standart Services  OSGi Alliance (www.osgi.org)  Versión 4
  • 11. ¿Qué es OSGi?  OSGi Framework  Entorno de ejecución Java  Portable y seguro  Gestor de servicios  Sistema de módulos  Escalable y ligero  Dinámicamente instalables y actualizables
  • 13. ¿Qué es OSGi?  Implementaciones  Apache Felix (http://felix.apache.org)  Eclipse Equinox (www.eclipse.org/equinox)  Knopflerfish (www.knopflerfish.org)
  • 14. ¿Qué es OSGi?  Eclipse Equinox (www.eclipse.org/equinox)  Muy ligero  java –jar org.eclipse.osgi_3.8.0.v20120529-1548.jar –console  Integrado en Eclipse  Run Configurations > OSGi Framework
  • 15. ¿Qué es OSGi?  Apache Felix (http://felix.apache.org)  Ligero  Intérprete de Comandos Gogo  No integrado con Eclipse  Configurable con Pax Runner  http://www.ops4j.org/pax/eclipse/update/  Entorno de ejecución embebido  Run Configurations > OSGi Framework  Entorno Felix v2.0.1
  • 16. ¿Qué es OSGi?  Knopflerfish (www.knopflerfish.org)  Robusto  Interfaz gráfica  java –jar framework.jar  Plugin para Eclipse  http://www.knopflerfish.org/eclipse-update/
  • 17. ¿Qué es OSGi?  Conceptual Layers  Module  Lifecycle  Service
  • 18. Module Layer package curso.ejemplo; public class Saludo { static Saludo instance; final String nombre; public Saludo(String nombre) { this.nombre = nombre; } public static Saludo get() { return instance; } public void saludar() { System.out.println("Hola, " + nombre + "!"); } }
  • 19. Lifecycle Layer package curso.ejemplo; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public void start(BundleContext ctx) { Saludo.instance = new Saludo("lifecycle"); } public void stop(BundleContext ctx) { Saludo.instance = null; } }
  • 20. Service Layer package curso.ejemplo; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class ServicioActivator implements BundleActivator { public void start(BundleContext ctx) { ctx.registerService(Saludo.class.getName(), new Saludo("servicio"), null); } public void stop(BundleContext ctx) {} }
  • 21. Cliente package curso.ejemplo; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; public class Cliente implements BundleActivator { public void start(BundleContext ctx) { ServiceReference ref = ctx.getServiceReference( Saludo.class. getName()); ((Saludo) ctx.getService(ref)).saludar(); } public void stop(BundleContext ctx) {} }
  • 22. Tecnologías relacionadas  RMI  Proveedor  Cliente  Registro  Multi-proceso  No modular
  • 23. Tecnologías relacionadas  Spring  Contenedor ligero  Inyección de dependencias  Sin módulos dinámicos  Portando infraestructura a OSGi
  • 24. Tecnologías relacionadas  JSR  JSR 277: Java Module System  Propuesta de Sun alternativa a OSGi  JSR 291: Dynamic Component Support for Java  Mejora apoyada en OSGi  JSR 294: Improved Modularity Support  Intento de mejorar la visibilidad de módulos
  • 25. Tecnologías relacionadas  Service Component Architecture  Modelo de componentes para SOA  Integra BPEL, SOAP, JMS, JCA,..  No define formato de módulos
  • 26. ¿Cómo funciona?  MANIFEST.MF  Formato “nombre: valor”  Admite atributos y directivas  Máximo 72 caracteres/línea  Información legible  Identificación del bundle  Visibilidad externa del código (paquetes)  Dependencias de paquetes
  • 27. ¿Cómo funciona?  MANIFEST.MF Bundle-Name: Nombre descriptivo Bundle-SymbolicName: id.del.bundle Bundle-Version: 1.0.0.build-38 Bundle-ManifestVersion: 2 Export-Package: curso.ejemplo;version=1.0.0 Import-Package: org.osgi.framework;version=[1.3,2.0) Bundle-ClassPath: .,imagenes/,embedded.jar
  • 29. ¿Cómo funciona?  Resolución de dependencias
  • 30. ¿Cómo funciona?  Resolución de dependencias  Transitiva  Restringida en importación  vendor  version  …  Prioridad a la versión  Prioridad a la instalación  Prioridad a la resolución
  • 31. ¿Cómo funciona?  Resolución de dependencias  Directiva uses  Restringe las importaciones de los clientes Export-Package: org.osgi.service.http; uses:="javax.servlet" Import-Package: javax.servlet; version=2.3.0
  • 32. Ejercicio  Desplegar un bundle public class Dao { public void sql(String message) { System.out.println(message + " v1"); } }  Un cliente del bundle y su activador public class Cliente { public void listar() { new Dao().sql("SELECT * FROM Tabla"); } }
  • 33. Ejercicio  Crear una nueva versión del bundle public class Dao { public void sql(String message) { System.out.println(message + " v2"); } }  Desplegar y refrescar el bundle y su cliente  Modificar la interfaz del bundle  Restringir la versión máxima del cliente
  • 34. Ejercicio  Crear una nueva versión del cliente  Ejecutarla con la 1.0 en ejecución  Restringirla al bundle 1.1  Ejecutar cliente y bundle 1.0  Ejecutar cliente y bundle 1.1  Refrescar cliente 1.0
  • 35. Ciclo de Vida  El Framework OSGi controla el ciclo de vida de los bundle  install  update  start  stop  uninstall
  • 36. Interacción con el Lifecycle  Lifecycle Layer gestiona los bundles  Resolviendo dependencias  Permitiendo  install  update  uninstall  start  stop
  • 37. BundleActivator  Interfaz de control del ciclo de vida  Implementar y referenciar en el manifest.mf  Métodos start y stop de retorno rápido  Acceso al contexto del bundle  BundleContext  Instalar/desinstalar bundles  Obtener todos o uno por id  …
  • 38. Eventos  BundleListener  Recibe eventos de los bundles  bundleChanged()  BundleEvent  INSTALLED  RESOLVED  STARTED  STOPED  UPDATED  UNINSTALLED  UNRESOLVED
  • 39. Eventos  FrameworkListener  Recibe eventos de OSGi  FrameworkEvent  STARTED  INFO  WARNING  ERROR  STARTLEVEL_CHANGED  PACKAGES_REFRESHED
  • 40. Eventos  SynchronousBundleListener  Recibe eventos antes que BundleListener  bundleChanged()  BundleEvent  STARTING  STOPING
  • 41. Eventos  Se registran contra el BundleContext  Método addListener()  Se eliminan mediante  removeBundleListener()  removeFrameworkListener()
  • 42. Ejercicio  Crear un observador de eventos  Que muestre mensajes del bundle y el evento implicados  Recargar los bundles  Desinstalar 1.1  Refrescar cliente 1.1
  • 43. Servicios  Interfaz  java.lang.Class  Implementación  Service Properties
  • 44. Servicios  Service Registry  Registrar  Desregistrar  Recuperar  Librerar
  • 45. Servicios  Service Properties  Predefinidas (Constants)  Personalizadas
  • 46. Filtros LDAP  Formato ()  & | ! Prefijos  Ejemplos  (name=John Smith)  (age>=20)  (name~=johnsmith)  (&(name=John Smith)(occupation=doctor))  (|(name~=John Smith)(name~=Smith John))  (name=Jo*n*Smith*)
  • 47. Ejercicio  Convertir en Servicio  Crear una interfaz Dao  Crear una implementación en distinto paquete  Se exportará el de la interfaz  No se exportará el de la implementación  Crear un Activador que registre la implementación  Y desregistre en el stop
  • 48. Ejercicio  Crear un consumidor  Crear un Thread implementando Runnable  Que utilice la interfaz void start() { public void run() { stop = false; while (!stop) { new Thread(this) printer.print("Hola..."); .start(); try { } Thread.sleep(TWO_SECS); } catch (InterruptedException e) { void stop(){ stop = true; stop = true; } } } }
  • 49. Ejercicio  Crear un activador del consumidor  Que instancie el cliente  Que busque el servicio  getServiceReference()  getService()  Castear a la interfaz de servicio  Arrancar el Consumidor  Detenerlo en el stop
  • 50. ServiceFactory  Instanciación de servicios  Registrarla en lugar del servicio  Métodos getService() y ungetService()  Permite implementar patrones creacionales  Y modificar el ciclo de vida
  • 51. ServiceListener  Eventos de Servicio  ServiceEvent  REGISTERED  UNREGISTERED  MODIFIED  context.addServiceListener()  Filter="(objectClass=" + IDao.class.getName() + ")"  Filtro formato LDAP
  • 52. Consejos y trucos  Mantener los paquetes privados  Si SOLO se va a usar desde un bundle  Incluir la librería en éste META-INF/MANIFEST.MF lib/mylegacy.jar  Bundle-Classpath manning/osgi/MyClass.class Bundle-ClassPath: .,lib  Si se va a usar desde más bundles  Crear un bundle propio y referenciarlo
  • 53. Consejos y trucos  Evitar los bundles requeridos  Ven todos los Exported-Packages del requerido  Incluso de manera transitiva Bundle-SymbolicName: B1 Require-Bundle: B2; visibility:=reexport  Restringir las clases exportadas  Directivas include y exclude de Export-Package Export-Package: manning.osgi.test; include:="Foo*, Bar"; exclude:=FooImpl
  • 54. Consejos y trucos  Desacoplar Bundles mediante servicios  Importar únicamente interfaces  Publicar Bundle-implementaciones  Mediante su propio Activador  Restringir la resolución del consumidor con propiedades md4Properties.put("PERFORMANCE", "FAST");
  • 55. Consejos y trucos  Desacoplar Bundles mediante servicios  Usar filtros para restringir por propiedades String filter = "(&(objectClass=" + Servicio.class.getName() + ")" + "(PERFORMANCE=FAST))";  Usar la Propiedad de ranking para priorizar md5Properties.put(Constants.SERVICE_RANKING, 10);  Usar la Propiedad de PID para identificar servicios de manera unívoca properties.put(Constants.SERVICE_PID, "10.0.0.1");
  • 56. Consejos y trucos  Uso de fragmentos  Bundles degenerados  Se resuelven después del Bundle Host  Pero deben instalarse antes que éste  No pueden tener Activador  Permiten aumentar el manifiesto  Añadir un Import-Package propio Fragment-Host: symbolic-name-del-host-bundle
  • 57. Consejos y trucos  Carga dinámica de bundles  Por ej.: Acceso a BBDD con reflexión  DynamicImport-Package  Último recurso de resolución que admite *  Se carga en ejecución, no en resolución DynamicImport-Package: org.apache.derby.jdbc  Paquetes opcionales Import-Package: x.y.z;resolution:=optional
  • 58. Consejos y trucos  Acceso a detalles del bundle  OSGi 4.3 tiene un Wiring Framework BundleRevision revision = bundle.adapt(BundleRevision.class); List<BundleCapability> exportPackage = revision.getDeclaredCapabilities( BundleRevision.PACKAGE_NAMESPACE); List<BundleRequirement> importPackage = revision.getDeclaredRequirements( BundleRevision.PACKAGE_NAMESPACE);
  • 59. Consejos y trucos  Acceso a detalles del bundle  OSGi 4.3 tiene un Wiring Framework  Recorrer detalles de especificación for (BundleCapability capability : capabilities) { Map<String, Object> attributes = capability.getAttributes(); System.out.println( attributes.get("osgi.wiring.package") + " version " + attributes.get("version") ); }
  • 60. Consejos y trucos  Acceso a detalles del bundle  OSGi 4.3 tiene un Wiring Framework  Obtener enlaces/resoluciones en ejecución List<BundleWire> providedWires = revision.getWiring().getProvidedWires( BundleRevision.PACKAGE_NAMESPACE); for (BundleWire bundleWire : providedWires) { Bundle cliente = bundleWire.getRequirerWiring().getBundle(); Bundle proveedor = bundleWire.getProviderWiring().getBundle(); }
  • 61. Servicios Remotos  Configurar propiedades del servicio  Exportar interfaces remotas  Añadir Bundle de comunicación  install http://repo1.maven.org/maven2/org/osgi/org.osgi. compendium/4.2.0/org.osgi.compendium-4.2.0.jar  install http://www.apache.org/dist/cxf/dosgi/1.2/cxf-dosgi- ri-singlebundle-distribution-1.2.jar
  • 62. Servicios Remotos  Propiedades para acceso remoto  service.exported.interfaces  service.exported.configs  org.apache.cxf.ws  ws  org.apache.cxf.ws.address  SOAP.service.name  …
  • 63. Clientes Remotos  Bundle de comunicación  Clase ServiceTracker  Equivalente al ServiceReference  Método open() para iniciar el tracking  Método addingService() al encontrar servicios  Fichero XML de endpoints  OSGI-INF/remote-services/remote-services.xml
  • 64. Clientes Remotos  Service Tracker  Clase asociada al contexto y a la interfaz  open() y close() registran Listeners internos  Instanciarlo en un Activador  Ejecutar el open() en start()  Invocar a getService()  Admite ServiceTrackerCustomizer  Eventos del servicio  addingService() y removedService()
  • 65. Clientes Remotos  Fichero de endpoints <endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0"> <endpoint-description> <property name="objectClass"> <array> <value>servicio.wsdl.GreeterService</value> </array> </property> <property name="endpoint.id">http://localhost:9090/greeter</property> <property name="service.imported.configs">org.apache.cxf.ws</property> </endpoint-description> </endpoint-descriptions>
  • 66. Clientes Remotos  Fichero de configuración  OSGI-INF/cxf/intents/intent-map.xml <beans> <bean id="intentMap" class="org.apache.cxf.dosgi.dsw.qos.IntentMap"> <property name="intents"><map> <entry key="reliability" value-ref="reliableMessaging"/> <entry key="decoupled" value-ref="decoupledAddressing"/> </map></property> </bean> <p:policies id="reliableMessaging">…</p:policies> <p:policies id="decoupledAddressing">…</p:policies> <wsp:Policy wsu:Id="ReliabilityPolicy">…</wsp:Policy> <wsp:Policy wsu:Id="DecoupledPolicy">…</wsp:Policy> <wsp:Policy wsu:Id="AddressingPolicy">…</wsp:Policy> </beans>
  • 67. OSGi y J2EE  2 opciones  Embeber un servidor ligero en OSGi (Jetty)  Práctico en fase de desarrollo  Embeber OSGi en una aplicación Web  Eficiente en fase de despliegue
  • 68. OSGi y J2EE  Crear un bundle con su activador  Crear un Servlet  Crear un directorio para las páginas Web  Extender ServiceTracker  Obtener el servicio HttpService de contexto  Registrar recursos y servlets  Liberarlos en removedService()  Instanciarlo, abrirlo y cerrarlo en el activador
  • 69. OSGi y J2EE  Equinox tiene un bridge.war  http://www.eclipse. org/equinox/server/http_in_container.php  Plantilla de AppWeb con contexto /sp_test  Con un OSGi embebido en la consola Tomcat  BridgeServlet que hace de FrontController  Desplegar los bundle web en  WEB-INFEclipseplugins  Y arrancarlos desde consola
  • 70. Depuración  Arrancar el framework en modo remoto java –Xdebug -Xrunjdwp:transport= dt_socket,address=8787,server=y,suspend=n -jar framework.jar  Suspend indica que se pare en arranque  Crear un Debug Configuration en Eclipse  Remote Java Application  Indicar el puerto  Poner los puntos de ruptura y ejecutar OSGi
  • 71. Eclipse Plugins  Formato de bundle especial  Con un activador estandart: AbstractUIPlugin  Métodos getDefault() y getImageDescriptor()  Configurado mediante plugin.xml  Extensiones de la interfaz de Eclipse  Views, ayuda contextual, menús,…
  • 72. Eclipse Plugins  Ejemplo  Plugin con Custom Templates  Seleccionar Popup Menu y View  Asociar el Popup con org.eclipse.ui.IEditorInput  Configurar la categoría de la vista  Finish  Añadir más opciones al menú  Invocarán al método run() de la clase asociada