¿Puede tener componentes personalizados JSF en diferentes paquetes OSGi?
Pregunta
¿Alguien ha usado OSGi y JSF juntos?
Lo pregunto porque JSF usa la magia del cargador de clases para encontrar componentes personalizados. De un tutorial (énfasis mío):
Este archivo de configuración terminará siendo META-INF / faces-config.xml en el archivo .jar que representa esto componente. JSF buscará tal Nombre del archivo en cada uno de los archivos .jar. que se cargan en tiempo de ejecución (en el Directorio WEB-INF / lib para archivos .war) y usar cada uno de ellos en su configuración. De esta manera, múltiples componentes .jar archivos pueden ser combinados en una aplicación web, y todos Los componentes descritos en cada .jar. Estará disponible para la aplicación.
Me gustaría poder tener componentes personalizados JSF como paquetes OSGi (es decir, los componentes personalizados están en paquetes OSGi diferentes a los del tiempo de ejecución JSF) y para que JSF pueda encontrarlos en tiempo de ejecución.
¿Alguien ha hecho algo similar?
Solución
Es posible de la siguiente manera:
- Su paquete web osgi tiene que tener " Require-Bundle " en MANIFEST.MF que apunta al paquete que contiene los componentes
- El contenedor de componentes debe tener un paquete de exportación que contenga META-INF y subpaquetes de META-INF donde haya algún archivo relacionado con JSF (y, por supuesto, paquetes estándar del componente). Por ejemplo: Export-Package: META-INF, META-INF.resources ...
Si usa el complemento de paquete de maven, debe usar un apóstrofe y un igual para exportar META-INF y subpaquetes. Por ejemplo:
<Export-Package>
a.b.c,
'=META-INF',
'=META-INF.resources',
...
</Export-Package>
En JSF Spec 2.2 puede haber partes sobre la relación JSF-OSGI. Para ver el progreso, consulte http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-942
Otros consejos
No estoy seguro de que responda exactamente a tu problema, pero encontré este hilo sobre Spring y osgi interresting, especialmente este respuesta específica donde las dependencias y classpath están agrupadas en MANIFEST.MF.
Ese hilo también conduce a la actualización de este tutorial sobre Spring Dynamic Modules (DM) para plataformas de servicio OSGi ™ que también puede ser de interés.