当前位置: 首页 > 面试题库 >

JPA Web应用程序管理策略

居飞扬
2023-03-14
问题内容

我们目前正在使用JPA作为我们的数据访问层来开发J2EE Web应用程序。我们目前正在采用几种不同的策略来利用我们的应用程序中的缓存

  1. 创建EntityManager每个请求
    • 在请求范围内获取缓存,但在请求结束时丢失缓存
    • 轻松回滚整个请求中的任何更改
  2. 创建EntityManager每个Http会话
    • 在会话范围内获取缓存
    • 使事务变得更复杂,必须按请求创建一个新事务,然后才能按请求回滚更改

我已经在Hibernate文档中看到了这两种策略。我的问题是哪个使用更广泛,如果我们EntityManager按会话进行,是否会EntityManager在不同的请求线程中使用相同的同步问题?


问题答案:

更广泛使用的方法是创建EntityManager每个请求。但是,这应该对您隐藏。你应该使用一些依赖注入机制(春/ CDI /
EJB),将注射合适的EntityManager地方@PersistenceContext放置。

如果您对在某些情况下Bean是某种单例(一个无状态Bean /一个作用域单例的spring
bean)的普通情况下如何实现这一点感兴趣,那么容器实际上会在目标对象中注入一个代理。并且每次查询代理时,它都会获取 当前
EntityManager实例,该实例(至少在spring的情况下)绑定到ThreadLocal(在这种情况下为request)

更新: 如果要在本地框架中实现此功能,请使用cglib / javassist /
JDK代理并将其注入到@PersistenceContext放置位置。一个请求=线程。在每个需要数据访问的请求上,创建一个新请求EntityManager并将其存储在中ThreadLocal。记住最后要清理它,因为servlet容器会重用线程。从代理可以获取当前ThreadLocal值。

但是,如果您不熟悉该项目,那么我建议您改用更稳定的东西,例如spring,cdi或guice。



 类似资料:
  • Windows NT Option Pack 提供了在 Web 服务器上的 ASP 应用程序管理服务。例如,Internet 服务管理器为应用程序开发人员提供了一个使用简便的管理工具来设置应用程序的属性。另外,Active Server Pages 提供了允许用户的应用程序存储全局数据的脚本功能。本主题简要介绍部分应用程序管理功能,并提供到详细信息的链接。 启动和结束应用程序 当 Web 服务器第

  • Rails 是一个非常受欢迎的 Web 应用程序框架(从某种意义上说,是由于它被广泛应用而不是人们真正喜欢它)。 因此,在某些时候,你可能会被要求管理它。 本节要介绍的处方包含了安装一台运行 Rails 应用程序服务器所要做的绝大部分工作。 本处方假定你会使用 Nginx 和 Passenger 作为 Web 服务器, 然而你也可以轻松地修改本处方,使用 Apache 替换它。 操作步骤 创建 r

  • 默认情况下,你会将应用程序放入application/中,并且可能用 CodeIgniter 只管理这一个应用程序。当然,多个应用程序共享一个 CodeIgniter, 甚至对 application 文件夹进行重命名或更换路径也是可行的。 对应用程序文件夹重命名 如果你要对 application 进行重命名, 你需要打开 index.php 文件,对变量 $application_folder

  • 默认情况下,CodeIgniter 假设你只有一个应用程序,被放置在 application/ 目录下。但是,你完全可以拥有多个程序并让 它们共享一份 CodeIgniter 。你甚至也可以对你的应用程序目录 改名,或将其移到其他的位置。 重命名应用程序目录 如果你想重命名应用程序目录,你只需在重命名之后打开 index.php 文件将 $application_folder 变量改成新的名字:

  • 下载应用程序、共享文件、查找字体和库存图片等 — 全部通过 Creative Cloud 桌面应用程序完成。 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 注意:在您安装 Creative Cloud 桌面应用程序的过程中,本文中介绍的某些选项卡可能不可用。 Adobe Creative Cloud 桌面应用程序可供您

  • 我设置我的类,以便使用Laravel授权和策略功能。但是,在为我的方法定义中间件时,我一直遇到这个错误(类App\Policies\StatusPolicy不存在)。这就是我所拥有的: AuthServiceProvider。php ontroller.php 状态策略。php(由php artisan生成):策略状态策略--model=Status