2012-04-20 32 views
7

Necesito reutilizar el código desarrollado originalmente para una aplicación Eclipse RCP (es decir, empaquetada como Eclipse plugin/OSGi bundle) en un servlet.Para incrustar OSGi en contenedor de servlet o contenedor de servlet en OSGi?

Después de leer un montón de artículos en blogs y wikis, etc. acabé en el punto en el que sé que:

    marco
  1. Un OSGi (Equinox en mi caso) puede ser embebido en un servlet contenedor (Tomcat 7 en mi caso)
  2. o Tomcat puede integrarse en un marco OSGi.

Equinox recomienda la segunda opción como más fácil. Pero para la producción recomiendan 1. No estoy seguro de por qué. ¿Qué es realmente mejor en qué caso y por qué?

Soy un usuario de Tomcat bastante avezado, ¿incluirá Tomcat en Equinox change administrándolo en gran medida? o en otras palabras, ¿qué será diferente en Tomcat integrado en Equinox?

Respuesta

5

Primero, ¿el código tiene alguna dependencia OSGi/Equinox además del manifiesto? Si no, debería funcionar bien en un Tomcat simple.

Según tengo entendido, la incorporación de Tomcat en Equinox cambiará al administrarlo en gran medida. El diseño de su carpeta, incluidos server.xml y catalina.sh, desaparecerá. En cambio, administrarás una aplicación Equinox probablemente a través de config admin.

En segundo lugar, hay dos modelos de programación y despliegue de servlets para OSGi. El primero es HttpService en el que registra programáticamente sus servlets y recursos (también puede hacerlo a través de un punto de extensión). En este caso, su aplicación es solo una colección de paquetes. Sin embargo, no puedes usar filtros. El segundo es un paquete de aplicaciones web (WAB) que es un WAR OSGified.

+2

Se me olvidó por completo, si está buscando ejecutar Tomcat en Equinox, es probable que quiera echar un vistazo a [Eclipse Virgo] (http://www.eclipse.org/virgo/) en lugar de compilarlo usted mismo . –

4

Apache Sling maven-launchpad-plugin puede producir un archivo de guerra que incrusta un marco OSGi (Apache Felix como estándar, no estoy seguro si otros son compatibles) y un conjunto de paquetes que usted define. Se puede usar para ejecutar aplicaciones OSGi en Tomcat.

5

Hemos estado haciendo una migración de una aplicación web bastante compleja que utiliza Jetty desde no OSGi a OSGi en Equinox. He aprendido algunas cosas que definitivamente pueden impulsar su decisión de una manera u otra: - Si elige usar OSGi como marco para ejecutar su aplicación y p. opción # 2, todo lo que consuma su aplicación tendrá que ser paquetes OSGi. Cualquier externo o tercero de bibliotecas comerciales. Si usa muchos de código abierto, es bastante fácil encontrar paquetes. O, si no puede encontrar los paquetes, siempre puede bundalize usted mismo con BNDTools. Aún así, este enfoque podría llevar mucho tiempo para descifrar todas las dependencias adecuadas y los posibles problemas del cargador de clases requiere ataques informáticos en OSGi - El enfoque de integrar OSGi en Tomcat, que puede parecer un enfoque más seguro y sencillo en la superficie. Aunque no estoy seguro de que obtendría beneficios de WAB en este caso.

BTW uno de los beneficios interesantes de WAB es que puede compartir fácilmente código entre WebApps, ya que se implementan como paquetes y simplemente puede exportar/importar paquetes a través de ellos. Algo que no es realmente posible con implementaciones que no sean OSGi en la actualidad.