Stiamo sviluppando un web-application (consente di chiamare una banca immagini) per il quale abbiamo individuato le seguenti esigenze:Come fornitura di servizi OSGi per cliente
- L'applicazione si rivolge ai clienti che consistono in una serie di utenti.
- Un nuovo cliente possono essere creati in modo dinamico e un cliente gestisce i suoi utenti
- clienti hanno diversi set di funzionalità che possono essere modificati dinamicamente
- clienti possono sviluppare le proprie caratteristiche e li hanno distribuiti.
- L'applicazione è omogenea e ha una versione corrente, ma la versione di sollevamento dei clienti può ancora essere gestita individualmente.
- L'applicazione deve essere gestita nel suo complesso e i clienti condividono le risorse che dovrebbero essere facilmente scalabili.
Domanda: Dovremmo costruire questo su un framework OSGi standard o ci sarebbe stato meglio di utilizzare uno dei framework applicativi emergenti (Virgo, Ariete o moderno standard OSGi)?
più di fondo e alcune riflessioni iniziali:
Stiamo costruendo una web-app, che prevediamo avrà presto centinaia di clienti (aziende) con centinaia di utenti ciascuno (dipendenti), altrimenti perché fastidio;). Vogliamo renderlo modulare quindi OSGi. In futuro i clienti stessi potrebbero sviluppare e integrare componenti per la loro applicazione, quindi abbiamo bisogno dell'isolamento del cliente. Potremmo anche volere che clienti diversi ottengano set di funzionalità differenti.
Qual è il modo "corretto" per fornire diverse implementazioni di servizi a diversi client di un'applicazione quando diversi client condividono gli stessi bundle?
Potremmo utilizzare l'approccio app-server (abbiamo esaminato Virgo) e caricare ogni pacchetto una volta per ogni cliente nella propria "app". Tuttavia non ha voglia di abbracciare OSGi. Non stiamo ospitando una moltitudine di applicazioni, il 99% dei servizi condividerà la stessa impl. per tutti i clienti. Inoltre vogliamo gestire (configurare, monitorare ecc.) L'applicazione come una sola.
Ogni servizio può essere registrato (correttamente configurato) una volta per ciascun cliente insieme ad alcune proprietà "cliente-token". È un po 'disordinato e dovrebbe essere gestito con un pattern di estensione o forse un ManagedServiceFactory? Inoltre, prima di registrare un servizio per il cliente A sarà necessario acquisire la versione A di ciascuna delle sue dipendenze.
Il cliente "corrente" sarà noto a ciascuna richiesta e può essere associato alla discussione. È un po 'un casino dover fornire un token cliente ogni volta che si cerca un servizio. Rende difficile l'utilizzo di framework di componenti come blueprint. Per aggirare il problema, è possibile utilizzare i ganci di servizio per eseguire il proxy di ciascun tipo di servizio registrato e lasciare che il proxy venga inviato all'istanza corretta in base al cliente corrente (thread).
Iniziare la nostra intera esperienza OSGi implementando la soluzione alternativa (hack?) Sopra sembra davvero un'indicazione che siamo sulla strada sbagliata. Quindi cosa dovremmo fare? Torna alla Vergine? Prova qualcosa di simile a ciò che è descritto sopra? Qualcosa di completamente diverso ?!
ps. Grazie per aver letto fino in fondo!;)
Ho modificato la domanda per renderla più concreta, quindi dovrebbe essere più semplice accettare una risposta, che voglio davvero fare! Sono abbastanza nuovo per lo stackoverflow quindi scusami per essere un po 'goffo ... –