2010-07-16 22 views
7

Estamos construyendo una aplicación web JSP, que se ejecuta dentro del contenedor OSGi de Apache Felix (la aplicación web en sí es un paquete OSGi). Ahora, nos enfrentamos al siguiente problema:JSP en OSGi: ¿cómo cargar TLD de los paquetes?

De acuerdo con la especificación JSP 2.0, los TLD (descriptores taglib) ya no necesitan residir dentro de la carpeta WEB-INF de las aplicaciones web, sino que se cargan directamente del archivo META del taglib. Carpeta INF. Estos tarros taglib generalmente se encuentran dentro de la carpeta de aplicaciones web WEB-INF/lib, pero debido a que son paquetes OSGi, los carga Felix.

En la información OSGi del taglib, importamos todos los paquetes necesarios. ¿Alguien sabe cómo decirle al servlet, para buscar TLD también dentro de los paquetes OSGi cargados?

Gracias por su ayuda!

+0

¿El contenedor JSP se lanzó fuera del entorno OSGI o es un paquete? –

+0

Es un paquete. Estamos usando OPS4J Pax Web (http://wiki.ops4j.org/display/paxweb/Pax+Web) – Basil

Respuesta

3

Pax won't find your TLDs, si se encuentran en un paquete diferente de su aplicación web:

Tag Liberaciones

el fin de obtener sus bibliotecas de etiquetas personalizadas trabajar los archivos TLD tendrá que ser alcanzable en su agrupar en lugares "especiales":

  • todos los archivos TLD en cualquier frasco referenciado por su Bundle-ClassPath entrada de manifiesto
  • todos los archivos TLD en el directorio WEB-INF o subdirectorio del directorio WEB-INF en su frasco haz

Tenga en cuenta que no se buscarán los paquetes importados (puede ser que este apoyo se añadirá más adelante)

Tengo este problema en un sistema basado en Struts donde comparto un paquete de Struts OSGi-fied entre múltiples paquetes de webapp. Los webapps tienen JSP que necesitan el taglib de Struts. Un poco hackish (porque copia el TLD por todas partes) solución está poniendo el TLD en el directorio META-INF de su webapp y hace que el paquete webapp requiera paquetes Struts (o, si no usa Struts, cualesquiera clases procesar las etiquetas). Esto se puede automatizar con Maven como sigue:

<plugin> 
     <!-- 
     Extract the TLD file from the Struts bundle you are using 
     and place it in src/main/resources/META-INF of your webapp's 
     project directory during generate-resources. This will make 
     the file end up in the appropriate place in the resulting WAR 
     --> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>extract-tld</id> 
      <phase>generate-resources</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <artifactItems> 
       <artifactItem> 
       <groupId>org.apache.struts</groupId> 
       <artifactId>struts2-core</artifactId> 
       <version>${struts.version}</version> 
       <outputDirectory>src/main/resources</outputDirectory> 
       <includes>META-INF/struts-tags.tld</includes> 
       </artifactItem> 
      </artifactItems> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <!-- 
     Add the required Manifest headers using the maven-bundle-plugin 
     --> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <configuration> 
     <!-- ... --> 
     <instructions> 
      <!-- ... --> 
      <Import-Package>[...],org.apache.struts2.views.jsp</Import-Package> 
     <!-- ... --> 
     </instructions> 
     </configuration> 
    </plugin> 
+0

Hanno, gracias por su buena explicación y respuesta útil. Probaré tu 'hack' en nuestro entorno. De todos modos, todavía espero "que este soporte se agregue más adelante", como se indica en el documento OPS4J. – Basil

+1

A partir de la versión 1.1.0 Pax Web está buscando TLD también en paquetes importados, eso es lo que estaba soñando :-) – Basil

0

En general, es difícil integrar las bibliotecas OSGi y Java EE. Las personas de Nuxeo CMS lograron integrar Seam Framework y OSGi, así que creo que al usar sus ideas, pueden integrar JSP TLD y OSGi también, incluso más fácilmente. Simplemente descargue Nuxeo y analice su código fuente: http://www.nuxeo.org/xwiki/bin/view/Main/

Sin embargo, la integración de OSGi y Java EE es en general difícil. ¿Realmente necesita la integración de tiempo de ejecución OSGi? ¿Tal vez la integración en tiempo de compilación de Maven será suficiente para ti? Muchas personas simplemente ven a Maven y herramientas similares como OSGi en tiempo de compilación.

Cuestiones relacionadas