微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何实例化几个OSGi服务?

如何解决如何实例化几个OSGi服务?

| 在Eclipse RCP应用程序的上下文中,我决定使用Osgi服务从插件(即捆绑包)中提供\“ Interfaces \”。 在我的一个插件中,我具有以下解析器界面:
public interface Parser {

    public void start(File file);

    public boolean hasNext();

    public Object next();
}
消费者插件将使用此接口来解析文件。因为可以同时完成多个解析,并且由于此接口的实现将需要多个“状态”私有字段,所以该服务的每个使用者都必须使用专用的服务实例。 在这种情况下,由manu Osgi教程提供的解决方案不起作用,该解决方包括在解析器包的start方法注册一个服务实例。处理这种解决方案的最佳解决方案是什么? 我可以使用一种独特的方法创建ParserFactory服务:
public Parser create(File file);
?? 欢迎任何评论,     

解决方法

正如您的建议,我将您的服务接口更改为解析器的提供者。 而且您的解析器只是一个迭代器,所以类似
public interface ParserFactory<T> {

  /** Iterating on the returned object
   *  provides Ts parsed from the InputStream.
   *
   *  @param input must be closed by the returned object 
   *   when done iterating. 
   */
  Iterable<T> createParser(InputStream input);
}
使用InputStream或Reader也使它比需要File更加灵活。     ,看看OSGi ServiceFactory;这使您可以为不同的请求包实例化服务。您可以在核心规范的5.6节中阅读有关它的更多信息。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。