利用OSGi解决Eclipse插件难题 - 编程入门网
在启动序列中。在 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |