Java EE 6 中的多租户支持

2024-05-01

我有一个现有的 Java EE 6 应用程序(部署在 Glassfish v 3.1 中),并且希望支持多个租户。我当前在应用程序中使用的技术/API 是

  • EJB(包括EJB定时器服务)
  • JPA 2.0 (EclipseLink)
  • JSF 2.0
  • JMS
  • JAX-RS
  • 我也打算使用 CDI

据我所知,添加多租户支持仅影响持久层。我的问题:以前有人这样做过吗?转换应用程序的步骤是什么?这会影响持久性之外的其他层吗?

将会有大量的租户,因此,所有数据都将驻留在同一个数据库模式中。


持久层

从持久层开始。完成后,向上滚动您的架构。

您建议的架构将有一个标识租户的 ID(例如 TenantId)。每个表都会有这个 ID。在所有查询中,您必须确保 TenantId 与登录用户的 TenantId 匹配。

这样做的困难在于这是一个非常手动的过程。

如果您选择 Hibernate 作为您的 JPA 提供者,那么有一些工具可以帮助您实现这一点;即休眠过滤器 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/filters.html.

这些通常用于限制对多租户架构的访问(请参阅here https://stackoverflow.com/questions/5461455/saas-multi-tenancy-approaches-for-java-based-gwt-spring-hibernate-web-appli and 这里还有更多 http://vowsaas.blogspot.com/2010/09/database-patterns-tenant-view-filter.html)

我没有使用过 EclipseLink,但看起来确实如此对多租户有良好的支持 http://wiki.eclipse.org/EclipseLink/Development/Indigo/Multi-Tenancy以及。 DiscriminatorColumn 看起来与 Hibernate Filters 的概念非常相似。

服务层

我假设您正在使用 JAX-RS 和 JMS 作为服务层。如果是这样,那么您还需要考虑如何传递tenantId,并且认证 http://weblogs.java.net/blog/2008/03/07/authentication-jersey您的租户。您将如何阻止一个租户访问另一个租户的 REST 服务? JMS 也是如此。

UI Layer

您必须将 UI 中的登录连接到为过滤器/鉴别器设置 TenantId 的 Bean(Hibernate 或 Eclipselink)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java EE 6 中的多租户支持 的相关文章

随机推荐

  • 如何在 R 中连接数字列?

    我在 R 的数据框中有三列 x y 和 z 坐标 我想将其连接成一个 xyz 值 如下所示 我尝试过使用 collapse 和 sep 粘贴 但遇到了麻烦 我认为这与文本与数字变量有关 I have x y z 1 2 3 2 3 2 3
  • EditText 在 ScrollView 中不可滚动[重复]

    这个问题在这里已经有答案了 我有一个ScrollView里面是一个EditText设置为垂直滚动 但它不滚动 相反 整个布局滚动 每当我尝试滚动EditText 下面是代码
  • 从 iOS Facebook 2.x -> 3.x 迁移时如何避免用户注销

    将 Facebook iOS 集成从 2 x SDK 升级到 3 x SDK 会自动注销之前登录的用户 因为我们过去必须手动处理的身份验证凭据现在由新的 SDK 在幕后处理 SDK 有没有办法强制 3 x SDK 使用我们之前手动存储的访问
  • 减少内存分配GCC命令

    今天 在我的计算机科学课上 我被告知我可以调整程序在编译期间可以分配的内存量 使用 GCC Linux 该数量默认设置为最佳模式 这意味着尽可能多 在调试应用程序期间 我可以从这个编译器功能中受益匪浅 因为我需要正确处理分配错误 这在我的
  • ember-cli 在 --environment=product 上失败(未捕获错误:找不到模块)

    我正在使用 ember cli 并且在选择生产环境时遇到问题 具体来说 当我跑步时一切正常ember serve environment development当我运行时我得到一个空白页ember serve environment pro
  • HTML 到 CALS 表?

    我正在检查是否有人拥有可将 HTML 表转换为 CALS 的 XSLT 我发现了很多关于采用其他方式 CALS 到 HTML 的材料 但没有找到来自 HTML 的材料 我认为以前可能有人这样做过 所以我不必重新发明轮子 我并不是在寻找完整的
  • 将 Pandas GroupBy 多索引输出从 Series 转换回 DataFrame

    我有一个数据框 City Name 0 Seattle Alice 1 Seattle Bob 2 Portland Mallory 3 Seattle Mallory 4 Seattle Bob 5 Portland Mallory 我执
  • Dagger2自定义@Qualifier用法

    假设我正在制造一辆汽车 并且我有几个具有不同实现的 Brake beans class Car Inject Car BrakeType value abs Brake frontBrake BrakeType value nonabs B
  • 文本组件中的 ASCII 不可打印字符

    我的情况是 我必须扫描文本字段中的二维码 我必须解析该文本字段附带的不可打印字符 顺便说一句 它总是相同的字符 而这些字符永远不会出现在相同的位置 我尝试获取此代码但没有成功 textfield getText 失败 textfield g
  • 基本编程/算法概念[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我即将 与其他程序员一起 在我的高中
  • 在不同时区之间格式化时间的正确方法是什么?

    我想将 19 19 00 之类的时间格式化为不同的时区 如果我使用SimpleDateFormat它始终考虑纪元的开始 1970 01 01 有些时区在纪元开始时和现在有不同的偏移量 例如 现在与欧洲 基辅的默认偏移量是 UTC 0200
  • Power Query 按组的列总和作为新列

    所以我对电源查询很陌生 我只是浪费了一个多小时来寻找可以在许多其他程序中轻松完成的事情 我只想创建一个新列来总结另一列 例如 检查百分比是否正确 如果不正确则将其归一化 我不想分组并减少表格 我一直在左右搜索 并尝试使用诸如 Group S
  • websocket 订阅服务器不工作。无法到达订阅服务器 graphql-ws ws

    我遵循 相同的文档代码 1 使用websocket graphql创建订阅服务器 但它不适用于graphql ws和ws 当我删除 serverCleanup 定义时 代码有效 并且它也适用于旧的订阅库 subscription trans
  • 定期运行 python 程序作为 firebase 中的后台服务

    刚开始使用 firebase React 来构建一个网站 我网站的设计功能之一是抓取并向用户显示从另一个网站解析的数据 例如股票价格变化 我已经有一个 python 爬虫负责解析数据 但我不知道如何在 firebase 中执行我的服务器的这
  • 循环遍历文件扩展名,excel vba

    我正在使用文件扩展名数组并循环访问工作簿文件夹 该代码正在命名 Sheet 1 name MyName 我注意到尽管 xlsm 不在数组中 它仍在打开并命名工作表 这是代码 任何人都可以看看他们是否遇到同样的问题并且能够解决它 Sub Lo
  • 如何创建设置为太平洋标准时间午夜的 DateTimeOffset

    我正在使用 Quartz NET http quartznet sourceforge net http quartznet sourceforge net 我试图将开始日期设置在午夜 但我在创建这个日期时遇到问题 该应用程序将位于不同时区
  • 如何在自动完成地点中获取城市和州名称 _ Places API

    我正在使用地点自动完成功能从用户中选择城市 其工作正常 但现在我想要城市和州名 我的代码 正在初始化 List
  • 如何在 git 中使用 --work-tree 选项?我不断收到错误消息

    我有一个普通的存储库 其中有一个工作树和一个与工作树位于同一目录中的 git 文件夹 我正在尝试使用以下命令从该位置外部运行 git 命令 git git dir path to repo git work tree path to rep
  • 使用 ajax 渲染部分视图

    我查过这个问题 https stackoverflow com questions 4888521 asp net mvc3 razor views and partialviews with ajax postbacks它解决了我最初的问
  • Java EE 6 中的多租户支持

    我有一个现有的 Java EE 6 应用程序 部署在 Glassfish v 3 1 中 并且希望支持多个租户 我当前在应用程序中使用的技术 API 是 EJB 包括EJB定时器服务 JPA 2 0 EclipseLink JSF 2 0