2010-04-02 14 views
27

Soy bastante nuevo en el mundo de Java y OSGi y tengo problemas para entender el sistema ecológico de una aplicación web OSGi.Problemas para comprender todo el sistema ecológico web OSGi

Para ser más precisos estoy en este momento tratando de entender cómo todas las partes del sistema ecológico están relacionados entre sí:

  • marco OSGi (por ejemplo Apache Felix, Equinox, Knoplerfish)
  • OSGi Runtime (por ejemplo, primavera DM Server, Pax Runner, Apache Karaf)
  • Extender web (por ejemplo, Pax web Extender, Spring web Extender)
  • contenedor web (por ejemplo Apache Tomcat, embarcadero)

para darle una representación visual de mi comprensión real de su relación echa un vistazo a esta imagen:

alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png

Por lo que yo sé el marco OSGi es una implementación de la especificación OSGi. El tiempo de ejecución es una distribución que agrega funcionalidad adicional sobre la especificación OSGi, como el registro, por ejemplo. Dado que parece haber algunas diferencias en el mecanismo classpath de OSGi y contenedores web como Tomcat, necesitas algún tipo de traductor. Esta parte es manejada por el "Web Extender".

¿Podría aclarar todo esto por mí? ¿Estoy entendiendo todo correcto?

Respuesta

24

OSGi es un estándar en términos de API y embalaje para interactuar con módulos de software. Esto es similar a otros estándares API como JPA o Java EE.

Un tiempo de ejecución OSGi es un servidor que sigue el estándar OSGi, es una implementación del estándar. Mencionas algunos comunes: Knopflerfish, Eqinox. Estos le permiten ejecutar paquetes OSGi.

Un contenedor web generalmente se refiere a una implementación de las partes específicas de la web de Java EE (servlets). El estándar de servlet también define una API y un paquete, al igual que OSGi, solo diferentes.

Necesita un servidor para ejecutar sus aplicaciones web Java EE. Usted empaqueta su aplicación como un Java Web Archive (WAR) y le pide al servidor de su aplicación que la inicie. Hay varios servidores, como usted menciona, como Tomcat, Jetty, pero también servidores más grandes que cubren partes más grandes del estándar Java EE, como Glassfish y JBoss.

Un extensor web intenta unificar el estándar de servlet con OSGi. Al agregar algunos datos específicos de OSGi a su WAR ya empaquetado, WAR se analizará automáticamente y se iniciará con el tiempo de ejecución de OSGi. Los servlets WAR se publicarán en el servicio http OSGi mediante el extensor web. Con un extensor web, puede ejecutar tanto aplicaciones OSGi estándar como WAR utilizando solo un tiempo de ejecución OSGi, sin la necesidad de un servidor compatible con Java EE como Tomcat.

+4

Gracias por su respuesta rápida repudio. Si le entiendo correctamente, el extensor web toma los archivos WAR, que normalmente se implementarían en un contenedor web como tomcat, y los haría funcionar en el tiempo de ejecución de OSGi. El OSGi HttpService los pondría a disposición "en la web" a través del protocolo HTTP. ¿Correcto? En conclusión: ¿No necesitaría un contenedor web como Tomcat? – Jens

+2

Sí, exactamente a la perfección sobre cómo encaja. Sus servicios estarán disponibles a través del servicio http OSGi. Sin embargo, en la práctica, el extensor web usa un contenedor web para desplegar la GUERRA de todos modos. El beneficio que obtienes es que la GUERRA se puede iniciar con tus scripts de inicio normales del marco OSGi, y los WAR pueden tomar parte en la administración de dependencia normal del marco OSGi (es decir, puedes confiar en WAR: s, y WAR: s puede depender de otros paquetes OSGi). –

+1

Y todos los servlets se registrarán en el servicio http OSGi. –

3

Jens,

Como tengo algo de experiencia con OSGi, realmente sería no sugerimos que comience con OSGi sin formato.

Comience con Eclipse RCP (Rich Client Platform) en su lugar.

No solo obtiene un tiempo de ejecución OSGi, sino un IDE integrado con todas las características si download Eclipse IDE for RCP and RAP Developers edition here.

Por suerte para todos nosotros, se puede conseguir el libro Eclipse Rich Client Platform (2nd Edition) que recientemente fue lanzado hace sólo unos pocos meses y contiene información actualizada/guía en Eclipse RCP.

OSGi es los bloques de construcción fundamentales de Eclipse RCP, sin embargo OSGi por sí mismo es confuso y aburrido (al menos para empezar). Ponerse al día con Eclipse RCP es mucho más fácil y divertido, puede crear una aplicación funcional de "hacer algo" en cuestión de horas.

Con OSGi llano, que ya tendría suerte si usted puede deshacerse de las excepciones ClassNotFound dentro de los primeros días.

Después de un tiempo con Eclipse RCP, "convierta" su aplicación a Eclipse RAP para ejecutarla como una aplicación web en un contenedor de servlets de Java. A ver si te gusta, incluso si no lo hace ... en ese momento que le ha comprendido ya los conceptos de OSGi & prácticas que su vela a "OSGi normal" sería un poco más suave que si hubiera comenzado a partir de cero.

Buena suerte Jens!

P.S. También escribo sobre esto en my Java EE blog, aunque no siempre específicamente en OSGi.

+0

Hey Hendy, gracias por su respuesta. Supongo que no soy el codificador habitual, ya que pensé que OSGi no es tan malo en absoluto. E hice la mayoría de mis proyectos de capacitación solo usando mi terminal/consola y un editor de texto simple;) Me gusta mantener las cosas simples. Pero todo el entorno de Eclipse no está mal, por supuesto, y para los proyectos más grandes, el camino a seguir. No sé por qué todos los codificadores OSGi están tan avergonzados de OSGi simple? En mi opinión, volvió a hacer que Java fuera interesante. – Jens

+0

Solo quería agregar mis 2 centavos aquí. No estoy de acuerdo con el consejo de Hendy acerca de no mirar o usar OSGi simple. Hay muchos casos en los que OSGi simple u otros componentes OSGi son una opción mucho mejor que RCP. Seguramente RCP tiene sus usos, pero no es la bala de plata. –

+1

@Marcel gracias, estoy de acuerdo con usted en que "RCP tiene su uso, pero no es la solución mágica". Lo que quería decir es que Eclipse RCP es una manera más fácil para empezar (es decir ** ** fase de aprendizaje) con OSGi. Dentro de unos días, un programador podrá hacer muchas cosas relativamente más fácilmente que con OSGi simple, y luego tendrá una "idea" de lo que es OSGi. Un programador en blanco a partir de OSGi simple probablemente perciba demasiados errores los primeros días y se confunde fácilmente. Después de que se pasa la curva inicial, el desarrollador elige si RCP o OSGi simple es mejor para su proyecto. –

Cuestiones relacionadas