OSGi для не-Java 3PPs
Мы создаем продукт, использующий платформы apache hadoop & hbase для обработки некоторых наших требований к большим данным. Мы также используем Oracle для наших требований к отчетности. Мы стремимся использовать OSGi для комплектации нашего программного обеспечения, используя преимущества удаленного развертывания, управления сервисами и слабосвязанных функций упаковки, которые предлагают контейнеры OSGi.
У нас есть несколько сомнений в этой области:
Когда речь заходит о наших собственных приложениях Java, мы теперь знаем, как создавать из них пакеты OSGi и развертывать их в контейнерах OSGi. Но как нам обращаться с 3PP на основе Java, которые имеют кластерную архитектуру, например HBase/Hadoop? Мы видели, что Fuse Fabric создала пакет Hadoop (фактически только HDFS, а не Map Reduce), но в целом, как вы собираетесь создавать пакеты для 3PP?
Как мы обрабатываем 3PP не на основе Java, как, например, Oracle. Должны ли мы создать для него пакет OSGi и развернуть его через OSGi или мы должны установить эти 3PP вне OSGi и написать несколько сценариев мониторинга, которые запускаются через OSGi для отслеживания состояния этих 3PP? Каковы лучшие практики в этой области?
Все ли пакеты, запущенные через контейнер OSGi (например, Karaf), работают в одной и той же JVM контейнера? Некоторые из наших приложений и 3PP огромны, и мы можем столкнуться с проблемами кучи / сборщика мусора, если все они запускаются внутри одной JVM. Каковы лучшие практики здесь?
Спасибо и привет Skanda
2 ответа
Создание пакетов из не-OSGi библиотек может быть таким же простым, как перепаковка его с соответствующим манифестом (для этого есть инструменты, см. Ниже), но это также может стать очень трудным. OSGi имеет специальную модель загрузки классов, и многие библиотеки Java EE, которые выполняют динамическую загрузку классов, не очень хорошо с ней работают.
Я не уверен, что вы имеете в виду здесь. Теоретически OSGi поддерживает загрузку собственных библиотек с использованием
Bundle-NativeCode
manifest-header, но у меня нет с этим опыта.Обычно все пакеты запускаются на одной виртуальной машине. Тем не менее, Караф поддерживает кластеризацию через Cellar, хотя я не знаю о других контейнерах.
Инструменты для упаковки сторонних библиотек
В общем, вы можете использовать bnd
для этого (инструмент выбора, когда речь заходит об автоматической генерации манифестов OSGi-bundle). PAX-URL предлагает wrap
протокол-обработчик, который присутствует по умолчанию в Karaf. Используя это, упаковка библиотеки может быть такой же простой (например, из командной строки Karaf или дескриптора функции):
wrap:file:path/to/library
Случай с Oracle и большинством других библиотек db прост. Вы можете использовать протокол переноса pax url. Unter обложки, которые он использует bnd с параметрами по умолчанию. У меня есть учебник по использованию базы данных с Apache Karaf.
В общем, создание пакетов из сторонних библиотек может варьироваться от простого до довольно сложного. Это в основном зависит от того, сколько грязных уловок загрузки классов использует библиотека. Прежде чем пытаться собрать вещи самостоятельно, вам следует проверить, есть ли готовые пакеты. Большинство библиотек сегодня либо поставляются в виде пакетов, либо уже доступны в виде пакетов из какого-то источника. Например, проект servicemix создает много пакетов. Вы можете спросить в списке пользователей там, если что-то доступно.