需要 EJB 3.1 Singleton + JPA + JSF 设计建议

2024-03-30

给定:简单的 JSF web 应用程序(无 Seam),让 JSF bean 调用几个 EJB,而 EJB 又加载并保存 JPA 实体。我想要的是使用@Singletonejb 和注入的注释EntityManager 代替 EntityManagerFactory:

@Singleton
public class MyEJB {
  @PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
  protected EntityManager em; // not EntityManagerFactory
}

规格说@Singleton是线程安全的,支持并发和事务属性(从我的观点来看)这使得从 JSF bean 调用变得安全。我预计性能也会有所提高,因为EntityManager不会为每个调用重新创建,并且具有内部缓存功能。

我在这里主要关心的是当我有多个单例并且因此具有相同数量的长期生存的 EntityManager 时,对 JPA 实体的创建/更新操作。

  • 如果一个单例更新 JPA 实例会发生什么以及这些如何发生 更改是否会填充到其他单例?
  • 由于我无法关闭实体管理器,我是否需要刷新它 每个实体更新?
  • 如果这几个单例共享同一个实体会更好吗 经理?
  • 我只看到了很少的这种设计的例子。为什么?有没有严重的 缺点?

提前谢谢了!


我还期望性能上的提升,因为 EntityManager 不会为每个调用重新创建,而且它具有内部缓存功能。

您可能会使用单例节省一些内存,但在应用程序中的任何地方使用它实际上可能会使其速度变慢,因为由于只有一个 EJB 来服务应用程序的各个用户的所有并发请求,因此容器会锁定对 EJB 的访问,并且当它忙于处理一个请求,无法处理另一个请求。然而,使用锁类型(即,@Lock(WRITE) and @Lock(READ)).

当您想要使用 EJB 计时器定期执行一段代码或定期更新缓存等时,单例非常有用。

如果一个单例更新 JPA 实例会发生什么以及如何将这些更改填充到其他单例?

与非单例 EJB 的行为方式应该没有任何不同。

由于我无法关闭实体管理器,我是否需要在每次实体更新时刷新它?

如果您使用 CMT,则不会。在每笔交易结束时,所有内容都会自动刷新。

如果这几个单例共享同一个实体管理器会更好吗?

对我来说似乎是过早的优化。只需让容器为您注入 EM 即可。

我只看到了很少的这种设计的例子。为什么?有什么严重的缺点吗?

已经解释过了。

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

需要 EJB 3.1 Singleton + JPA + JSF 设计建议 的相关文章

随机推荐

  • 以编程方式删除标准 UITableView 中的栏

    有谁知道是否可以在代码中从 UITableView 中删除顶栏 那么在这种情况下 删除 书籍 栏吗 self navigationController setNavigationBarHidden YES
  • Powershell Get-ChildItem -Filter 的操作方式与具有相同值的Where 子句不同

    我的服务器上有一个名为 MyFolder 的文件夹 还有其他文件夹称为 MyFolder 1 MyFolder 2 MyFolder 3 等 如果我运行 gci C Sample Name like MyFolder 我得到预期的输出 Di
  • 可以在透明背景PNG图像上创建CSS阴影吗?

    有人知道是否可以在透明背景 PNG 图像上创建基于 css 的阴影 也许使用 CSS3 jquery 或者最后是服务器端 我想要实现的效果示例 非常确定是否可能它不会跨浏览器 但如果它性能良好 愿意应用吗 请随意添加您的意见 开放技术讨论
  • 在struts 2对话框中显示错误消息?

    我在 Struts 2 中有一个登录表单 其中包含用户名和密码字段 我想要的是当用户提交表单时 如果它不是有效用户 我想在对话框中显示错误消息 而不是在登录表单本身中显示错误消息 struts 2 中是否有可用的标签 或者有 人可以向我指出
  • Play Framework——向类路径添加新目录

    我希望能够有一个单独的目录 可以将代表插件的 jar 文件添加到 Play 2 0 项目中 Jar 文件通常保存在 Play 中的 lib 目录下 我想将我的 jar 放在一个名为 plugins 的目录中 这个问题之前被问过 但建议是只使
  • 在 Java 和 C# 中计算 SHA-1 哈希值

    在 Java 和 C 中计算 SHA 1 哈希值 我正在尝试在 C 应用程序中复制 Java 应用程序的逻辑 其中一部分涉及生成密码的 SHA 1 哈希值 不幸的是我无法从 Java 和 C 获得相同的结果 C Output 64 0a b
  • NotImplementedError:frozendict 不支持“更新” - Odoo v8

    我的 Odoo v8 模块上有以下代码 api multi def button generate wh doc self context self context partner self env res partner res for
  • 使用多个 log4net 文件记录器

    我有文件附加器 FileA FileB 和 FileC 我将 FileA 添加到根元素 因为我希望它成为一个包罗万象的元素 下面将详细介绍 我将 FileB 和 FileC 用于特定消息 并为每个附加程序创建命名记录器 在代码中 我加载用于
  • 为什么使用预编译头(C/C++)?

    为什么要使用预编译头 读了这些回复 我怀疑我对它们所做的事情有点愚蠢 pragma once Defines used for production versions ifndef PRODUCTION define eMsg x x Sh
  • 找不到 microsoft.sqlserver.batchparser.dll

    我编写了一个 asp net Web 应用程序 它使用 SMO 针对 SQL Server 2008 来运行一些数据库脚本 它引用这些程序集 位于 C Program Files Microsoft SQL Server 100 SDK A
  • qt5中MainWindow是用自身初始化的吗?

    我尝试学习 qt 5 但不明白一件事 Qt Creator 默认创建这两个文件 主窗口 h ifndef MAINWINDOW H define MAINWINDOW H include
  • 在 Laravel 迁移中向现有表添加新列

    我想在现有表中添加一些新列users在拉拉维尔 我已经用谷歌搜索了这一点 并在这些搜索之后我已经使用命令创建了迁移php artisan make migration add columns to users add columns to
  • 为什么 Swing 线程模型被认为是错误的?应该如何理解? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我多次听说 Java Swing 线
  • 使用图像映射创建不规则形状的 HTML 链接?

    我必须创建这种奇怪的蜂窝式导航 理想情况下 当用户悬停在每个 蜂窝 上时 它会改变颜色 也许是透明的橙色覆盖物或其他东西 我做了一个有点工作的 JS Fiddle 但不知道如何突出显示悬停时的形状 我已经很长时间没有看到使用图像映射了 但这
  • 如何取消设置嵌套 foreach 中的每个数组?

    我有一段多维数组输出 如下所示 Array 0 gt Array item gt null count gt 0 child gt Array Dagadu Bocah gt Array item gt Dagadu Bocah count
  • 如何在 adb (android) 中使用 Bash 而不是 Shell?

    我目前正在使用 adb 终端访问我的数据库文件 但是 我只能使用以下命令访问终端 adb shell 我想从 sh 切换到 bash 因为它对于某些快捷方式来说更方便 我怎么做 我不认为 adb 有 bash 选项 如果你输入adb hel
  • 如何使用 Apache Poi 在折线图中设置轴标签

    我正在尝试使用 java 和 Apache POI 自动创建报告 我快要完成了 但找不到如何在 XSSFChart 中设置轴标签 我已经找到了如何设置图表的标题 Apache POI 设置 Excel 图表标题 https stackove
  • SlideToggle 高度为“跳跃”

    我的 jQueryslideToggle 实验 谁能告诉我为什么我打开盒子时会 跳动 前半部分他们滑动 其余部分他们 跳跃 Thanks 约翰内斯 对我有帮助的是 overflow hidden 到那个切换
  • Android NDK:使用预编译静态库进行链接

    我正在尝试将 Jnetpcap 移植到 Android 以便使用它来解析 pcap 文件 Jnetpcap 是使用 JNI 的 libpcap 的 java 包装器 我已经使用 android 的源代码树将 libpcap 编译为静态库 当
  • 需要 EJB 3.1 Singleton + JPA + JSF 设计建议

    给定 简单的 JSF web 应用程序 无 Seam 让 JSF bean 调用几个 EJB 而 EJB 又加载并保存 JPA 实体 我想要的是使用 Singletonejb 和注入的注释EntityManager 代替 EntityMan