Работает ли javax.imageio.spi.ServiceRegistry в контейнере OSGi?

StackOverflow https://stackoverflow.com//questions/12664287

  •  11-12-2019
  •  | 
  •  

Вопрос

Может ли кто-нибудь сказать мне точно, есть ли пакет osgi, содержащий код, вызывающий

javax.imageio.spi.ServiceRegistry

чтобы найти службу (в META-INF\service), она найдет эту службу, если реализация этой службы находится в другом пакете.

Я не нашел какой-либо конкретной документации по этому поводу.Я использую контейнер Felix osgi.Любые указатели будут с благодарностью приняты.

Я подозреваю, что это работает, и моя проблема заключается в другом, поскольку я заметил это в пакете xdocreport osgi. fr.opensagres.xdocreport.core, ServiceRegistry привыкает здесь но, возможно, он не поддерживается во всех контейнерах osgi?

Это было полезно?

Решение 3

Привет, спасибо всем за ваши ответы. Я думаю, что сервисность будет работать в контейнере OSGI для создания сервиса, но только в том же классе. И это облегчено использованием ОСГИ Фрагменты . Таким образом, до тех пор, пока использователь находится в фрагменте, который определяет свой фрагмент-хост в качестве пакета, который содержит класс, который имеет код поиска серверогии, то будет работать серверность.

Вот почему он работает в коде XDocorport, с которым я связался. В этом случае код военноадреализатора вызывается из абстрактного класса в fr.OpenSagres.xdocreport.core (пункт), который продлен Бетонный класс в fr.Opensagres.xdocreport.document (так, чтобы позвонить о серверугестере в fr.opensagres.xdocreport.document). Реализация услуг находится в fr.Opensagres.xdocreport.document.docx . Фрагмент, чей определил его хост FRAMATS AS FR.OPENSAGRES.xDOCREPORT.Document .

SO FR.OPENSAGRES.xDOCREPORT.DOCUMENT и FR.OPENSAGRES.XDOCREPORT.Document.Docx Используйте тот же класс погрузчика ... Так что работает!

Другие советы

из коробки, OSGI не поддерживает это, вам нужно немного настроить свой код. Но есть инструменты, такие как aries SPI Fly и Pax-Swissbox этой поддержкиты В использовании этих SPI «Услуги»

Нет, это не так.Я думаю, что это только обнаружит услуги в системном загрузке класса, так что это довольно бесполезно для связки.

Там может быть обходной путь, это post довольноПолезно, хотя я сомневаюсь, если это будет использование вашей проблемы.

Также OSGI 5 будет поддерживать его («Средний погрузчик Mediator»).Справочная реализация составляет SPI Fly из Apache Ories

В XDocReport мы хотели иметь модульная отчетность по API справляться :

  • любой вид документа (docx, odt, pptx...).И вы можете реализовать свой собственный тип документа, если хотите, и зарегистрировать его через javax.imageio.spi.ServiceRegistry.
  • любой тип шаблонизатора (Freemarker, скорость...).И вы можете реализовать свой собственный тип шаблона, если хотите, и зарегистрировать его через javax.imageio.spi.ServiceRegistry.
  • любой тип конвертера (конвертер docx->pdf с POI+iText, конвертер docx->xhtml с POI, конвертер odt->pdf с ODFDOM+iText, конвертер odt->xhtml с ODFDOM...).И вы можете реализовать свой собственный конвертер, если хотите, и зарегистрировать его через javax.imageio.spi.ServiceRegistry (например:реализовать конвертер docx->pdf с помощью docx4j+FOP, конвертер docx->pdf с помощью JODConverter и т. д.).

Как вы поняли, javax.imageio.spi.ServiceRegistry работает в контексте OSGi потому что мы используем фрагмент OSGi (используйте один и тот же загрузчик классов), а не пакет OSGi.Мы сделали этот выбор, чтобы управлять контекстом, отличным от OSGi, и контекстом OSGi с помощью одного и того же кода.

Мы решили использовать фрагмент OSGi, а не пакет OSGi, потому что:

  1. если мы используем пакет OSGi, нам нужно разработать активатор OSGi для регистрации нашего открытия (в этом пакете контекста javax.imageio.spi.ServiceRegistry не работает).
  2. если мы используем пакет OSGi, вам необходимо настроить начальный уровень для каждого пакета, который регистрирует обнаружение.

Единственным недостатком использования фрагмента OSGi является то, что вы не можете использовать в своем контейнере OSGi несколько версий шаблона, конвертера и документа XDocReport.Но хороша ли эта функция для XDocReport?

Ты не должен этого javax.imageio.spi.ServiceRegistry работает с JDK5 (и JDK6).JDK6 предоставляет java.util.ServiceLoader это новый класс служб регистрации как javax.imageio.spi.ServiceRegistry.

в XDocReport мы хотим поддерживать JDK5+JDK6.Используется только XDocReport 0.9.8 javax.imageio.spi.ServiceRegistry.Но похоже, что Google App Engine запрещает использование этого класса (см. выпуск 132).Поэтому я разработал XDocReport 1.0.0. JDKServiceLoader управлять отражением Java как java.util.ServiceLoader и javax.imageio.spi.ServiceRegistry для JDK5 и JDK6.

С уважением Анджело

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top