具有不同部署时间表的多租户

时间:2016-01-14 18:45:23

标签: java spring jboss

目前正在使用JBoss 5.2 + Java 8(升级JBoss即将推出)。我们有机会通过强大的多租户支持核心来重振应用程序,所以假设这可以从头开始。

我们的Java + Spring应用程序是一个简单的Web应用程序:

  • 公开我们的客户端实现(移动本机+浏览器)使用的各种REST服务。
  • 连接各种系统以完成“租户”实施。

我们利用标准化的客户端/服务器模式构建我们的租户实现,并在每一侧进行定制。在服务方面,这涉及到各种外部服务,包括特定租户的后端系统,用于查询或最终产品提交。

这是一个域驱动设计,将各种服务视为基于接口的可插拔实用程序。这些服务基本上充当我们的标准化域对象的转换和请求/响应处理程序。目前,各种服务接口,公共服务和特定于租户的模块被分解为单独的项目,并通过JAR格式的POM进行聚合。另请注意,我们目前只有一个控制器层,因为客户端/服务器接口已针对我们的解决方案进行了标准化。

我的问题是:如何在不关闭JVM的情况下支持各种租户的发布?

目前的想法是能够动态交换租户JAR依赖项。现在,特定于租户的服务由spring bean注入指定 - 由URL请求确定的租户配置由(由会话令牌保护)。

考虑3个租户的以下场景:

  • 租户A周六凌晨3点发布
  • 租户B希望每两周一次的@周六上午9点发布敏捷/安全版本
  • 租户C希望每个季度在星期三晚上8点发布计划开发

当然需要确保应用程序的安全性,所以不要打破类加载做任何不好的事情。

任何帮助/方向都将受到赞赏,并将根据我们最终的结果进行更新。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

所以我到目前为止提出的是一个托管多个WAR的JVM。 组件分为各自的项目:

  • '核心' - 控制器,网络服务工厂等。
  • 服务接口
  • 域对象
  • 租户实施(各自独立)

这一项目分割允许它们单独构建并利用Maven的版本控制系统(快照)。

每个实施(租户)现在都有一个应用程序'将各种组件和服务整合在一起的项目。这是一个与租户实现不同的项目 - 允许其他项目重用其使用相同域对象的项目。这些应用程序'项目将提供应用程序和子组件的所有配置,并将其构建到自己的WAR中。

部署过程如上所述 - 一个JVM在启动/停止WAR时不会循环。我们目前运行的是旧版本的JBoss,因此搞乱类加载器一直是主要问题,但也不错。希望在JBoss下将WAR升级或分离到他们自己的服务器区域。

通过JAR的数据库存储或转移到Docker设置来查看自定义类加载器。