domingo, 9 de agosto de 2009

¿Qué es OSGi?


Se preguntan ¿Qué es OSGi? y supongo que todos hemos usado eclipse alguna vez y con eclipse, equinox. Equinox es un contenedor OSGi implementado por eclipse.

Equinox, es el contenedor en donde viven los plugins, donde pueden convivir entre ellos y comunicarse con el core de eclipse.

Bueno en pocas palabras eso es OSGI, OSGi proporciona funciones más parecidas a un contenedor web, pero es más versatil. Un contenedor web (Tomcat) te permite cargar varias aplicaciones que trabajan de manera independiente. El aislamiento de las aplicaciones se logra a través de diferentes "class loaders" (cargadores de clases?). De esta forma, una aplicación queda aislada de los efectos de otras -ya que las clases son cargadas en memoria de manera independiente-. OSGi proporciona dicha función, pero no pone restricciones en las aplicaciones (no tienen que ser servlets o aplicaciones web). OSGi es más flexible. OSGi permite que aplicaciones cooperen con otras a través de interfaces declaradas en archivos de configuración. Así, por ejemplo, puedes cargar dos aplicaciones que comparten las mismas componentes comunes, sin que las clases se carguen independientemente en memoria pero sin que una afecte a la otra.

En otras palabras, OSGi te permite crear aplicaciones a partir de componentes. Estos componentes son cargados en distintos class loaders. Dos ( o mas componentes) pueden interactuar entre si únicamente a través de interfaces declaradas explícitamente en archivos de configuración (en xml).

OSGi te permite el cargar o descargar componentes. O cargar diferentes versiones de dos componentes y reemplazar los componentes existentes de manera dinámica. (Tal como Tomcat te permite el cargar y descargar una aplicación web, pero con mucha mayor flexibilidad)

OSGi es utilizado en teléfonos celulares y PDA; me parece que fue esta industria la que creo el concepto y las primeras especificaciones. El aislamiento proporcionado por OSGi permite que la falla en una aplicación o componente no afecte a las aplicaciones que no los usan.

Si has desarrollado plugins para Eclipse entonces ya te abras dado cuenta de que aporta OSGi. Netbeans usa un framework con funcionalidad similar, pero no es OSGi. Mientras que Eclipse esta basado en OSGi (por lo menos el kernel de Eclipse). Cabe mencionar que OSGi no tiene ninguna relación con desarrollo de IDEs o GUIs, pero que el concepto utilizado por Eclipse y/o Netbeans para cargar los plugins es similar a la funcionalidad proporcionada por OSGi.

OSGi también proporciona especificaciones para seguridad. (Por ejemplo, para cargar únicamente componentes que han sido firmados y verificados en su integridad).

Sin embargo, yo no he notado que se generalice el uso de OSGi. (Basta con buscar empleo con la palabra OSGi como termino de búsqueda para darse cuenta que aun no se usa mas que en ciertos nichos o en en algunos start-up).

OSGi es solo una especificación. Hay diferentes implementaciones. Wikipedia puede darte más información al respecto.

Existen varios frameworks OSGI como equinox, o apache felix. Ahí les dejo los links.