在 Java 中开发一个简单的插件模块化 rest 可达服务
Develop a simple plugin modular rest reachable service in Java
我想开发一个服务,它公开一个休息 API 来上传插件,并且插件是本地可执行的,即来自服务器的其他 classes 使用它们。
插件还有:
- 该插件应该是一个通过 REST API 提交的 jar 文件,一旦通过验证,就可以通过另一个 API 方法查看元数据并执行。
- 不太复杂(它们都应该至少包含一个 class 扩展抽象 class 或接口的接口实现,服务)但可以有自己的依赖关系。
- API 允许验证插件是否与服务兼容,并且它在 JAR 中包含的 XML 或 JSON 文件中声明了一些附加信息。
- 有一些元数据必须通过API(版本,谁制作的,是否可用,可以处理哪些数据)以Json形式公开。
- 所有人都实施了一种算法来执行一些数据处理,因此他们都有类似于
execute()
方法的东西。执行此方法的结果由另一个 class 处理,因此在 API. 上公开它并不完全重要
- 必须能够在运行时被其他服务器上传和执行classes,所以不可能重新启动
问题是我不确定从哪里开始,因为我已经在 Spring-boot 上开发了一些基本的 API 因为它有我需要的所有东西来轻松开发一个 REST API 但我越了解如何动态加载模块(插件),我就越发现 Spring 不支持这种东西,我不确定 class 加载器或服务加载器将在该上下文中工作。
我发现了 OSGi 框架,但老实说我不知道它改变整个技术堆栈会对我有所帮助,所以我想确保它是正确的答案,如果是,那么找到一些指向我的资源正确的方向,例如一些实现类似内容的教程。
感谢您的任何建议。
OSGi 听起来最适合您的尝试。
您可以捆绑安装所有内容,包括您的主应用程序。现在这比几年前少了很多工作,但仍然不容小觑。
另一种选择是启动一个嵌入式 OSGi 框架,您只需在其中安装插件。这是较少的工作,但你需要确切地知道它是如何工作的。
因此,对于这两种情况,我建议从外部 OSGi 专家那里获得帮助,因为它可以大大加快转换速度并避免您作为初学者选择的许多错误路径。
结帐OSGi enRoute. It includes a model to developing RESTful services: http://enroute.osgi.org/services/osgi.enroute.rest.api.html。
我想开发一个服务,它公开一个休息 API 来上传插件,并且插件是本地可执行的,即来自服务器的其他 classes 使用它们。
插件还有:
- 该插件应该是一个通过 REST API 提交的 jar 文件,一旦通过验证,就可以通过另一个 API 方法查看元数据并执行。
- 不太复杂(它们都应该至少包含一个 class 扩展抽象 class 或接口的接口实现,服务)但可以有自己的依赖关系。
- API 允许验证插件是否与服务兼容,并且它在 JAR 中包含的 XML 或 JSON 文件中声明了一些附加信息。
- 有一些元数据必须通过API(版本,谁制作的,是否可用,可以处理哪些数据)以Json形式公开。
- 所有人都实施了一种算法来执行一些数据处理,因此他们都有类似于
execute()
方法的东西。执行此方法的结果由另一个 class 处理,因此在 API. 上公开它并不完全重要
- 必须能够在运行时被其他服务器上传和执行classes,所以不可能重新启动
问题是我不确定从哪里开始,因为我已经在 Spring-boot 上开发了一些基本的 API 因为它有我需要的所有东西来轻松开发一个 REST API 但我越了解如何动态加载模块(插件),我就越发现 Spring 不支持这种东西,我不确定 class 加载器或服务加载器将在该上下文中工作。
我发现了 OSGi 框架,但老实说我不知道它改变整个技术堆栈会对我有所帮助,所以我想确保它是正确的答案,如果是,那么找到一些指向我的资源正确的方向,例如一些实现类似内容的教程。
感谢您的任何建议。
OSGi 听起来最适合您的尝试。
您可以捆绑安装所有内容,包括您的主应用程序。现在这比几年前少了很多工作,但仍然不容小觑。
另一种选择是启动一个嵌入式 OSGi 框架,您只需在其中安装插件。这是较少的工作,但你需要确切地知道它是如何工作的。
因此,对于这两种情况,我建议从外部 OSGi 专家那里获得帮助,因为它可以大大加快转换速度并避免您作为初学者选择的许多错误路径。
结帐OSGi enRoute. It includes a model to developing RESTful services: http://enroute.osgi.org/services/osgi.enroute.rest.api.html。