Showing posts with label OSGI. Show all posts
Showing posts with label OSGI. Show all posts

27 September 2011

Como instalar FuseIDE

Descargar Eclipse Helios SR2 (Importante que sea Eclipse IDE for Java Developers - 64 bits)
O
Descargar Eclipse Helios SR2 (Importante que sea Eclipse IDE for Java Developers - 32 bits)




Help->Install New Software -> Add -> http://repo.fusesource.com/ide/


Help->Install New Software -> Helios - http://download.eclipse.org/releases/helios
  • Actualizar "Modeling" y reiniciar.
  • Actualizar "SOA Development" (Desactivar Java Workflow Tooling) y reiniciar.
  • Actualizar "Web, XML, and Java EE Development" y reiniciar


Enlaces relacionados:

http://fusesource.com/products/fuse-ide/


- FIN -

22 August 2009

Consumo/Importación de servicios de un bundle

Cada Bundle puede consumir servicios que otros exponen, para ello se dispone del método getServiceReference de la clase BundleContext. Pero para poder usar un servicio, en el fichero MANIFEST.MF hay que importar los paquetes donde se encuentran estos.


Import-Package: edu.emmerson.osgi.holamundo1_bundle,
junit.framework,
org.osgi.framework


El siguiente código consulta al contenedor OSGi sobre los servicios exportados para la interfaz HolaMundoService (ver post anterior), lo recupera e invoca su método saluda.



package edu.emmerson.osgi.holamundo.consumer_bundle;

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

import edu.emmerson.osgi.holamundo1_bundle.HolaMundoService;

public class ConsumerActivator implements BundleActivator {

ServiceReference helloServiceReference;

public ConsumerActivator() {
System.out.println("HolaMundoConsumer - instanciandose");
}

public void start(BundleContext context) throws Exception {
System.out.println("HolaMundoConsumer - activandose");
helloServiceReference= context.getServiceReference(HolaMundoService.class.getName());
HolaMundoService helloService =(HolaMundoService)context.getService(helloServiceReference);
System.out.println(helloService.saluda("Emmerson"));
}

public void stop(BundleContext context) throws Exception {
System.out.println("HolaMundoConsumer - activandose");
context.ungetService(helloServiceReference);
}

}


- FIN -

20 August 2009

Registro y exposición de servicios en un Bundle

La arquitectura OSGi es una buena candidata para implementar aplicaciones orientadas a servicios. Todo Bundle exporta servicios que otros bundles pueden consumir.

Para exportar un servicio necesitamos:
  1. Una interfaz de nuestro modelo de dominio
  2. Un POJO que implemente esta interfaz
  3. Registrar/Exportar una instancia del POJO como servicio en una clase BundleActivator



La interfaz del modelo de dominio

package edu.emmerson.osgi.holamundo1_bundle;

public interface HolaMundoService {

public String saluda(String nombre);

}


El POJO que implementa esta interfaz

package edu.emmerson.osgi.holamundo1_bundle.impl;

import edu.emmerson.osgi.holamundo1_bundle.HolaMundoService;

public class HolaMundoServiceImpl implements HolaMundoService {

public HolaMundoServiceImpl(){}

public String saluda(String nombre) {
return "HolaMundo1 - hola " + nombre;
}

}


Registrando/Exportando el servicio en una clase que implementa BundleActivator (para la labor de exportación se dispone del método registerService de la clase BundleContext)

package edu.emmerson.osgi.holamundo1_bundle;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import edu.emmerson.osgi.holamundo1_bundle.impl.HolaMundoServiceImpl;

public class HolaMundoActivator implements BundleActivator {

ServiceRegistration servicioRegistrado;

public void start(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - activandose");
HolaMundoService helloService = new HolaMundoServiceImpl();
servicioRegistrado =arg0.registerService(HolaMundoService.class.getName(), helloService, null);

}

public void stop(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - deteniendose");
servicioRegistrado.unregister();
}
}



En el fichero MANIFEST.MF hay que exportar el paquete donde se encuentra la interfaz para que pueda ser accesible y también el activator.

Export-Package: edu.emmerson.osgi.holamundo1_bundle
Bundle-Activator: edu.emmerson.osgi.holamundo1_bundle.HolaMundoActivator



- FIN -

Personalizando el inicio y la parada de un Bundle

En OSGi se puede personalizar la carga un Bundle dentro del contenedor, o su parada, a fin de que se realizen una serie de acciones cuando se inicia o se detiene este; algo similar a los listeners de las webapps.

Para realizar esto, basta con tener una clase que implemente la interfaz BundleActivator y registrarla en el fichero MANIFEST.MF (los bundles fragmentados no lo necesitan)

La interfaz org.osgi.framework.BundleActivator, obliga a implementar los métodos start y stop, uno se llama cuando el bundle se inicia (para registrar servicios o asignar recursos), y el otro cuando se detiene.

EJEMPLO

La clase que implementa la interfaz

package edu.emmerson.osgi.holamundo1_bundle;

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

public class HolaMundoActivator implements BundleActivator {

ServiceRegistration helloServiceRegistration;

public void start(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - activandose");
}

public void stop(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - deteniendose");
}

}

Registro en el fichero MANIFEST.MF
Basta con agregar la siguiente línea:

Bundle-Activator: edu.emmerson.osgi.holamundo1_bundle.HolaMundoActivator


- FIN -

19 August 2009

Comandos de consola para OSGi

El siguiente listado contiene un conjunto de comandos básicos que se puede utilizar en la consola de OSGi.


  • ss .- lista todos los bundles instalados en el contendor, indicando sus ids, estados y nombres cortos.

  • start <bundleid> .- Inicia el bundle (invocando su clase BundleActivator, si esta esta indicada, claro!)

  • stop <bundleid> .- Detiene el bundle (invocando su clase BundleActivator, si esta esta indicada, claro!)

  • update <bundleid> .- Actualiza el bundle con el nuevo fichero JAR (detiene e inicia el bundle automáticamente)

  • install <bundleURL> .- Instala en el contenedor un bundle (fichero JAR)

  • uninstall <bundleid> .- Desinstala del contenedor un bundle previamente instalado

  • bundle <bundleid> .- Muestra la información del bundle indicado (servicios, paquetes importados, exportados ...)

  • cualquier cosa .- Si nos equivocamos al escribir un comando, en Equinox, se nos muestra un listado con todos los comandos disponibles




- FIN -

18 August 2009

java.lang.ClassNotFoundException: org.osgi.framework.BundleActivator

Si durante el desarrollo de aplicaciones usando OSGi aparece un error de clase no encontrada (ClassNotFoundException), es por que no se ha hecho la importación del paquete donde se encuentra esta, dentro del fichero MANIFEST.MF del bundle que se esta desarrollando.

Por tanto para solucionarlo bastaría con hacer la importación del paquete dentro del fichero MANIFEST.MF de la siguiente manera:


Import-Package: org.osgi.framework


NOTA: La interfaz BundleActivator se encuentra dentro del paquete org.osgi.framework

- FIN -

17 August 2009

java.lang.NoClassDefFoundError: org/osgi/framework/BundleActivator

Si durante el desarrollo de aplicaciones con OSGi nos sale un error en el cual nos dice que la definición de la clase no ha sido encontrada encontrada(NoClassDefFoundError), es simplemente por que el bundle (jar) que contiene la clase, no se encuentra instalado en el contenedor OSGi (en mi caso Equinox).

Para solucionar el problema habría que instalar el bundle que contiene la clase desde la linea de comandos en el contenedor. En el título de este post nos dice que no se encuentra la definición de la interfaz BundleActivator, por tanto habria que instalar el bundle org.osgi.core-4.0.jar en el contenedor.

Install es un comando de OSGi que sirve para instalar bundles dentro del contenedor, desde la linea de comandos.


osgi> install "file:///C:/maven2/.m2/repository/org/osgi/org.osgi.core/4.0/org.osgi.core-4.0.jar"


- FIN -

12 August 2009

OSGi para desarrolladores

Neil Bartlett hace una introducción práctica de como funcionan las versiones en OSGi, niveles extra de seguridad para clases públicas, aplicaciones donde se esta usando, estandares, los problemas actuales que existen con la OOP, frameworks actuales, y finaliza con una demo con equinox.

El video(en inglés) dura casi 1 hora.



Enlaces relacionados:

- FIN -

14 July 2009

Entrevista sobre OSGi (JSR 291)

En esta entrevista Neil Bartlett habla respecto a OSGi(JSR 291), lo define, habla sobre algunas de sus perspectivas, futuro, frameworks de mayor cobertura, integración con servidores de aplicaciones heredados (Websphere) y una pequeña comparación con la modularización en .NET.

Si bien es cierto las aplicaciones .NET pueden trabajar con versiones especificas de un assembly y que en una maquina puede haber cargadas diferentes versiones del mismo, coexistiendo sin ningún problema; cosa que en Java hasta la llegada de OSGi(JSR 291) no se podia realizar, aunque la principal diferencia ahora es que OSGi puede cargar o descargar los paquetes/assemblies dinámicamente en tiempo de ejecución.



Video original con textos (en inglés) - Neil Bartlett on OSGi

- FIN -

05 May 2009

Frameworks RIA basados en AJAX

Echo3, YUI, GWT y RAP .... por si fuera poco, aquí dejo "más madera" para aquellos que les guste divertirse con aplicaciones RIA hechas con AJAX (es decir que no usen Flash, Silverlight o JavaFX)


Echo3
Echo3 permite desarrollar aplicaciones web basadas en AJAX, en el lado servidor con Java o en el lado cliente con JavaScript. Las aplicaciones son desarrolladas orientadas a componentes y con un API que nos permite manejar sus eventos; de manera similar a las aplicaciones de escritorio, eliminando de esta manera la naturaleza basada en páginas de los navegadores. Para los desarrolladores Echo trabaja como un toolkit de interfaz de usuario.

Tal vez su característica más notable es la capacidad de crear aplicaciones completas del lado cliente utilizando JavaScript, sin necesitar un servidor de aplicaciones y además con la capacidad de ejecutarse enteramente offline.

Actualmente Netbeans tiene un plugin para Echo2 y para Eclipse existe un plugin llamado EchoStudio, el cual es de pago.

Enlaces relacionados:

Yahoo User Interface
La libreria YUI es un conjunto de utilidades y controles escritos en JavaScript para construir aplicaciones web RIA usando técnicas como DOM scripting, DHTML y AJAX; consume de forma natural datos en formato JSON; tiene una excelente documentación y ejemplos que hacen fácil el empezar a usarlos, lo único que me costo (a título personal) es aplicar estilos.

Actualmente existe un plugin para Eclipse llamado Aptana IDE.

Enlaces relacionados:

Google Web Toolkit
Framework desarrollado por Google, permite desarrollar aplicaciones web basadas en AJAX, programando y depurándolas usando Java con el IDE de preferencia. Al finalizar la escritura de nuestra aplicación (escrita en Java), GWT compila y traduce dicho programa a JavaScript y HTML compatible con cualquier navegador web.

Tiene su propio IDE basado en python, pero también tiene un plugin que se integra con Eclipse.

Enlaces relacionados:

Lo que no me gusta nada de GWT es que tenemos que escribir la GUI mediante código JAVA, me recuerda a otro framework similar que utilice en 2004, del cual un buen día elegí olvidarme su nombre :-P


Eclipse Rich Ajax Platform
RAP(a parte de ser un estilo musical :-p) nos permite crear aplicaciones RIA con front-ends Java, usando el modelo de componentes de Eclipse basado en el estándar OSGi(es decir : trata de llevar OSGi al lado cliente). OSGi es orientado a servicios, y basado en componentes, además promociona la interoperatibilidad de aplicaciones y servicios.

Su IDE es Eclipse.

Enlaces relacionados:

RAP y GWT son diferentes ya que RAP ejecuta la lógica en el servidor y genera JavaScript para los controles en tiempo de ejecución (NO en tiempo de compilación). Una implementación de SWT(Standard Widget Toolkit) se ejecuta en el servidor y los desarrolladores pueden extender sus vistas y perspectivas para añadir funcionalidad.


Lo mas interesante de todo esto es ver que sucedera en adelante con el matrimonio OSGi & Ajax (que merece todo un artículo de por si solo)!!!

P.D: Y todo este lio por que estoy explorando las posibilidades que me da Google App Engine (Por naturaleza GWT); en fin una cosa lleva a la otra ... y asi acabamos escribiendo a veces pequeños resumenes como este.

- FIN -

23 April 2009

Construyendo WebApps usando OSGI

Como mencionaba anteriormente OSGI a sido adoptado por los principales proveedores ya que proporciona componentes/módulos en todo el sentido de la palabra, donde cada módulo puede contener todo lo que necesita, esto en el caso de las aplicaciones web significa que podemos añadirle módulos que incorporen su propio código, jsps y ficheros de recursos como una unidad/módulo.

El siguiente tutorial es conciso, breve y detallado; a través de 12 pasos nos enseña a adoptar OSGI en la construcción de aplicaciones web, proporcionando además código de ejemplo (se utiliza JSE1.6, Eclipse Ganymede, Equinox y Tomcat).

Modularizing Existing Web Applications with OSGI : A migration path to OSGI.

En un post anterior explico lo que es OSGI.


Enlaces relacionados:


- FIN -

08 April 2009

OSGI

Creado en Marzo de 1999. Acrónimo de Open Services Gateway Initiative. Tubo como principal impulsor a Sun Microsystems, y entre otros también IBM que no termina en decidirse en ser el siguiente propietario de Sun (cosas de la vida).

Esta orientado principalmente a la plataforma Java y permite:

  1. Gestionar la carga dinámica de componentes
  2. Soportar versionado de componentes
  3. Gestionar los ciclos de vida de servicios en forma de paquetes (o componentes)


Un paquete es poco más que un fichero .jar, con sus interfaces, implementaciones y un fichero manifiesto. Dicho componente se puede definir por cierta meta-información en su manifest el cual especifica los servicios exportados y los permisos necesarios para poder ser reutilizados por otros componentes.

Permite la gestión del ciclo de vida del software (instalación, parada, redespliegue, arranque o desinstalación de paquetes) comprobando las dependencias existentes para el/los paquetes tratados y evitando conflictos de ejecución.

Permite también la gestión de versiones de los paquetes, permitiendo la coexistencia de distintas versiones según necesidades y dependencias establecidas.

Permite un modelo de Programación Orientado a Servicios, ya que (al contrario de EJB o RMI que necesita definir interfaces remotas) los servicios son publicados y registrados en el contenedor automáticamente durante la carga de los mismos.

Actualmente empresas como BEA/Oracle, IBM, JBoss estan adoptando este modelo como parte de las estrategias en el lado del servidor de aplicaciones (que es donde OSGi puede sacar su mayor potencial para solucionar muchos de los problemas que existen actualmente en los servidores de aplicaciones (empaquetado, abstracción de los paquetes, carga dinámica de los mismos, dependencias, gestión del ciclo de vida, versionados, etc…)).

[Quien alguna vez no ha tenido problemas instalando mas de una libreria de log4j, axis o xfire, en un servidor de aplicaciones? bien es sabido que dependiendo de que versiones se utilizen pueden resultar incompatibles entre ellos; pues bien con este modelo esos problemas desaparecen]

Como nota adicional cabe mencionar que el sector de la telefonía (Nokia, Motorola y Ericsson) prepara la siguiente generación de teléfonos inteligentes basados en OSGi.

La serie 5 de BMW incluye OSGi en su plataforma de comunicaciones, los fabricantes de software como IBM ya tienen versiones de servidores de aplicaciones (Websphere) con esta tecnología, Apache con Felix y Eclipse.


Enlaces relacionados :

En la wikipedia
OSGI en pocas palabras
Enterprise OSGi - "Not List"
Spring and OSGi - A Perfect Match?
Power Combination: SCA, OSGi and Spring
IBM, BEA and JBoss adopting OSGi
Oracle : An Introduction to OSGi on the Server Side


- FIN -