Rozwijamy web-aplikacji (pozwala nazwać to bank zdjęć), dla których mamy zidentyfikowane następujące potrzeby:Jak świadczenie usług OSGi na kliencie
- Aplikacja zaspokaja klientów, które składają się z zestawu użytkowników.
- Nowy klient mogą być tworzone dynamicznie, a klient udaje to użytkownicy
- klienci mają różne zestawy funkcji, które mogą być dynamicznie zmieniane
- klienci mogą rozwijać swoje własne cechy i ich rozmieszczenia.
- Aplikacja jest jednorodna i ma aktualną wersję, ale wersja do podnoszenia klientów może być nadal obsługiwana indywidualnie.
- Aplikacja powinna być zarządzana w całości, a klienci dzielą zasoby, które powinny być łatwe do skalowania.
Pytanie: powinniśmy budować to na standardowej ramy OSGi lub bylibyśmy lepiej z użyciem jednego z powstających struktur aplikacyjnych (Panna, Baran lub zbliżający standardowych OSGi)?
Więcej tło i kilka początkowych myśli:
Budujemy aplikację internetową, która Widzimy wkrótce setki klientów (firm) z setkami użytkowników każdy (pracowników), w przeciwnym razie po co;). Chcemy, aby był modułowy, a więc OSGi. W przyszłości sami klienci mogą opracowywać i wtłaczać komponenty do swoich aplikacji, więc potrzebujemy izolacji klienta. Możemy również chcieć różnych klientów, aby uzyskać różne zestawy funkcji.
Jaki jest "prawidłowy" sposób dostarczania różnych implementacji usług różnym klientom aplikacji, gdy różni klienci dzielą te same pakiety?
Moglibyśmy skorzystać z metody App-Server (patrzyliśmy na Virgo) i ładować każdy pakiet raz dla każdego klienta w jego "aplikacji". Jednak nie ma ochoty na objęcie OSGi. Nie hostujemy wielu aplikacji, 99% usług będzie miało tę samą implikację. dla wszystkich klientów. Chcemy również zarządzać (konfigurować, monitorować itd.) Aplikację jako jedną.
Każda usługa może być zarejestrowana (poprawnie skonfigurowana) raz dla każdego klienta wraz z pewną właściwością "klient-token". Trochę bałaganu i trzeba się z tym uporać z rozbudowanym wzorcem lub może ManagedServiceFactory? Również przed zarejestrowaniem usługi dla klienta A trzeba będzie nabyć wersję A każdej z jego zależności.
"Obecny" klient będzie znany w każdym żądaniu i może być związany z wątkiem. Trochę bałaganu, który musi dostarczyć żeton klienta za każdym razem, gdy szukasz usługi. Utrudnia to korzystanie ze struktur komponentów, takich jak blueprint. Aby obejść ten problem, możemy użyć haków serwisowych do proxy każdego zarejestrowanego typu usługi i pozwolić na wysłanie proxy do właściwej instancji zgodnie z bieżącym klientem (wątek).
Rozpoczęcie naszego całego doświadczenia z OSGi poprzez zastosowanie obejścia (hack?) Powyżej naprawdę wydaje się wskazówką, że jesteśmy na niewłaściwej ścieżce. Więc co powinniśmy zrobić? Wróć do Virgo? Spróbuj czegoś podobnego do tego, co zostało opisane powyżej? Coś zupełnie innego ?!
ps. Dziękuję za przeczytanie tutaj!;)
Edytowałem pytanie, aby było bardziej konkretne, więc łatwiej zaakceptować odpowiedź, którą naprawdę chcę zrobić! Jestem całkiem nowy w stackoverflow, więc wybacz mi, że jestem trochę niezręczny ... –