Мы разрабатываем веб-приложение (назовем его банком изображений), для которого мы определили следующие потребности:
- Приложение обслуживает клиентов, которые состоят из набора пользователей.
- Новый клиент может быть создан динамически, и клиент управляет своими пользователями
- Клиенты имеют различные наборы функций, которые можно динамически изменять
- Клиенты могут разрабатывать свои собственные функции и развертывать их.
- Приложение является однородным и имеет текущую версию, но отмена версии клиентов все еще может обрабатываться индивидуально.
- Приложение должно управляться как единое целое, и клиенты должны делиться ресурсами, которые должны легко масштабироваться.
Вопрос: Должны ли мы строить это на стандартной платформе OSGi или лучше использовать одну из появляющихся платформ приложений (Virgo, Aries или предстоящий стандарт OSGi)?
Дополнительные сведения и некоторые начальные мысли:
Мы создаем веб-приложение, которое, как мы предполагаем, скоро получит сотни клиентов (компаний) с сотнями пользователей (сотрудников), иначе зачем? Мы хотим сделать его модульным, отсюда и OSGi. В будущем сами клиенты могут разрабатывать и подключать компоненты к своим приложениям, поэтому нам нужна изоляция клиентов. Мы также хотели бы, чтобы разные клиенты получали разные наборы функций.
Каков «правильный» способ предоставления разных реализаций сервиса разным клиентам приложения, когда разные клиенты используют одни и те же пакеты?
Мы могли бы использовать подход «приложение-сервер» (мы рассмотрели Virgo) и загружать каждый пакет один раз для каждого клиента в свое «приложение». Однако это не похоже на принятие OSGi. Мы не размещаем множество приложений, 99% сервисов будут иметь одинаковые значения. для всех клиентов. Также мы хотим управлять (настраивать, контролировать и т. Д.) Приложением как единым целым.
Каждая служба может быть зарегистрирована (правильно настроена) один раз для каждого клиента вместе с некоторым свойством «токен клиента». Это немного грязно и должно быть обработано с помощью шаблона расширения или, возможно, ManagedServiceFactory? Также, прежде чем регистрировать услугу для клиента, необходимо приобрести A-версию каждой из его зависимостей.
«Текущий» клиент будет известен каждому запросу и может быть связан с потоком. Немного бесполезно предоставлять маркер клиента каждый раз, когда вы ищете услугу. Это затрудняет использование каркасов компонентов, таких как проект. Чтобы обойти эту проблему, мы могли бы использовать сервисные хуки для прокси каждого зарегистрированного типа сервиса и позволить прокси отправлять правильный экземпляр в соответствии с текущим клиентом (потоком).
Начиная весь наш опыт OSGi с реализации обходного пути (хак?) Выше, вы чувствуете, что мы на неверном пути. так что нам делать? Вернуться к Деве? Попробуйте что-то похожее на то, что описано выше? Что-то совершенно другое?!
пс. Спасибо, что прочитали все здесь! ;)