OSGi vs jboss hot deploy

Из того, что я понимаю, в OSGi вы можете обновлять банки во время выполнения без перезапуска сервера. Но у jboss также есть горячее развертывание, в котором полное ухо обновляется, а сервер все еще работает.

Итак, каковы были бы преимущества OSGi в проекте java для бизнеса в joboss?

Ответ 1

Я считаю, что ответ такой же, как и в любом случае использования OSGi: модульность и более тонкая детализация обновления.

OSGi намного больше, чем обновление баннеров во время выполнения без перезапуска сервера. С точки зрения вашего вопроса, он обновляет банки во время выполнения без перезапуска приложения .

Я признаю, что не знаю конкретной реализации горячего развертывания EAR в JBoss AS, но в любом случае обновление EAR не может быть сконструировано таким образом, чтобы сохранить все состояние приложения. Сервер все еще запущен, но вы по существу перезапускаете приложение при обновлении. Степень такой потери состояния действительно зависит от того, как вы разрабатываете свое приложение, но факт остается фактом, что вы делаете вещи монолитно.

В OSGi это не так: приложение составлено из большого набора пакетов, каждый из которых, надеюсь, предназначен для обработки отдельной части функциональности. Этот подход обеспечивает возможность развертывания внутри приложения, поскольку структура предназначена для рассмотрения эффекта, который перезапуск любого отдельного банкета приводит к приложению в целом и позволяет другим банкам реагировать соответствующим образом. Это дает возможность сохранить состояние приложения как можно больше.

Следовательно, преимущества дизайна OSGi в деле Enterprise - это приложение. Не нужно подчеркивать важность этого. Воистину, есть случаи, когда приложение можно безопасно перезапустить. Но OSGi, на мой взгляд, является единственным действительно масштабируемым и поддерживаемым выбором для Java EE в настоящее время. Тот факт, что наиболее важные серверы приложений переместились (или собираются) в среду выполнения OSGi (и, следовательно, предоставили поддержку OSGi), является доказательством этого.

Ответ 2

l10i писал: С OSGi это не так: приложение составлено из большого набора пакетов, каждый из которых, надеюсь, предназначен для обработки отдельной части функциональности. Этот подход обеспечивает возможность развертывания внутри приложения, поскольку структура предназначена для рассмотрения эффекта, который перезапуск любого отдельного банкета приводит к приложению в целом и позволяет другим банкам реагировать соответствующим образом. Это дает возможность сохранить состояние приложения как можно больше.

Чтобы подробнее рассказать об этом, лучшие приложения OSGi являются сервис-ориентированными приложениями, которые интегрируются через реестр OSGi-сервисов. Этот реестр услуг является динамическим, услуги могут приходить и уходить в любое время, и пользователи сервиса OSGi соответствующим образом реагируют на эту динамичность. Итак, скажем, ваша заявка состоит из нескольких пакетов, включая пакет, который использует услугу оплаты (например, для обработки платежей по кредитным картам) и другой пакет, который предоставляет эту услугу оплаты. Если вы столкнулись с ситуацией, когда необходимо обновить платежную услугу (потому что у вас есть критическое исправление или, возможно, вы нашли более дешевого провайдера и т.д.), Вы можете обновить эту услугу оплаты, даже не снизив потребление этой услуги. Для этого вы можете обновить пакет платежных услуг, но в таком случае я бы рекомендовал установить новую версию пакета платежных услуг вместе со старой версией. Это возможно, потому что OSGi позволяет нескольким версиям одного и того же пакета сосуществовать. Затем, когда новый пакет запущен и запущен, вы можете удалить старый пакет платежных услуг, после чего потребители автоматически перевернутся к использованию новых, предоставив реестр услуг OSGi.

Такая архитектура, как приведенный выше пример, действительно мощна и полезна для обеспечения того, чтобы ваши корпоративные приложения не работали, и ее можно реализовать с помощью служб OSGi в сочетании с возможностью динамической установки, удаления или обновления пакетов OSGi.

Кстати, в приведенном выше примере есть немного больше деталей, поскольку пулы также могут быть записаны для использования всех сервисов определенного типа - что лучше всего зависит от вашей ситуации.

Существует несколько способов использования реестра служб OSGi, вы можете использовать его с ServiceTracker API, который является довольно низкоуровневым, В большинстве случаев предпочтительнее использовать инфраструктуру для этого, такую ​​как декларативные службы OSGi (DS), OSGi Blueprint или другие рамки. В большинстве случаев эти структуры работают через инъекции и обрабатывают динамичность реестра OSGi Service для вас. Информацию о DS или Blueprint см. В OSGi 4.2 Enterprise Specification.