Java 在OSGI中有没有一种方法可以像spring一样实现多租户?

Java 在OSGI中有没有一种方法可以像spring一样实现多租户?,java,spring,osgi,multi-tenant,Java,Spring,Osgi,Multi Tenant,我店里有人想出了一个聪明的方法,使用spring框架实现多租户。他们基本上用常用的服务创建了一个主父应用程序上下文,然后为每个新租户创建了一个带有租户特定bean的子上下文。它运行得很好,我们可以随时增加新租户 现在我们很难使用OSGI,这个模型正在崩溃。我们已经尝试了几种不同的方法,要么它们不起作用,要么我们需要关闭虚拟机来添加新租户以添加新的声明服务。创建一个父OSGi框架,然后为每个租户创建一个单独的OSGi框架。使用系统包将共享服务从父框架导出到租户框架中。不幸的是,没有标准的方法来实现

我店里有人想出了一个聪明的方法,使用spring框架实现多租户。他们基本上用常用的服务创建了一个主父应用程序上下文,然后为每个新租户创建了一个带有租户特定bean的子上下文。它运行得很好,我们可以随时增加新租户


现在我们很难使用OSGI,这个模型正在崩溃。我们已经尝试了几种不同的方法,要么它们不起作用,要么我们需要关闭虚拟机来添加新租户以添加新的声明服务。

创建一个父OSGi框架,然后为每个租户创建一个单独的OSGi框架。使用系统包将共享服务从父框架导出到租户框架中。

不幸的是,没有标准的方法来实现这一点

多框架方法(也必须自己实现)的一个替代方法是引入一个“上下文”对象(如Spring应用程序上下文),该对象实现一个
getService
方法,该方法根据特定于租户的过滤器配置获取适当的OSGi服务


是的。但是,这是一个定制的解决方案(尽管是开源的),而不是OSGi标准。

您可以使用OSGi Blueprint轻松实现这一点

您可能知道Blueprint是Spring动态模块的继承者。。。所以,很明显,Blueprint上下文和Spring上下文之间有很多相似之处

以下是OSGi蓝图指南:

我建议您创建一个“父”捆绑包,它将代表您的父Spring上下文,然后为每个租户安装一个新的捆绑包,该捆绑包使用父捆绑包导出的OSGi服务

由于捆绑包可以随时动态安装和卸载,因此您应该能够获得比单独使用Spring更好的动态性

祝你好运