简单的Java服务发现框架

时间:2010-07-13 08:53:18

标签: java service-discovery

我想在Java应用程序中发现运行期间接口的所有实现,并从用户可以添加到文件夹的JAR文件中动态加载这些类。它基本上是一个插件系统。

我找到了一些解决方案:

还有其他广泛使用的解决方案吗?

更新:不需要代码分离,OSGi似乎对我现在的简单需求来说太复杂了。我还在这个问题的标题中添加了“简单”以澄清我的意图。

4 个答案:

答案 0 :(得分:4)

它有点偏重,但你应该考虑Apache FelixEclipse Equinox,这两个都是OSGi实现,非常活跃和踢,但可能有点超出你的需求。但是,这是OSGi旨在解决的问题之一。

答案 1 :(得分:1)

您可以尝试Apache River(以前称为Jini)的服务发现

http://river.apache.org/

它通过远程接口发现服务并为您下载代理,这是一个RMI存根。

答案 2 :(得分:0)

就像@skaffman所说的那样,OSGi和现代实现似乎是一个完美的解决方案。如果您正在使用guice,请考虑iPOJO,它完美地结合了OSGi堆栈中的注释(注意iPOJO适用于任何OSGi平台)。如果您更喜欢使用XML / Spring,请考虑使用Blueprint

最后,考虑到JSPF,我不会分享你对其不成熟的看法。在该项目上进行了一些合作,我发现它在其领域非常有用,因为它允许轻松使用插件,而没有OSGi提供的麻烦和类路径分离。

答案 3 :(得分:0)

+1 SPI - 它是轻量级的,一点点维护(服务/ *文本文件),但Java的类加载器工作任何“自动发现”的方式都不会100%可靠;您可以使用一个简单的程序减少文本文件的麻烦,该程序对于给定的项目/目录生成和/或(我建议)测试包含所有实现

+2 OSGi - 如果你愿意去中量级,并注意实施变得越来越轻松(至少其中一些!)