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 中的多租户支持 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 如何在 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