有帮助吗?

解决方案 3

嗨,谢谢大家的答案。 我认为ServiceRegistry将在OSGI集装箱中工作,以实例化服务,而只是在同一类ClassLoader内。 通过使用 osgi碎片的促进。因此,只要Ifferioner处于一个分段,它将其片段主机定义为包含具有服务良好查找代码的类的捆绑包,那么ServiceRegistry会起作用。

这就是我链接到的xdocreport代码中的原因。 在这种情况下,ServiceLoader代码从 fr.opensagres.xdocreport.core (捆绑),延长在 fr.opensagres.xdocreport.document (因此serviceRegistry调用是在fr.opensagres.xdocreport.document)。服务实现在 fr.opensagres.xdocreport.document.docx 。一个碎片,其定义了它的言言 - 主机为fr.opensagres.xdocreport.document

so fr.opensagres.xdocreport.document和fr.opensagres.xdocreport.document.docx使用相同的类加载器...所以它有效!

其他提示

开箱即用,OSGI不支持这个,你需要调整你的代码一点。 但是,像Aries SPI Fly和 pax-swissbox 那样支持你 在使用这些SPI“服务”

否,它没有。我认为它只会在系统类加载器中发现服务,因此捆绑的非常毫无用处。

可能存在一个解决方法,这个 post 是漂亮的有用,虽然我怀疑是否对您的问题有任何用处。

OSGi 5将为IT提供支持(“服务装载机介质”)。参考实现是 spi fly from apache aries

在Xdocreport中,我们希望有一个模块化API报告来管理:

  • 任何文件种类(docx,odt,pptx ...)。如果您希望通过javax.imageio.spi.serviceRegistry来注册自己的文档类型,您可以实现自己的文档类型。
  • 任何模板引擎类型(Freemarker,速度......)。如果您希望通过javax.imageio.spi.serviceRegistry iserviceRegistry来实现自己的模板类型。
  • 任何转换器类型(DOCX-> PDF转换器,带POI + IText,DOCX-> XHTML Converter,带有ODFDOM + ITEXT的POI,ODT-> PDF转换器,ODT-> XHTML转换器具有ODFDOM ......)。如果您希望通过javax.Imageio.spi.serviceRegistry(例如:使用DocX4J + Fop,Docx-> PDF转换器,Docx4J + Fop,Docx-> PDF转换器,请通过javax.imageio.spi.serviceRegistry(例如:Docx4J + Fop,Docx-> PDF转换器,使用Jodconverter等)来实现自己的转换器。

    如你所知, javax.imageio.spi.serviceRegistry在OSGi上下文中工作因为我们使用OSGi片段(共享相同的类加载器)而不是OSGI捆绑。我们已经完成了使用相同代码的非OSGI和OSGI上下文来管理非OSGI和OSGI上下文。

    我们决定使用OSGI片段而不是OSGI捆绑,因为:

    1. 如果我们使用OSGI捆绑包,我们需要开发一个OSGI激活器以注册我们的发现(在此上下文中,javax.imageio.spi.serviceRegistry不起作用)。
    2. 如果我们使用OSGI捆绑包,您需要为寄存器发现的每个捆绑包配置开始级别。

      使用OSGI片段的唯一拒绝是您不能在OSGI容器中使用多个版本的Xdocroport模板,转换器,文档。但这是Xdocroport的一个很好的功能吗?

      您不能那个 javax.imageio.spi.serviceRegistry 与JDK5(和JDK6)合作。 JDK6提供 java.util.serviceloader ,它是regsiter服务的新CLAs作为javax.imageio.spi.serviceRegistry。

      在xdocreport中,我们希望支持JDK5 + JDK6。 xdocreport 0.9.8仅使用 javax.imageio.spi.serviceRegistry 。但似乎谷歌应用程序引擎禁止使用此类(请参阅我们的问题132 )。所以我已经为xdocreport 1.0.0 jdkserviceloader 通过java反射管理 java.util.serviceloader javax.imageio.spi .serviceRegistry 用于JDK5和JDK6。

      关于安吉洛

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top