Estamos desarrollando una aplicación Web (llamémosle un banco de imágenes) para los que se han identificado las siguientes necesidades:Cómo prestación de servicios OSGi por cliente
- La aplicación atiende a los clientes que se componen de un conjunto de usuarios.
- un nuevo cliente se pueden crear de forma dinámica y un cliente gestiona sus usuarios
- Los clientes tienen diferentes conjuntos de características que se pueden cambiar dinámicamente
- clientes pueden desarrollar sus propias características y hacer que se despliegan.
- La aplicación es homogénea y tiene una versión actual, pero el levantamiento de versión de los clientes aún se puede manejar de forma individual.
- La aplicación debe administrarse como un todo y los clientes comparten los recursos que deberían ser fáciles de escalar.
Pregunta: debemos construir esto en un marco de OSGi estándar o habría que ser mejor de utilizar uno de los marcos de aplicaciones emergentes (Virgo, Aries o próxima estándar OSGi)?
Más de fondo y algunas ideas iniciales:
Estamos construyendo una aplicación web que imaginar que pronto tendrá cientos de clientes (empresas) con cientos de usuarios cada uno (empleados), de lo contrario ¿por qué preocuparse;). Queremos que sea modular, por lo tanto, OSGi. En el futuro, los propios clientes podrían desarrollar y agregar componentes a su aplicación, por lo que necesitamos aislamiento del cliente. También es posible que deseemos que diferentes clientes obtengan diferentes conjuntos de características.
¿Cuál es la forma "correcta" de proporcionar diferentes implementaciones de servicios a diferentes clientes de una aplicación cuando diferentes clientes comparten los mismos paquetes?
Podríamos utilizar el enfoque de servidor de aplicaciones (hemos estudiado a Virgo) y cargar cada paquete una vez para cada cliente en su propia "aplicación". Sin embargo, no se siente como abrazar OSGi. No estamos organizando una multitud de aplicaciones, el 99% de los servicios compartirán la misma impl. para todos los clientes. También queremos administrar (configurar, monitorear, etc.) la aplicación como una sola.
Cada servicio se puede registrar (configurar correctamente) una vez para cada cliente junto con alguna propiedad de "ficha de cliente". ¿Es un poco desordenado y debería manejarse con un patrón extensible o quizás una ManagedServiceFactory? Además, antes de registrar un servicio para el cliente A, deberá adquirir la versión A de cada una de sus dependencias.
El cliente "actual" será conocido por cada solicitud y puede vincularse al hilo. Es un poco complicado tener que proporcionar un token de cliente cada vez que busca un servicio. Hace que sea difícil usar marcos de componentes como blueprint. Para evitar el problema, podríamos usar los ganchos de servicio para representar por proxy cada tipo de servicio registrado y permitir que el proxy se envíe a la instancia correcta de acuerdo con el cliente actual (thread).
Comenzar toda nuestra experiencia OSGi mediante la implementación de la solución provisional (¿hack?) De arriba realmente parece una indicación de que estamos en el camino equivocado. ¿Entonces, qué debemos hacer? ¿Volver a Virgo? Intente algo similar a lo que se describe arriba? ¿Algo completamente diferente?
ps. ¡Gracias por leer todo el camino hasta aquí!;)
He editado la pregunta para que sea más concreta, por lo que debería ser más fácil aceptar una respuesta, ¡lo que realmente quiero hacer! Soy bastante nuevo en stackoverflow así que discúlpeme por ser un poco torpe ... –