Plugins 使用哪种插件体系结构

Plugins 使用哪种插件体系结构,plugins,architecture,osgi,equinox,extensibility,Plugins,Architecture,Osgi,Equinox,Extensibility,我想为一个非常通用的应用程序创建一个插件扩展机制,它有许多方面和许多不同的功能 关于我所开发内容的更多细节: 我有一个GUI应用程序,希望提供许多扩展点。我想添加菜单、动作、工具栏按钮等。 我有一些非GUI服务,它们监视对已编辑数据的更改等。我想注册这些服务。 我以Equinox为例,我不能使用它,因为应用程序约束和它非常好的扩展机制涉及扩展和扩展点。这种方法有什么问题?对于这个问题有哪些替代解决方案可用?对于UI扩展性,eclipse RCP肯定会在这方面提供很多功能 对于较低的层,听起来像是

我想为一个非常通用的应用程序创建一个插件扩展机制,它有许多方面和许多不同的功能

关于我所开发内容的更多细节:

我有一个GUI应用程序,希望提供许多扩展点。我想添加菜单、动作、工具栏按钮等。 我有一些非GUI服务,它们监视对已编辑数据的更改等。我想注册这些服务。
我以Equinox为例,我不能使用它,因为应用程序约束和它非常好的扩展机制涉及扩展和扩展点。这种方法有什么问题?对于这个问题有哪些替代解决方案可用?

对于UI扩展性,eclipse RCP肯定会在这方面提供很多功能

对于较低的层,听起来像是在看OSGi,Equinox只是许多可能的运行时环境之一。如果你坚持按照规范编码,那么你可以使用Equinox,Felix。。。或应用程序的任何其他实现


当你谈到可扩展性时,你还没有真正定义你想要的是什么,而且有了这样一个开放式的问题,你正在提出它。

对于UI可扩展性,eclipse RCP肯定会在这方面提供很多功能

对于较低的层,听起来像是在看OSGi,Equinox只是许多可能的运行时环境之一。如果你坚持按照规范编码,那么你可以使用Equinox,Felix。。。或应用程序的任何其他实现


当你谈到可扩展性时,你还没有真正定义你想要的是什么,面对这样一个开放式的问题,你正在把它关闭。

你写的是什么样的应用程序?扩展和扩展点的eclipse机制是eclipse rcp的专有概念。因此,如果您编写一个EclipseRCPGUI,那么这就是一条路要走

如果您编写一个服务器应用程序,那么OSGi服务就更合适了。对于服务器应用程序,我建议使用而不是Equinox。Karaf可以将Equinox作为OSGi框架运行,但它还提供了许多附加功能,如从maven repos部署和日志记录支持。下面介绍如何使用OSGi和ApacheKaraf编写简单的服务器应用程序。它展示了如何使用OSGi服务来解耦api和实现


对于可扩展性,您可能希望使用一个API和多个服务实现。这也是可能的。您可以获取接口的服务列表,还可以收到添加和删除服务的通知。

您编写的是哪种应用程序?扩展和扩展点的eclipse机制是eclipse rcp的专有概念。因此,如果您编写一个EclipseRCPGUI,那么这就是一条路要走

如果您编写一个服务器应用程序,那么OSGi服务就更合适了。对于服务器应用程序,我建议使用而不是Equinox。Karaf可以将Equinox作为OSGi框架运行,但它还提供了许多附加功能,如从maven repos部署和日志记录支持。下面介绍如何使用OSGi和ApacheKaraf编写简单的服务器应用程序。它展示了如何使用OSGi服务来解耦api和实现


对于可扩展性,您可能希望使用一个API和多个服务实现。这也是可能的。您可以获取接口的服务列表,还可以收到添加和删除服务的通知。

使用OGSi时需要注意的一个问题是,它为每个bundle=模块使用类加载器来将bundle彼此隔离。这通常是一件痛苦的事情,尤其是在使用那些不是设计用于OSGi环境的库时。最终,几乎所有产生的类加载问题都可以解决,但解决这些问题可能会非常耗时

您还可以使用spring使程序模块化和可扩展。Spring的应用程序上下文可以嵌套,这样模块就可以使用其父级的Springbean,而不是相反。可以告诉Spring自动发现类路径上所有JAR的应用程序上下文文件。为了使用这种方法对eclipse扩展点进行建模,一个模块可以提供一个bean,该bean具有一个寄存器方法,其他模块可以使用该方法进行挂钩


使用来自另一个模块的服务就像在spring中获取对服务bean的引用一样简单,假设应用程序上下文层次结构已相应地设置。

在使用OGSi时需要注意的一个问题是,它为每个bundle=模块使用一个类加载器来将bundle彼此隔离。这通常是一件痛苦的事情,尤其是在使用那些不是设计用于OSGi环境的库时。最后,几乎所有由此产生的类加载问题都可以得到解决,但这可能相当困难 把事情弄清楚很费时

您还可以使用spring使程序模块化和可扩展。Spring的应用程序上下文可以嵌套,这样模块就可以使用其父级的Springbean,而不是相反。可以告诉Spring自动发现类路径上所有JAR的应用程序上下文文件。为了使用这种方法对eclipse扩展点进行建模,一个模块可以提供一个bean,该bean具有一个寄存器方法,其他模块可以使用该方法进行挂钩


使用来自另一个模块的服务就像在spring中获取对服务bean的引用一样简单,前提是应用程序上下文层次结构已相应设置。

此问题需要讨论和意见,不适合这样做。作者明确提到这些类型的问题不适合这里的设计。投票结束是没有建设性的。如果你想搜索其他类似的机制,请使用搜索引擎——谷歌和必应都能很好地实现这一目的。@KenWhite I重新设计了这个问题,使其不那么含糊。这个问题需要讨论和发表意见,不适合这样做。作者明确提到这些类型的问题不适合这里的设计。投票结束是没有建设性的。如果你想搜索其他类似的机制,请使用搜索引擎——谷歌和必应都能很好地实现这一目的。@KenWhite我重新设计了这个问题,这样就不那么含糊了。我在描述中添加了更多细节。因此,对于eclipse rcp gui,你应该使用正确的扩展。不确定这对于Eclipse4是否完全正确,因为现在有很多基础设施也构建在OSGi服务上。我在描述中添加了更多细节。因此,对于EclipseRCPGUI,您应该在正确的轨道上使用扩展。不确定这对于Eclipse4是否完全正确,因为现在有很多基础设施也构建在OSGi服务之上。