有没有办法以类似于春天的方式实现OSGI中的多租户?

时间:2013-03-05 00:23:19

标签: java spring osgi multi-tenant

我店里的某个人想出了一个使用spring框架实现多租户的聪明方法。他们基本上使用常用服务创建了一个主要的父应用程序上下文,然后为每个新租户创建了一个具有特定于租户的bean的子上下文。它运作良好,我们可以动态启动新租户。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以使用OSGi Blueprint轻松完成此操作。

你可能知道Blueprint是Spring Dynamic Modules的继承者......所以,很明显,Blueprint上下文和Spring上下文之间有很多相似之处。

以下是OSGi蓝图指南:

http://www.javabeat.net/2011/11/blueprint-and-service-dynamism-in-osgi/

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

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

祝你好运。

答案 2 :(得分:1)

不幸的是,没有一种标准的方法可以做到这一点。

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

我们做了something similar in Gyrex。但同样,它是一个自定义解决方案(虽然是开源),而不是OSGi标准。