2009-12-02 7 views
14

Tengo un requisito en el que tengo que compartir algunos recursos web (jsp, html, js, images, css etc.) a través de diferentes aplicaciones basadas SpringStruts 2. Y parece que OSGi se puede utilizar para lograr esto?OSGi: ¿Cuán madura es esta tecnología?

  • ¿Puede alguien dar algunos consejos sobre cómo lograr esto con OSGi?
  • Y en segundo lugar, quiero saber es OSGi lo suficientemente maduro para ser utilizado en aplicaciones de producción?

¡Gracias de antemano!

EDIT: Fui a través this puesto y parece que la gente son capaces de compartir un paquete web a través de aplicaciones web. La única diferencia es que lo hicieron con Spring MVC. Quiero saber si esto también se puede lograr con las aplicaciones de Struts2.

EDIT 2: Soy básicamente poco claro acerca de lo siguiente:

  • ¿El 'compartible-paquete' (que contiene los recursos de Internet para compartir) sea un .war empaquetado. En caso afirmativo, ¿desde dónde se formará el contexto web final ya que este paquete se va a compartir nuevamente con la aplicación principal 'web'? Espero que el contexto web final se forme a partir de la fusión de la aplicación web "compartible" y la "principal". ¿Sucederá automáticamente? ¿Algunas ideas?

Respuesta

7

Si bien OSGI podría ser una solución, podría ser un poco exagerado (y, como señaló Bozho, necesitará un contenedor compatible con OSGI).Tal vez echar un vistazo a How to share resources across projects in Maven para otras opciones:

En este blog voy a mostrar cómo hacer la segunda opción ya que en mi opinión, es es actualmente el más estable y flexible. En el futuro, probaré el maven-remote-resources-plugin y escribo un tutorial.

EDITAR: Para responder un comentario del OP. , la idea es crear un conjunto de los recursos web que se pueden compartir y usar el complemento maven-dependency-plugin para extraer y descomprimir el ensamblado en los proyectos "recursos-consumidores". Todo esto se explica y detalla en la entrada del blog mencionada anteriormente. Avíseme si algo no está claro en eso.

+0

Si entiendo correctamente, ¿está sugiriendo formar un ensamble (en términos maven) de los recursos web que se pueden compartir? Pero ¿cómo se fusionarán en la aplicación que necesita utilizar este recurso compartible? Por favor, explíquelo un poco más ... gracias – peakit

+0

He cubierto esto. Avísame si quieres más detalles. –

+0

Gracias Pascal! Pasaré por la ruta de "montaje" y "dependencia" de maven y preguntaré si algo no está claro. Gracias por compartir esta maravillosa idea. – peakit

6

OSGi se utiliza en Eclipse, GlassFish, ServiceMix (y otros, también), que son productos de software maduros. Sin embargo, son de naturaleza muy específica, y mi opinión personal es que OSGi no es muy adecuado para los proyectos de tipo común. Por lo que sé (alguien me corrige, si hay noticias en esta área), si desea usar OSGi con aplicaciones web, necesitará un contenedor de servlet incluido en OSGi. Además, poner recursos (html, js, images) en paquetes OSGi puede ser problemático.

+0

Bozho, ¿puede decir a qué tipo de problemas se puede enfrentar poniendo recursos en paquetes OSGi? Como la lectura de http://stackoverflow.com/questions/126073/modular-web-apps parece posible, solo quiero confirmarlo con las aplicaciones de Struts2. – peakit

+0

Dado que se trata de recursos, independientemente del marco, la primera respuesta en el hilo que pegó también es relevante para su caso. – Bozho

+0

Allí están usando Spring MVC. Ya que no conozco Spring MVC, solo estoy revisando si se puede lograr el mismo nivel de intercambio con las aplicaciones de Struts2. – peakit

3

OSGi es una tecnología bastante madura: así es como se estructuran todos los complementos de Eclipse. Sin embargo, la tecnología todavía tiene que ganar tracción en el espacio de la aplicación web porque hay muy pocos contenedores de servlets que lo admitan.

Si desea leer sobre él, debe consultar Modular Java de Craig Wells, ya que ofrece una base bastante buena sobre OSGi en relación con Spring Framework.

Con respecto a compartir recursos, es posible que desee examinar un paquete EAR. Lo he usado con éxito para implementar varios archivos WAR con un conjunto común de recursos (por ejemplo, una versión comprimida de Dojo).

Por ejemplo, una oreja puede verse como:

ear-file/proj1 
ear-file/proj2 
ear-file/config 
ear-file/lib 
ear-file/resources 
ear-file/META-INF 
ear-file/APP-INF 

También puede leer sobre el hilo .war vs .ear file desde un puesto de stackoverflow anterior.

1

no estoy demasiado familiarizado con puntales (o Spring MVC, para el caso), pero lo podría hacer en el SpringSource dm Server. Se basa en Equinox, el contenedor OSGi utilizado por Eclipse, y un Apache Tomcat bundled (así como las cosas del framework Spring).

Con el servidor SpringSource, cada archivo de la guerra se despliega más o menos tradicional, pero pueden acceder a recursos (clases, servicios, etc.) a través de los mecanismos normales de OSGi. Esos mecanismos se basan en los cargadores de clases del paquete OSGi, lo que puede ser problemático para compartir recursos de archivos como jsps, html, css, etc. Podría funcionar si tuviera algo similar al DefaultServlet que procesara cosas del cargador de clases en lugar del sistema de archivos. (O, diablos, podría estar haciendo esto más complicado de lo que necesito).

Por otro lado, podría implementar todo como aplicaciones web independientes y unirlo todo en el extremo del cliente.

La primera respuesta a la pregunta the modular web apps parece realmente interesante, aunque no directamente aplicable al servidor SpringSource, ya que no proporciona el OSGi HttpService. Creo que el reciente trabajo de especificación empresarial de OSGi 4.2 se dirige también hacia el enfoque desplegar-war-files-as-OSGi-bundles del servidor SpringSource.

En respuesta a su EDIT 2 pregunta , si he entendido bien, el "contexto web" en ese answer sería construido de forma dinámica mediante el HttpService, que es una interfaz que proporciona métodos para

  1. registrar servlets bajo URLs y

  2. registrar recursos (archivos, etc.) en las URL.

Dado que esas operaciones se manejan dinámicamente, no es necesario que haya nada que combine explícitamente bits de contexto web.

+0

¡Gracias Tommy por compartir tus opiniones sobre esto! De hecho, necesito explorar la interfaz "registrar recursos usando HTTPService" proporcionada por OSGi. Y también creo que las cosas no son sencillas y podrían implicar un truco o dos. Puede ser que trate de lograr todo esto usando un ensamblado de maven y un complemento de dependencia en lugar de jugar con el cargador de clases. ¿Qué dices? – peakit