¿Cómo crear una aplicación JSF 2.0 modular?

Tengo una aplicación con una interfaz bien definida. Utiliza CDI para la resolución de los módulos (específicamente usa puntos de inyección Instance <> en las interfaces API para resolver módulos) y pasa varios datos hacia atrás y en cuarto lugar a través de las interfaces sin problema. He mantenido intencionalmente la API y la implementación separadas, y los módulos solo heredan de la API para evitar un acoplamiento estrecho, y la aplicación solo conoce los módulos a través de las dependencias de tiempo de ejecución y el paso de datos realizado a través de las API. La aplicación funciona bien sin los módulos, que se pueden agregar simplemente colocando el jar en la carpeta WEB-INF / lib y reiniciando el servidor de aplicaciones.

Donde me encuentro con problemas es que quiero que los módulos creen una parte de la vista y, por lo tanto, quiero invocar, de forma portátil, un componente JSF o hacer una inclusión desde el módulo para tener Representa su vista. Ya he resuelto qué módulo quiero invocar, y tengo referencias a la interfaz del módulo lista. La forma en que inicialmente pensé hacer esto era hacer una interfaz de usuario: incluir que le pide al módulo que proporcione dónde está su plantilla de vista, pero no tengo idea de cómo responder a esa consulta de manera significativa, ya que la resolución de vista se realiza desde la aplicación raíz, no la raíz de la biblioteca.

El resumen ejecutivo es que no tengo idea de cómo saltar la brecha de la aplicación a la biblioteca usando JSF para archivos .xhtml (plantilla / componente).

Usar un CC sería bueno, pero ¿cómo especifico que quiero una instancia de CC en particular en tiempo de ejecución, en lugar de tener eso codificado en la página?

Por supuesto, puedo invocar el código de la aplicación directamente y pedirle un marcado, pero esto parece realmente una fuerza bruta, y una vez que tengo el marcado, no estoy seguro exactamente cómo decirle a JSF que lo evalúe. Dicho esto, puedo imaginar un componente que tomaría la ruta de los recursos, tomaría el marcado y lo evaluaría, devolviendo el marcado completo, simplemente no sé cómo implementar eso.

Prefiero evitar obligar a los desarrolladores de módulos a adoptar el enfoque de componente de UIC de alta resistencia si es posible, lo que significa una forma dinámica de hacer ui: incluir (o algún equivalente) o una forma dinámica de invocar CC. (No me importa codificar el enfoque UIComponent UNA VEZ en la aplicación si eso es lo que se necesita para facilitar la vida de los desarrolladores de módulos)

¿Alguna sugerencia sobre dónde debería buscar resolver esto? (Publicaré la respuesta aquí si la encuentro primero)