com.sun.management.OperatingSystemMXBean использовать в пакете OSGi - PullRequest
1 голос
/ 13 апреля 2010

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

Missing Constraint: Import-Package: com.sun.management; version="0.0.0"

Я использовал OperatingSystemMXBean для получения доступа к статистике в JVM.

Мой вопрос: могу ли я использовать этот класс внутри контейнера OSGI и если да, то как? Или я должен использовать какой-то другой способ для мониторинга моего приложения. Я делал RMI-вызов приложения из веб-интерфейса, чтобы получить показатели производительности узлов до OSGi.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Вот что я должен был сделать, чтобы это заработало.

Мне пришлось добавить com.sun.management к значению systemProperties для системного пакета, так как я был новичком в OSGI, мне потребовалось некоторое время, чтобы разобраться. Я использую maven-pax-plugin, поэтому мне нужно было добавить следующее свойство. Причиной, по которой это не сработало по умолчанию, было равноденствие. Мой контейнер osgi по умолчанию не включает пакеты com.sun. * В системный комплект по умолчанию.

Это было очевидно, если посмотреть на системный пакет с помощью команды bundle 0, так как bundle 0 - это всегда системный пакет, который был чем-то новым для меня.

<param>--sp=com.sun.management</param>

после добавления этой команды системный пакет включает com.sun.management и мой пакет развернут без проблем.

Причину, по которой равноденствие не включает пакеты com.sun в systemProperties по умолчанию, см. здесь . (Java-программа, которая напрямую вызывает пакеты sun. *, Не гарантированно работает на всех Java-совместимых платформах. Фактически, такая программа не гарантированно работает даже в будущих версиях на той же платформе.)

Таким образом, у вас есть два варианта добавления com.sun в контейнер osgi.

Решение A ': комплекты расширений

Они действуют как фрагменты; они не являются собственными связками, а привязаны к хосту. Пакеты расширений представляют собой особый вид фрагментов, которые прикрепляются только к системному пакету для предоставления необязательных частей Framework. Этот механизм можно использовать для создания пустого расширения, которое просто объявляет необходимые пакеты, оставляя загрузку своему хост-пакету (в данном случае Framework). Я не пошел по этому маршруту, так как второй вариант был реализован быстрее.

Решение B: Делегирование загрузки

В итоге я выбрал делегирование загрузки. Это позволяет пользователю создавать «подразумеваемые» пакеты, которые всегда будут загружаться загрузчиком родительского класса инфраструктуры, даже если пакеты не обеспечивают надлежащий импорт. Я достиг, установив системные пакеты для включения com.sun.management.

См. Следующую превосходную ссылку , которая более подробно описывает всю проблему.

1 голос
/ 13 апреля 2010

Не могли бы вы попытаться установить его в интерактивном сеансе OSGi?
См. эту статью , например.

osgi> ss

Framework is launched.

id State       Bundle
0 ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

osgi>  install file:bundles/FirstBundle-1.0.0.jar
Bundle id is 1

//Try starting 
osgi> start 1
org.osgi.framework.BundleException: The bundle could not be resolved. 
  Reason: Missing Constraint: Import-Package: com.so.samples.osgi.second; 
                                              version="0.0.0"
 at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
    (BundleHost.java:305)

Вы можете диагностировать проблему:

osgi> diag 1
file:bundles/FirstBundle-1.0.0.jar [1]
  Direct constraints which are unresolved:
    Missing imported package com.so.samples.osgi.second_0.0.0.

И установите отсутствующую зависимость, при условии, что вы знаете, где взять jar
(что вполне может быть сутью вашего вопроса, и на который у меня нет точного ответа, за исключением преобразования устаревшего фляги в комплект OSGi, например протокол переноса или расширение OSGi Framework ):

osgi> install file:bundles/SecondBundle-1.0.0.jar
Bundle id is 2
...