Проблема с обновлением пакетов osgi

Мне нужно перезагружать пакеты osgi 4 раза в день. Перезагрузка пакета означает воссоздание статического экземпляра Beans, перезагрузку верблюжьих маршрутов, повторное создание и внедрение пулов потоков, пулов соединений с базой данных и т. д. (другие материалы Spring xml ). Я попытался обновить свои пакеты через ssh, но мне нужен идентификатор пакета для того, что может меняться со временем. Итак, я написал Manager Bundle, который получает пакеты по символическим именам и обновляет их 4 раза в день.

          osgi impl : felix 

          container : apache-servicemix-4.4.1-fuse-03-06

          Service Dependency spec : Blueprint

Есть 3 пакета вместе с вспомогательным пакетом. используемые классы и сервисные интерфейсы. Между этими тремя пакетами нет совместного использования кода (. Ни один из них не экспортирует пакеты ). Все они взаимодействуют через конечные точки и службы Camel vm. Я обновляю только остальные 3 пакета, а вспомогательный пакет не предоставляет никаких услуг.

Теперь проблема в том, что когда я обновляю эти 3 пакета, они запускаются и работают нормально, но я вижу увеличение на 800 -900 классов на jconsole каждый раз, когда я это делаю. Форсирование gc также не очищает эти объекты. Так что же могут быть эти старые проводные объекты? Зависимости службы должны обновляться автоматически, и между пакетами нет зависимостей кода. Я проверил разницу в количестве классов после и до обновления.

я мог видеть, что количество некоторых классов удвоилось, например org.apache.activemq.camel.component.VmComponent , org.apache.commons.dbcp.BasicDataSource ..etc и некоторые пользовательские bean-компоненты, которые я определил в своих верблюжьих маршрутах.Я зависим от контейнера для ядра верблюда -, чертежа, кварца и т. д. Что именно происходит с компонентами, конечными точками виртуальной машины и т. д. в контексте верблюда -и компонентах, определенных в конфигурации чертежа -xml на Обновить. Я знаю, что после обновления пакета рекомендуется вызывать FrameworkWiring.refreshBundles (). Но у меня нет совместного использования кода между пакетами, и я предположил, что любой другой контейнер зависимостей должен обрабатывать, что я считаю неправильным сейчас. И я не уверен, поддерживает ли текущая реализация фреймворка felix в сервисмиксе FrameworkWiring.refreshBundles()(ref ), я не смог заставить его работать. Как я могу решить эту проблему?

Спасибо sanre6

7
задан рüффп 28 September 2018 в 23:36
поделиться