【问题标题】:Develop a simple plugin modular rest reachable service in Java用Java开发一个简单的插件模块化rest可达服务
【发布时间】:2015-11-11 08:56:22
【问题描述】:

我想开发一个服务,该服务公开一个用于上传插件的 REST API,并且这些插件是本地可执行的,即来自服务器的其他类使用它们。

插件还有:

  • 插件应该是一个 jar 文件,它通过 REST API 提交并经过验证,然后通过另一个 API 方法提供以查看元数据并执行。
  • 不太复杂(它们都应该至少包含一个扩展抽象类的类或接口的接口实现,服务)但可以有自己的依赖关系。
  • API 允许验证插件是否与服务兼容,并且它在 JAR 中包含的 XML 或 JSON 文件中声明了一些附加信息。
  • 有一些必须通过 API 公开的元数据(版本、制作者、是否可用、可以处理哪些数据)以 Json 形式。
  • 都实现了一种算法来执行一些数据处理,所以它们都有类似execute() 的方法。执行此方法的结果将处理给另一个类,因此在 API 上公开它并不完全重要。
  • 必须能够在运行时由其他服务器类上传和执行,因此无法重新启动

问题是我不知道从哪里开始,因为我已经在 Spring-boot 上开发了一些基本 API,因为它具有轻松开发 REST API 所需的所有东西,但我阅读的更多关于如何动态加载模块(插件)越多,我发现 Spring 不支持这种事情,我不确定类加载器或服务加载器是否可以在该上下文中工作。

我发现了 OSGi 框架,但老实说,我不知道它改变整个技术堆栈是否会对我有所帮助,所以我想确保它是正确的答案,如果是,然后找到一些资源,让我正确方向,例如一些实现类似功能的教程。

感谢您的任何建议。

【问题讨论】:

    标签: java api plugins spring-boot osgi


    【解决方案1】:

    结帐OSGi enRoute。它包括一个开发 RESTful 服务的模型:http://enroute.osgi.org/services/osgi.enroute.rest.api.html

    【讨论】:

    • 这与 maven 依赖关系的表现如何,我还有其他要求,我需要进行一些数据库操作,并且在 JDBC 上执行这些操作可能会超过使用 OSGI 框架来支持运行时插件架构的便利性.另外,这个标准与 Apache Karaf 相比有多好?因为据我了解,我可能会将 Karaf + JAX-RS 用于 REST 端点。
    • 1) OSGi enRoute 允许通过 JPM 添加所有 maven 依赖项。 2) 请注意,OSGi 不是应用服务器。您带来自己的依赖项,而不必依赖一组有限的可用标准服务。 enRoute REST 实际上是一个 POJO 映射到带有 JSON 的 REST。这是更多的 OSGi,因此比 JAX-RS 更易于使用。 (如果有一天需要的话,很容易移植到 JAX-RS。) 3) OSGi 框架上有一个 REST API 的 OSGi 规范。
    • 这真的很有帮助@PeterKriens!我会将此标记为答案。然而,我确实为我正在处理的特定项目使用了动态类加载器库,因为我已经在 spring 实现了大部分服务器。我认为对于像我这样的中级新手来说,OSGi 平台的文档往往不像 spring-boot 那样易于理解。
    【解决方案2】:

    OSGi 听起来最适合您尝试做的事情。

    您可以将所有内容安装为一个包,包括您的主应用程序。如今,这项工作比几年前少了很多,但仍然不容小觑。

    另一种选择是启动嵌入式 OSGi 框架,您只需在其中安装插件。这工作量较小,但您需要确切地知道它是如何工作的。

    因此,对于这两种情况,我建议从外部 OSGi 专家那里获得帮助,因为它可以大大加快过渡速度并避免您作为初学者选择的许多错误路径。

    【讨论】:

    • 非常感谢。您对教程、初学者资源或您认为对本案例特别有用且在某些 Google 搜索中无法轻松找到的内容有任何建议吗?
    • 你可以看看我在 Apache Karaf liquid-reality.de/display/liquid/Karaf+Tutorials 上的教程。它们涵盖了如何构建 OSGi 应用程序,但我不知道有什么好的过渡教程。
    猜你喜欢
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多