快速业务通道

利用OSGi解决Eclipse插件难题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
在启动序列中。在 OSGi 领域,我们不是总知道另一服务可用的时间,因 此我们需要对此进行说明。通过注册为服务侦听器,我们可得知服务开始和停止的时间。如果服务不可用 ,则允许我们缓存同义词。当服务确实可用时,我们会得到通知并注册扩展。

利用OSGi解决Eclipse插件难题(2)

时间:2011-10-21 IBM Bob Balfe

注册新扩展

下面我们将讲述本文的核心内容。现在我们有了想为其提供动态扩展的数据 (Synonyms.xml) 和已知 的扩展点 (com.company.SynonymRegistry. Synonym)。由于我们不知道何时初始化插件,也不知道是否 初始化 Synonym 插件,所以我们只要在加载插件时尝试注册 XML 文件中的条目即可。请记住:这是一个 展示概念的示例,不应在生产代码中这样实施。通常,我们尽可能多地以惰性方式(延迟或在需要时)执 行初始化。

Eclipse V3.2 中的新特性是能够在运行时提供扩展。例如,客户可以编写一个包含某个视图的应用程 序,该视图可以在单击按钮时创建一个透视图。透视图被添加到扩展注册表,然后在可用透视图的列表中 显示。此功能的重要好处之一是它可以减轻插件之间的“硬”依赖性。插件 A 可供在插件 B 中定义的平 台使用,无需依赖插件 B。而且,通过将此功能与 OSGi 框架结合,插件可以检查服务的存在性,如果存 在,可从服务中定义的扩展点创建扩展。这在使用面向服务架构的原则同时,促进了真正动态的环境。

Eclipse V3.2 中新公开的是 addContribution() 方法,该方法在 IExtensionRegistry 接口中定义 。清单 2 中的代码展示了可以通过 addContribution() API 添加扩展的方法。addContribution() 方法 旨在采用普通 XML 作为第一个参数中的 InputStream。

清单 2. 通过 addContribution() API 添加扩展的方法

IExtensionRegistry registry = RegistryFactory.getRegistry( );
Object key = ((ExtensionRegistry) registry).getTemporaryUserToken( );
ByteArrayInputStream is =
    new ByteArrayInputStream( buffer.toString().getBytes() );
    
try {
  registry.addContribution(is, bundle, null, null, key);  
}  
finally {  
try {
    is.close( );
  }catch (IOException e) {
        
  }
}

编写本文的时候 -- 意味着这是一个更改 Eclipse 未来版本的好机会 -- 允许公众访问注册表的用户 标记可以使用此内部 Eclipse 调用获得。下面的代码展示了内部 API (getTemporaryUserToken()) 的使 用。

Object key = ((ExtensionRegistry)registry).getTemporaryUserToken();

但是,在里程碑式的下一版本 Eclipse V3.2 版本中,此标记不能公开访问。为了支持应用程序中的 动态扩展,启动程序必须提供以下针对虚拟机的设置:

-Declipse.registry.nulltoken=true

此定义现在允许我们将 null 用作 addContribution() API 中的 User Token。现在,我们的代码看 上去类似如下。有关此问题中的 Bugzilla 对话,请参见 Bugzilla bug 清单。

清单 3. getTemporaryUserToken()

...
try {
  registry.addContribution(is, bundle, null, null, null);  
}  
...

利用OSGi解决Eclipse插件难题(3)

时间:2011-10-21 IBM Bob Balfe

上面显示的缓冲区变量表示实际的 XML 块。此 XML 是我们可以在 plugin.xml 文件内看到的精确副 本。回到我们的 SynonymRegistry 示例,此扩展的 XML 将类似清单 4。

清单 4. SynonymRegistry 的 XML

<plugin>
  <extension point="com.company.synonymregistry" id="myExtension">
    <synonyms
      word="mediator"
      syno

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号