l10i писал: «В OSGi дело обстоит иначе: приложение состоит из большого набора пакетов, каждый из которых, как мы надеемся, предназначен для обработки отдельной части функциональности. Этот подход обеспечивает горячее развертывание внутри приложения, поскольку структура предназначена для учета эффекта, который перезапуск любого отдельного jar-файла оказывает на приложение в целом, и позволяет другим jar-файлам реагировать должным образом. Это дает возможность максимально сохранить состояние приложения.
Чтобы подробнее остановиться на этом, лучшие приложения OSGi - это сервисно-ориентированные приложения, которые интегрируются через реестр сервисов OSGi. Этот реестр служб является динамическим, службы могут появляться и исчезать в любое время, и потребители служб OSGi соответствующим образом реагируют на эту динамику. Итак, предположим, ваше приложение состоит из ряда пакетов, включая пакет, который использует платежную службу (например, для обработки платежей по кредитным картам), и другой пакет, который предоставляет эту платежную службу. Если вы оказались в ситуации, когда платежный сервис необходимо обновить (из-за того, что у вас есть критическое исправление или, возможно, вы нашли более дешевого поставщика и т. Д.), Вы можете обновить этот платежный сервис, даже не отключая потребителей этого сервиса. Для этого вы можете обновить сам пакет платежных услуг, но в таком случае я бы порекомендовал сначала установить новую версию пакета платежных услуг вместе со старой версией. Это возможно, потому что OSGi позволяет сосуществовать нескольким версиям одного и того же пакета. Затем, как только новый пакет будет запущен и запущен, вы можете удалить старый пакет платежных услуг, после чего потребители автоматически переключатся на использование новых, любезно предоставленных реестром служб OSGi.
Такая архитектура, как в приведенном выше примере, действительно эффективна и отлично подходит для обеспечения бесперебойной работы ваших корпоративных приложений, и ее можно реализовать с помощью служб OSGi в сочетании с возможностью динамически устанавливать, удалять или обновлять пакеты OSGi.
Кстати, в приведенном выше примере есть немного больше деталей, поскольку пакеты также могут быть написаны для использования всех служб определенного типа - что лучше для вас, зависит от вашей ситуации.
Существует несколько способов использования реестра служб OSGi, вы можете использовать его с ServiceTracker API, что довольно низкоуровнево. В большинстве случаев для этого предпочтительнее использовать структуру, такую как OSGi Declarative Services (DS), OSGi Blueprint или другую структуру. В большинстве случаев эти фреймворки работают через внедрение и обрабатывают динамику OSGi Service Registry за вас. Для получения информации о DS или Blueprint см. OSGi 4.2 Enterprise Specification.
person
David Bosschaert
schedule
13.10.2011